Apigee - SpikeArrest поведение
Мы используем политику spikearrest, но мы не понимаем, как это работает. Конфигурация ареста шипа следующая:
<SpikeArrest enabled="true" continueOnError="true" async="false" name="SpikeArrest">
<Rate>5pm</Rate>
<MessageWeight ref="request.header.weight"/>
</SpikeArrest>
Читая документацию, мы понимаем, что если мы вызовем более 5 раз этот поток за минуту, политика не будет выполнена в вызовах после 5-го. Но когда мы проверили его с 10 вызовами менее чем за 10 секунд, политика принимает первые два вызова и завершается ошибкой при следующих вызовах. Можете ли вы объяснить нам, почему это происходит? Может ли это быть связано с тем, что в среде есть 2 процессора сообщений и 2 маршрутизатора?
3 ответа
Аресты шипов не учитываются. В настоящее время они применяются как ограничение скорости на основе времени, когда последний соответствующий трафик был успешно обработан.
Если вы укажете 5 в минуту, это означает, что ваши запросы могут поступать только один раз в 12 секунд (1/5 минуты). Второй запрос в течение 12 секунд на том же обработчике сообщений будет отклонен. Даже при большем числе (100 в секунду), если два запроса поступают почти одновременно на один и тот же процессор сообщений, один будет отклонен. Каждый успешный (не арестованный) запрос будет обновлять последнее обработанное число арестов.
Также каждый процессор сообщений отслеживает отдельное время.
Вероятно, вам следует изучить квоты, если вы хотите получить значения в диапазоне десятков в минуту.
Пик Арест 5 в минуту означает, что он будет позволять максимум 5 сообщений в минуту и равномерно распределять эти 5 сообщений в течение минуты, то есть 1 сообщение разрешено в каждом 12-секундном окне минуты. Теперь, если счетчики пика остановки не синхронизируется между двумя обработчиками сообщений, и это строгий циклический перебор, тогда значение сообщений, разрешенных за единицу времени, будет удвоено, что в вашем случае может составить 2 сообщения за 12 секунд, отсюда и наблюдаемое поведение.
Рассматривайте Spike Arrest как способ защиты от всплесков трафика, а не как способ ограничить трафик определенным количеством запросов. Ваши API и серверная часть могут обрабатывать определенный объем трафика, а политика Spike Arrest помогает вам сгладить трафик до требуемых общих объемов.
Поведение Spike Arrest во время выполнения отличается от того, что вы можете ожидать от введенных вами буквальных значений в минуту или в секунду.
Например, скажем, вы вводите скорость 30 вечера (30 запросов в минуту). При тестировании вы можете подумать, что можете отправить 30 запросов за 1 секунду, если они пришли в течение минуты. Но это не то, как политика обеспечивает настройку. Если подумать, в некоторых средах 30 запросов за 1-секундный период можно считать мини-всплеском.
Что же тогда происходит на самом деле? Чтобы предотвратить поведение, похожее на спайк, Spike Arrest сглаживает количество разрешенных запросов, разделив ваши настройки на меньшие интервалы:
Поминутные тарифы сглаживаются в полные запросы, разрешенные с интервалом в секунды. Например, 30pm сглаживается следующим образом: 60 секунд (1 минута) / 30pm = 2-секундные интервалы или 1 запрос разрешен каждые 2 секунды. Второй запрос в течение 2 секунд не удастся. Кроме того, 31-й запрос в течение минуты не удастся.
Скорость всекунду сглаживается в полные запросы, допускаемые с интервалом в миллисекунды. Например, 10ps сглаживаются следующим образом: 1000 миллисекунд (1 секунда) / 10ps = 100 миллисекунд, или 1 запрос разрешен каждые 100 миллисекунд. Второй запрос внутри 100 мс не удастся. Кроме того, одиннадцатый запрос в течение секунды потерпит неудачу.
Более того: 1 запрос * количество обработчиков сообщений Spike Arrest не распространяется, поэтому количество запросов не синхронизируется между обработчиками сообщений. С более чем одним процессором сообщений, особенно с циклической конфигурацией, каждый обрабатывает свой собственный дросселирование Spike Arrest независимо. С одним обработчиком сообщений скорость 30pm сглаживает трафик до 1 запроса каждые 2 секунды (60 / 30). С двумя обработчиками сообщений (по умолчанию для пограничного облака) это число удваивается до 2 запросов каждые 2 секунды. Поэтому умножьте рассчитанное количество полных запросов за интервал на количество обработчиков сообщений, чтобы получить общую частоту арестов.