Используйте плагины

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Edge Microgateway версии 3.1.5 и более поздних версий

Аудитория

Этот раздел предназначен для операторов Edge Microgateway, которые хотят использовать существующие плагины, установленные вместе с микрошлюзом. Здесь также подробно обсуждаются плагины блокировки пиков и квот (оба включены в установку). Если вы разработчик, желающий разрабатывать новые плагины, см. раздел «Разработка пользовательских плагинов» .

Что такое плагин Edge Microgateway?

Плагин — это модуль Node.js, который добавляет функциональность Edge Microgateway. Модули подключаемых модулей следуют единому шаблону и хранятся в месте, известном Edge Microgateway, что позволяет микрошлюзу автоматически обнаруживать и загружать их. Edge Microgateway включает в себя несколько существующих плагинов, но вы также можете создавать собственные плагины, как описано в разделе «Разработка пользовательских плагинов» .

Существующие плагины в комплекте с Edge Microgateway

Несколько существующих плагинов поставляются с Edge Microgateway при установке. К ним относятся:

Плагин Включено по умолчанию Описание
аналитика Да Отправляет аналитические данные из Edge Microgateway в Apigee Edge.
клятва Да Добавляет токен OAuth и проверку ключа API в Edge Microgateway. См. Установка и настройка Edge Microgateway .
квота Нет Обеспечивает соблюдение квоты на запросы к Edge Microgateway. Использует Apigee Edge для хранения квот и управления ими. См. Использование плагина квот .
шипостойкий фиксатор Нет Защищает от скачков трафика и DoS-атак. См. раздел «Использование плагина остановки пиков» .
верхний регистр заголовка Нет Пример прокси-сервера с комментариями, предназначенный в качестве руководства, помогающего разработчикам писать собственные плагины. См . пример плагина Edge Microgateway .
накапливать-запрос Нет Собирает данные запроса в один объект перед передачей данных следующему обработчику в цепочке плагинов. Полезно для написания плагинов преобразования, которым необходимо работать с одним накопленным объектом содержимого запроса.
аккумулировать-ответ Нет Собирает данные ответа в один объект перед передачей данных следующему обработчику в цепочке плагинов. Полезно для написания плагинов преобразования, которым необходимо работать с одним накопленным объектом содержимого ответа.
преобразование в верхний регистр Нет Преобразует данные запроса или ответа. Этот плагин представляет собой лучшую реализацию плагина преобразования. Пример плагина выполняет тривиальное преобразование (преобразует данные запроса или ответа в верхний регистр); однако его можно легко адаптировать для выполнения других видов преобразований, например преобразования XML в JSON.
json2xm л Нет Преобразует данные запроса или ответа на основе заголовков принятия или типа содержимого. Подробности смотрите в документации плагина на GitHub .
квотная память Нет Обеспечивает соблюдение квоты на запросы к Edge Microgateway. Хранит и управляет квотами в локальной памяти.
проверка здоровья Нет Возвращает информацию о процессе Edge Microgateway — использование памяти, использование процессора и т. д. Чтобы использовать плагин, вызовите URL-адрес /healthcheck на своем экземпляре Edge Microgateway. Этот плагин задуман как пример, который вы можете использовать для реализации собственного плагина проверки работоспособности.

Где найти существующие плагины

Существующие плагины, входящие в состав Edge Microgateway, расположены здесь, где [prefix] — это каталог префикса npm . См. раздел «Где установлен Edge Microgateway», если вы не можете найти этот каталог.

[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins

Добавление и настройка плагинов

Следуйте этому шаблону, чтобы добавить и настроить плагины:

  1. Остановите Edge Microgateway.
  2. Откройте файл конфигурации Edge Microgateway. Подробности см. в разделе «Внесение изменений в конфигурацию опций».
  3. Добавьте плагин в элемент plugins:sequence файла конфигурации, как показано ниже. Плагины выполняются в том порядке, в котором они указаны в этом списке.
edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
     level: info
     dir: /var/tmp
     stats_log_interval: 60
  plugins:
     dir: ../plugins
     sequence:   
     - oauth
     - plugin-name
  1. Настройте плагин. Некоторые плагины имеют дополнительные параметры, которые вы можете настроить в файле конфигурации. Например, вы можете добавить следующий раздел, чтобы настроить плагин блокировки пиков. Дополнительную информацию см. в разделе «Использование плагина остановки всплесков» .
    edgemicro:
      home: ../gateway
      port: 8000
      max_connections: -1
      max_connections_hard: -1
      logging:
        level: info
        dir: /var/tmp
        stats_log_interval: 60
      plugins:
        dir: ../plugins
        sequence:
          - oauth
          - spikearrest
    spikearrest:
       timeUnit: minute
       allow: 10
  1. Сохраните файл.
  2. Перезапустите или перезагрузите Edge Microgateway, в зависимости от того, какой файл конфигурации вы редактировали.

Конфигурация для конкретного плагина

Вы можете переопределить параметры плагина, указанные в файле конфигурации, создав конфигурацию для конкретного плагина в этом каталоге:

[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins/config

где [prefix] — каталог префикса npm . См. раздел «Где установлен Edge Microgateway», если вы не можете найти этот каталог.

plugins/<plugin_name>/config/default.yaml . Например, вы можете поместить этот блок в plugins/spikearrest/config/default.yaml , и они будут переопределять любые другие параметры конфигурации.

spikearrest:
   timeUnit: hour   
   allow: 10000   
   buffersize: 0

Использование плагина остановки спайков

Плагин блокировки всплесков защищает от всплесков трафика. Он ограничивает количество запросов, обрабатываемых экземпляром Edge Microgateway.

Добавление плагина блокировки всплесков

См. Добавление и настройка плагинов .

Пример конфигурации для подавления пиков

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - spikearrest
spikearrest:
   timeUnit: minute
   allow: 10
   bufferSize: 5

Варианты конфигурации для блокировки пиков

  • timeUnit : как часто сбрасывается окно выполнения ареста пиков. Допустимые значения: секунды или минуты.
  • разрешить : максимальное количество запросов, разрешенных в течение timeUnit. См. также раздел «Если вы используете несколько процессов Edge Micro» .
  • ufferSize : (необязательно, по умолчанию = 0), если bufferSize > 0, при блокировке всплесков сохраняется это количество запросов в буфере. Как только наступит следующее «окно» выполнения, сначала будут обработаны буферизованные запросы. См. также Добавление буфера .

Как работает спайк-арест?

Рассматривайте блокировку пиков как способ общей защиты от скачков трафика, а не как способ ограничить трафик определенным количеством запросов. Ваши API и серверная часть могут обрабатывать определенный объем трафика, а политика блокировки всплесков помогает сглаживать трафик до желаемого общего объема.

Поведение блокировки всплесков во время выполнения отличается от того, что вы могли бы ожидать от вводимых вами буквальных значений в минуту или в секунду.

Например, предположим, что вы указываете скорость 30 запросов в минуту, например:

spikearrest:
   timeUnit: minute
   allow: 30

При тестировании вы могли подумать, что можете отправить 30 запросов за 1 секунду, если они приходят в течение минуты. Но это не то, как политика обеспечивает соблюдение настроек. Если подумать, 30 запросов в течение 1 секунды в некоторых средах можно считать небольшим скачком.

Что тогда происходит на самом деле? Чтобы предотвратить пиковое поведение, функция блокировки пиков сглаживает разрешенный трафик, разделяя настройки на более мелкие интервалы следующим образом:

Поминутные тарифы

Поминутные ставки сглаживаются до допустимых интервалов запросов в секундах. Например, 30 запросов в минуту сглаживаются следующим образом:

60 секунд (1 минута) / 30 = 2-секундные интервалы или примерно 1 запрос разрешен каждые 2 секунды. Второй запрос в течение 2 секунд завершится неудачей. Кроме того, 31-й запрос в течение минуты завершится неудачно.

Посекундные ставки

Посекундные ставки сглаживаются до запросов, разрешенных с интервалом в миллисекунды. Например, 10 запросов в секунду сглаживаются следующим образом:

1000 миллисекунд (1 секунда) / 10 = интервалы по 100 миллисекунд или примерно 1 запрос разрешен каждые 100 миллисекунд. Второй запрос в течение 100 мс завершится неудачно. Кроме того, 11-й запрос в течение секунды завершится неудачно.

Когда лимит превышен

Если количество запросов превышает лимит в течение указанного интервала времени, остановка пиков возвращает это сообщение об ошибке со статусом HTTP 503:

{"error": "spike arrest policy violated"}

Добавление буфера

У вас есть возможность добавить буфер в политику. Допустим, вы установили для буфера значение 10. Вы увидите, что API не возвращает ошибку сразу же, когда вы превышаете предел блокировки всплесков. Вместо этого запросы буферизуются (до указанного количества), а буферизованные запросы обрабатываются, как только становится доступно следующее подходящее окно выполнения. Размер буфера по умолчанию равен 0.

Если вы используете несколько процессов Edge Micro

Количество разрешенных запросов зависит от количества запущенных рабочих процессов Edge Micro. Spike арест вычисляет допустимое количество запросов на рабочий процесс. По умолчанию количество процессов Edge Micro равно количеству процессоров на компьютере, на котором установлен Edge Micro. Однако вы можете настроить количество рабочих процессов при запуске Edge Micro, используя параметр --processes в команде start . Например, если вы хотите, чтобы арест пиковых значений запускался при 100 запросах за определенный период времени, и если вы запускаете Edge Microgateway с опцией --processes 4 , установите allow: 25 в конфигурации ареста пиковых значений. Таким образом, практическое правило состоит в том, чтобы установить для параметра конфигурации allow значение «желаемое количество пиковых арестов / количество процессов».

Использование плагина квот

Квота определяет количество сообщений-запросов, которые приложению разрешено отправлять в API в течение часа, дня, недели или месяца. Когда приложение достигает предела квоты, последующие вызовы API отклоняются. См. также В чем разница между пиковым арестом и квотой ?

Добавление плагина квот

См. Добавление и настройка плагинов .

Конфигурация продукта в Apigee Edge

Квоты настраиваются в пользовательском интерфейсе Apigee Edge, где вы настраиваете продукты API. Вам необходимо знать, какой продукт содержит прокси-сервер с поддержкой микрошлюза, который вы хотите ограничить квотой. Этот продукт необходимо добавить в приложение разработчика. Когда вы выполняете вызовы API, аутентифицированные с помощью ключей в приложении разработчика, к этим вызовам API будет применяться квота.

  1. Войдите в свою учетную запись организации Apigee Edge.
  2. В пользовательском интерфейсе Edge откройте продукт, связанный с прокси-сервером с поддержкой микрошлюза, к которому вы хотите применить квоту.
    1. В пользовательском интерфейсе выберите «Продукты» в меню «Опубликовать».
    2. Откройте продукт, содержащий API, к которому вы хотите применить квоту.
    3. Нажмите «Изменить» .
    4. В поле Квота укажите интервал квоты. Например, 100 запросов каждую минуту. Или 50000 запросов каждые 2 часа.

  1. Нажмите Сохранить .
  2. Убедитесь, что продукт добавлен в приложение разработчика. Вам понадобятся ключи этого приложения для выполнения аутентифицированных вызовов API.

Пример конфигурации для квоты

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - quota

Параметры конфигурации квоты

Чтобы настроить плагин квот, добавьте элемент quotas в файл конфигурации, как показано в следующем примере:

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - quota
quotas:
    bufferSize:
      hour: 20000
      minute: 500
      month: 1
      default: 10000
    useDebugMpId: true
    failOpen: true
...
Вариант Описание
bufferSize

(Целое число) Конфигурация bufferSize позволяет настроить частоту синхронизации счетчика квот Edge Microgateway с Apigee Edge. Чтобы понятьufferSize, рассмотрите следующий пример bufferSize :

quotas:
 bufferSize:
  minute: 500
  default: 10000
 useDebugMpId: true
 failOpen: true

По умолчанию микрошлюз синхронизирует свой счетчик квот с Apigee Edge каждые 5 секунд, если интервал квоты установлен на «минуту». В приведенной выше конфигурации указано, что если в продукте API для интервала квоты установлено значение «минуты», Edge Microgateway будет синхронизироваться с Edge для получения текущего счетчика квот после каждых 500 запросов или через 5 секунд, в зависимости от того, что наступит раньше. Дополнительные сведения см. в разделе Общие сведения о том, как подсчитываются квоты .

Допустимые единицы времени: minute , hour , day , week , month и default .

failOpen Когда эта функция включена, если возникает ошибка обработки квоты или если запрос «Применение квоты» к Edge не может обновить счетчики удаленных квот, квота будет обрабатываться на основе локальных счетчиков только до тех пор, пока не произойдет следующая успешная удаленная синхронизация квот. В обоих этих случаях в объекте запроса устанавливается флаг quota-failed-open .

Чтобы включить функцию «открытия при сбое» квоты, установите следующую конфигурацию:

edgemicro:
...
quotas:
  failOpen: true
...
useDebugMpId Установите для этого флага значение true , чтобы включить регистрацию идентификатора MP (обработчика сообщений) в ответах на квоту.

Чтобы использовать эту функцию, необходимо установить следующую конфигурацию:

edgemicro:
...
quotas:
  useDebugMpId: true
...

Если установлено useDebugMpId , ответы о квотах от Edge будут содержать идентификатор MP и будут регистрироваться Edge Microgateway. Например:

{
    "allowed": 20,
    "used": 3,
    "exceeded": 0,
    "available": 17,
    "expiryTime": 1570748640000,
    "timestamp": 1570748580323,
    "debugMpId": "6a12dd72-5c8a-4d39-b51d-2c64f953de6a"
}
useRedis Если установлено значение true плагин использует Redis для резервного хранилища квот. Подробности см. в разделе Использование резервного хранилища Redis для квоты .

Понимание того, как подсчитываются квоты

По умолчанию микрошлюз синхронизирует свой счетчик квот с Apigee Edge каждые 5 секунд, если интервал квоты установлен на «минуту». Если для интервала задан уровень выше «минуты», например «неделя» или «месяц», период обновления по умолчанию составляет 1 минуту.

Важно отметить, что вы указываете интервалы квот в продуктах API, определенных в Apigee Edge. Интервалы квоты определяют, сколько запросов разрешено в течение минуты, часа, дня, недели или месяца. Например, для продукта A интервал квоты может составлять 100 запросов в минуту, а для продукта B — интервал квоты в 10 000 запросов в час.

Конфигурация YAML плагина quota Edge Microgateway не устанавливает интервал квоты; скорее, он предоставляет возможность настроить частоту, с которой локальный экземпляр Edge Microgateway синхронизирует количество своих квот с Apigee Edge.

Например, предположим, что в Apigee Edge определены три продукта API со следующими указанными интервалами квот:

  • Продукт А имеет квоту 100 запросов в минуту.
  • Продукт Б имеет квоту 5000 запросов в час.
  • Продукт C имеет квоту 1000000 запросов в месяц.

Учитывая эти настройки квот, как следует настроить подключаемый модуль quota Edge Microgateway? Лучше всего настроить Edge Microgateway с интервалами синхронизации, меньшими, чем интервалы квоты, определенные в продуктах API. Например:

quotas:
    bufferSize:
      hour: 2000
      minute: 50
      month: 1
      default: 10000

Эта конфигурация определяет следующие интервалы синхронизации для продуктов API, описанных ранее:

  • Для продукта А установлен «минутный» интервал. Edge Microgateway будет синхронизироваться с Edge после каждого 50-го запроса или через 5 секунд, в зависимости от того, что наступит раньше.
  • Для продукта Б установлен «часовой» интервал. Edge Microgateway будет синхронизироваться с Edge после каждого 2000-го запроса или через 1 минуту, в зависимости от того, что наступит раньше.
  • Для продукта C установлен интервал «месяц». Edge Microgateway будет синхронизироваться с Edge после каждого отдельного запроса или через 1 минуту, в зависимости от того, что наступит раньше.

Каждый раз, когда экземпляр микрошлюза синхронизируется с Edge, счетчик квот микрошлюза устанавливается равным полученному счетчику квот.

Настройки bufferSize позволяют настроить синхронизацию счетчика квот с Edge. В ситуациях с высоким трафиком параметры bufferSize позволяют синхронизировать счетчик буфера до того, как будет активирована синхронизация по времени по умолчанию.

Понимание объема квоты

Количество квот ограничено средой в организации. Для достижения этой цели Edge Microgateway создает идентификатор квоты, который представляет собой комбинацию «org + env + appName + ProductName».

Использование резервного хранилища Redis для квоты

Чтобы использовать резервное хранилище Redis для квоты, используйте ту же конфигурацию, которая используется для функции синхронизатора. Ниже приведена базовая конфигурация, необходимая для использования Redis для хранения квот:

edgemicro:
  redisHost: localhost
  redisPort: 6379
  redisDb: 2
  redisPassword: codemaster

quotas:
  useRedis: true
Подробную информацию о параметрах edgemicro.redis* см. в разделе Использование синхронизатора .

Тестирование плагина квот

При превышении квоты клиенту возвращается статус HTTP 403 вместе со следующим сообщением:

{"error": "exceeded quota"}

В чем разница между пиковым арестом и квотой?

Важно правильно выбрать инструмент для выполняемой работы. Политики квот настраивают количество сообщений с запросами, которые клиентскому приложению разрешено отправлять в API в течение часа, дня, недели или месяца. Политика квот устанавливает ограничения на потребление клиентских приложений, поддерживая распределенный счетчик, который подсчитывает входящие запросы.

Используйте политику квот для обеспечения соблюдения деловых контрактов или соглашений об уровне обслуживания с разработчиками и партнерами, а не для оперативного управления трафиком. Например, квота может использоваться для ограничения трафика для бесплатной услуги, обеспечивая при этом полный доступ платящим клиентам.

Используйте блокировку пиков для защиты от внезапных всплесков трафика API. Обычно пиковый арест используется для предотвращения возможных DDoS-атак или других вредоносных атак.