Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Edge Microgateway v. 3.3.x
Аудитория
Эта тема предназначена для операторов Edge Microgateway, желающих использовать существующие плагины, установленные вместе с микрошлюзом. В ней также подробно рассматриваются плагины защиты от скачков нагрузки и квотирования (оба включены в установку). Если вы разработчик и хотите создавать новые плагины, см. раздел «Разработка пользовательских плагинов» .
Что такое плагин Edge Microgateway?
Плагин — это модуль Node.js, который добавляет функциональность к Edge Microgateway. Модули плагинов следуют единому шаблону и хранятся в месте, известном Edge Microgateway, что позволяет микрошлюзу автоматически обнаруживать и загружать их. Edge Microgateway включает в себя несколько существующих плагинов, а также вы можете создавать собственные плагины, как описано в разделе «Разработка собственных плагинов» .
Существующие плагины, входящие в комплект Edge Microgateway
В процессе установки Edge Microgateway поставляется с рядом плагинов. В таблице ниже описаны некоторые из наиболее часто используемых плагинов.
| Плагин | Включено по умолчанию | Описание |
|---|---|---|
| аналитика | Да | Передает аналитические данные с Edge Microgateway на Apigee Edge. |
| OAuth | Да | Добавляет проверку токенов OAuth и ключей API в Edge Microgateway. См. раздел «Настройка и конфигурирование Edge Microgateway» . |
| квота | Нет | Устанавливает квоты на запросы к Edge Microgateway. Использует Apigee Edge для хранения и управления квотами. См. раздел «Использование плагина квот» . |
| шиповидный упор | Нет | Обеспечивает защиту от скачков трафика и DoS-атак. См. раздел «Использование плагина защиты от скачков трафика» . |
| заголовок-верхний регистр | Нет | Пример прокси-сервера с комментариями, предназначенный в качестве руководства для разработчиков, желающих создавать собственные плагины. См. пример плагина Edge Microgateway . |
| accume-request | Нет | Объединяет данные запроса в один объект перед передачей этих данных следующему обработчику в цепочке плагинов. Полезно для написания плагинов преобразования, которым необходимо работать с одним объединенным объектом содержимого запроса. |
| накопление-ответ | Нет | Объединяет данные ответа в один объект перед передачей этих данных следующему обработчику в цепочке плагинов. Полезно для написания плагинов преобразования, которым необходимо работать с одним объединенным объектом содержимого ответа. |
| transform-uppercase | Нет | Преобразует данные запроса или ответа. Этот плагин представляет собой пример реализации плагина преобразования, соответствующего передовым практикам. Пример плагина выполняет тривиальное преобразование (преобразует данные запроса или ответа в верхний регистр); однако его легко можно адаптировать для выполнения других типов преобразований, таких как XML в JSON. |
| json2xm l | Нет | Преобразует данные запроса или ответа на основе заголовков accept или content-type. Подробности см. в документации плагина на GitHub . |
| квотная память | Нет | Обеспечивает соблюдение квот при обработке запросов к Edge Microgateway. Хранит и управляет квотами в локальной памяти. |
| проверка здоровья | Нет | Возвращает информацию о процессе Edge Microgateway — использовании памяти, использовании ЦП и т. д. Для использования плагина вызовите URL-адрес /healthcheck на вашем экземпляре Edge Microgateway. Этот плагин предназначен в качестве примера, который вы можете использовать для реализации собственного плагина проверки работоспособности. |
Где найти существующие плагины
Существующие плагины, входящие в состав Edge Microgateway, находятся здесь, где [prefix] — это каталог префикса npm . Если вы не можете найти этот каталог, см. раздел «Где установлен Edge Microgateway» .
[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins
Добавление и настройка плагинов
Для добавления и настройки плагинов следуйте этой схеме:
- Остановить микрошлюз Edge.
- Откройте файл конфигурации Edge Microgateway. Подробности см. в разделе «Внесение изменений в конфигурацию параметров».
- Добавьте плагин в элемент
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
- Настройте плагин. Некоторые плагины имеют необязательные параметры, которые можно настроить в файле конфигурации. Например, вы можете добавить следующий фрагмент кода для настройки плагина защиты от скачков напряжения. Дополнительную информацию см. в разделе «Использование плагина защиты от скачков напряжения» .
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
- Сохраните файл.
- Перезапустите или перезагрузите 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 : Частота сброса окна выполнения остановки всплеска активности. Допустимые значения: секунда или минута.
- allow : Максимальное количество запросов, разрешенных в течение заданного времени timeUnit. См. также раздел «Если вы запускаете несколько процессов Edge Micro» .
- bufferSize : (необязательно, по умолчанию = 0) Если bufferSize > 0, механизм Spike Assert сохраняет это количество запросов в буфере. Как только наступит следующее «окно» выполнения, сначала будут обработаны запросы из буфера. См. также Добавление буфера .
Как работает система остановки импульсов?
Рассматривайте политику предотвращения скачков трафика как способ общей защиты от пиковых нагрузок, а не как способ ограничения трафика определенным количеством запросов. Ваши 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-й запрос в течение секунды завершится неудачей.
Когда лимит превышен
Если количество запросов превысит лимит в течение указанного временного интервала, функция spike arrest вернет следующее сообщение об ошибке со статусом HTTP 503:
{"error": "spike arrest policy violated"}Добавление буфера
У вас есть возможность добавить буфер к политике. Допустим, вы установите буфер равным 10. Вы увидите, что API не возвращает ошибку сразу же при превышении лимита предотвращения всплесков активности. Вместо этого запросы буферизуются (до указанного числа), и буферизованные запросы обрабатываются, как только становится доступно следующее подходящее окно выполнения. Значение bufferSize по умолчанию равно 0.
Если вы запускаете несколько процессов Edge Micro
Количество разрешенных запросов зависит от количества запущенных рабочих процессов Edge Micro. Функция Spike arrest вычисляет допустимое количество запросов на каждый рабочий процесс. По умолчанию количество процессов Edge Micro равно количеству процессоров на машине, где установлен Edge Micro. Однако вы можете настроить количество рабочих процессов при запуске Edge Micro, используя параметр --processes в команде start . Например, если вы хотите, чтобы функция Spike arrest срабатывала при 100 запросах за определенный период времени, и если вы запускаете Edge Microgateway с параметром --processes 4 , то установите allow: 25 в конфигурации Spike arrest. В итоге, общее правило заключается в том, чтобы установить параметр конфигурации allow равным "желаемое количество запросов Spike arrest / количество процессов".
Использование плагина квот
Квота определяет количество запросов, которые приложение может отправить в API в течение часа, дня, недели или месяца. Когда приложение достигает лимита квоты, последующие вызовы API отклоняются. См. также: В чем разница между предотвращением всплесков активности и квотой ?
Добавление плагина квот
См. раздел «Добавление и настройка плагинов» .
Настройка продукта в Apigee Edge
Квоты настраиваются в пользовательском интерфейсе Apigee Edge, где же настраиваются API-продукты. Вам необходимо знать, какой продукт содержит прокси-сервер с поддержкой микрошлюзов, для которого вы хотите установить квоту. Этот продукт должен быть добавлен в приложение разработчика. При выполнении API-запросов, аутентифицированных с помощью ключей в приложении разработчика, квота будет применяться к этим API-запросам.
- Войдите в свою корпоративную учетную запись Apigee Edge.
- В пользовательском интерфейсе Edge откройте продукт, связанный с прокси-сервером, поддерживающим микрошлюзы, к которому вы хотите применить квоту.
- В пользовательском интерфейсе выберите «Продукты» в меню «Опубликовать».
- Откройте продукт, содержащий API, к которому вы хотите применить квоту.
- Нажмите «Редактировать» .
- В поле «Квота» укажите интервал квоты. Например, 100 запросов в минуту или 50000 запросов каждые 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
isHTTPStatusTooManyRequestEnabled: true
...| Вариант | Описание |
|---|---|
bufferSize | (Целое число) Параметр quotas: bufferSize: minute: 500 default: 10000 useDebugMpId: true failOpen: true По умолчанию микрошлюз синхронизирует счетчик квот с Apigee Edge каждые 5 секунд, если интервал квотирования установлен на «минуту». Приведенная выше конфигурация означает, что если интервал квотирования в API-продукте установлен на «минуту», Edge Microgateway будет синхронизироваться с Edge для получения текущего количества квот после каждых 500 запросов или через 5 секунд, в зависимости от того, что наступит раньше. Для получения дополнительной информации см. раздел «Понимание того, как подсчитываются квоты» . Допустимые единицы измерения времени: |
isHTTPStatusTooManyRequestEnabled | Настраивает плагин квот таким образом, чтобы в случае нарушения квоты возвращался HTTP-ответ с кодом 429 вместо кода 403. По умолчанию: Если флаг установлен в Чтобы изменить стандартный HTTP-код ответа на edgemicro: ... quotas: isHTTPStatusTooManyRequestEnabled: true |
failOpen | При включении этой функции, если возникает ошибка обработки квоты или если запрос на "применение квоты" к Edge не обновляет удаленные счетчики квоты, обработка квоты будет производиться только на основе локальных счетчиков до следующей успешной синхронизации удаленной квоты. В обоих этих случаях в объекте запроса устанавливается флаг quota-failed-open .Для включения функции «открытия квоты в случае сбоя» установите следующие параметры конфигурации: edgemicro: ... quotas: failOpen: true |
useDebugMpId | Установите этот флаг в true , чтобы включить запись идентификатора обработчика сообщений (MP) в ответы на запросы квот.Для использования этой функции необходимо выполнить следующие настройки: edgemicro: ... quotas: useDebugMpId: true ... Если параметр {
"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 запросов в минуту.
- Для продукта B установлен лимит в 5000 запросов в час.
- Для продукта C установлен лимит в 1 000 000 запросов в месяц.
С учетом этих настроек квот, как следует настроить плагин quota Edge Microgateway? Рекомендуется настроить Edge Microgateway с интервалами синхронизации, которые ниже интервалов квот, определенных в продуктах API. Например:
quotas:
bufferSize:
hour: 2000
minute: 50
month: 1
default: 10000Данная конфигурация определяет следующие интервалы синхронизации для описанных ранее продуктов API:
- Для продукта A установлен интервал в "минуты". Edge Microgateway будет синхронизироваться с Edge после каждого 50-го запроса или через 5 секунд, в зависимости от того, что наступит раньше.
- Для продукта B установлен интервал в "часы". 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 в течение часа, дня, недели или месяца. Политика квот обеспечивает соблюдение лимитов потребления для клиентских приложений путем поддержания распределенного счетчика, который подсчитывает входящие запросы.
Политика квот используется для обеспечения соблюдения деловых контрактов или соглашений об уровне обслуживания (SLA) с разработчиками и партнерами, а не для оперативного управления трафиком. Например, квота может использоваться для ограничения трафика для бесплатного сервиса, предоставляя при этом полный доступ платным клиентам.
Используйте защиту от внезапных всплесков трафика API. Как правило, защита от всплесков трафика используется для предотвращения возможных DDoS-атак или других вредоносных действий.