Наследование входящих правил Azure API Management из базы - PullRequest
0 голосов
/ 29 августа 2018

При установке ограничения скорости, которое я применяю к Все операции , суммируется ли ВСЕ вызовы конечной точки вместе, или это ограничение скорости для каждой конечной точки? Это важная информация при расчете базовой линии для максимального количества вызовов, но я боюсь, что не могу найти никакой информации в самом Azure о том, как это работает ...

Вот политика, которую я хочу добавить к Все операции :

<rate-limit-by-key />

Тогда в моей конечной точке Я хочу просто наследовать, добавив:

<base />

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Во время обработки запросов политики выполняются последовательно. Тег на политиках нижнего уровня определяет, когда выполняются политики верхнего уровня. Ограничение скорости по ключу работает, поддерживая один счетчик для каждого предоставленного значения ключа, независимо от того, где он размещен. Если этот счетчик выходит за пределы, указанные в запросе политики, он блокируется.

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

0 голосов
/ 29 августа 2018

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

Таким образом, вызов, поступающий с одного IP-адреса на разные конечные точки, например, по одному и тому же входящему правилу, обновит счетчик для всех точек с использованием одного и того же ключа (в данном случае IP-адреса).

Чтобы обойти это, я сделал свои ключи уникальными, объединив IP-адрес и имя операции вместе, сформировав очередь для каждой конечной точки и добавив <rate-limit-by-key> к моей конечной точке вместо <base />

Законченный пример входящего правила на моей конечной точке :

<rate-limit-by-key calls="xx" renewal-period="xx" counter-key="@(string.Join("-", context.Request.IpAddress, context.Operation.Id))" />
...