设置速率限制时,我适用于所有操作吗?它会将所有端点呼叫加在一起吗?还是每个端点都具有此速率限制?在计算最大呼叫次数的基准时,这是至关重要的信息,但是恐怕我无法在Azure本身中找到有关此工作方式的任何信息...
这是我要添加到所有操作的政策:
<rate-limit-by-key />
然后在我的端点中,我想通过添加以下内容来继承:
<base />
答案 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)
在请求期间,处理策略被顺序执行。低级策略上的标记定义何时执行高级策略。密钥限制速率的工作原理是,每个提供的密钥值都与它的放置位置无关地维护一个计数器。如果此计数器超过限制,则会阻止策略请求中指定的限制。
换句话说,放置在不同作用域中的两个密钥限制策略将共享计数器值,而不是限制值。