从基础

时间:2018-08-29 10:45:43

标签: azure azure-api-management rate-limiting

设置速率限制时,我适用于所有操作吗?它会将所有端点呼叫加在一起吗?还是每个端点都具有此速率限制?在计算最大呼叫次数的基准时,这是至关重要的信息,但是恐怕我无法在Azure本身中找到有关此工作方式的任何信息...

这是我要添加到所有操作的政策:

<rate-limit-by-key />

然后在我的端点中,我想通过添加以下内容来继承:

<base />

2 个答案:

答案 0 :(得分:1)

按现状,所有操作下的调用汇总在一个队列中。因此,速率限制计数器不适用于单个端点,即使它直接应用于单个端点也是如此,原因是该密钥不是该端点唯一的。

例如,在相同的入站规则下,从一个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))" />

答案 1 :(得分:1)

在请求期间,处理策略被顺序执行。低级策略上的标记定义何时执行高级策略。密钥限制速率的工作原理是,每个提供的密钥值都与它的放置位置无关地维护一个计数器。如果此计数器超过限制,则会阻止策略请求中指定的限制。

换句话说,放置在不同作用域中的两个密钥限制策略将共享计数器值,而不是限制值。