你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
请求速率限制策略
通过工作负荷组的请求速率限制策略,可以限制分类到工作负荷组、每个工作负荷组或每个主体中的并发请求数。
速率限制在工作负荷组 请求速率限制强制策略定义的级别强制执行。
策略对象
请求速率限制策略具有以下属性:
名字 | 支持的值 | 描述 |
---|---|---|
IsEnabled |
true ,false |
指示策略是否已启用。 |
范围 |
WorkloadGroup ,Principal |
限制适用的范围。 |
LimitKind |
ConcurrentRequests ,ResourceUtilization |
请求速率限制的类型。 |
性能 | 属性包 | 请求速率限制的属性。 |
并发请求速率限制
ConcurrentRequests
类型的请求速率限制包括以下属性:
名字 | 类型 | 描述 | 支持的值 |
---|---|---|---|
MaxConcurrentRequests | int |
最大并发请求数。 | [0 , 10000 ] |
注意
- 如果工作负荷组对最大并发请求没有指定的限制,则受默认最大值
10000
的约束。
当请求超出最大并发请求数的限制时:
-
系统信息命令呈现的请求状态将
Throttled
。 - 错误消息将包括限制的 源 以及超出的 容量。
下表显示了一些并发请求的示例,这些请求返回的最大限制和错误消息:
场景 | 错误信息 |
---|---|
分类为 default 工作负荷组的受限制 .create table 命令,该命令在工作负荷组范围内限制为 80 个并发请求。 |
由于限制,管理命令已中止。 在一些退避后重试可能会成功。 CommandType: 'TableCreate', Capacity: 80, Origin: 'RequestRateLimitPolicy/WorkloadGroup/default'. |
分类为名为 MyWorkloadGroup 的工作负荷组的限制查询,该查询限制为工作负荷组范围内的 50 个并发请求。 |
由于限制,查询已中止。 在一些退避后重试可能会成功。 容量:50,源:“RequestRateLimitPolicy/WorkloadGroup/MyWorkloadGroup”。 |
被分类到名为 MyWorkloadGroup 的工作负荷组的限制查询,该查询在主体范围内限制为 10 个并发请求。 |
由于限制,查询已中止。 在一些退避后重试可能会成功。 容量:10,源:“RequestRateLimitPolicy/WorkloadGroup/MyWorkloadGroup/Principal/aaduser=9e04c4f5-1abd-48d4-a3d2-9f58615b4724;6ccf3fe8-6343-4be5-96c3-29a128dd9570'。 |
- HTTP 响应代码将
429
。 子代码将TooManyRequests
。 - 异常类型将为查询
QueryThrottledException
,并ControlCommandThrottledException
管理命令。
注意
- 如果 容量策略定义的限制之一 或超出请求速率限制策略,则会限制管理命令。
- 容量策略 可能会限制属于特定类别的请求的请求速率,例如引入。
资源利用率限制
ResourceUtilization
类型的请求速率限制包括以下属性:
名字 | 类型 | 描述 | 支持的值 |
---|---|---|---|
ResourceKind | ResourceKind |
要限制的资源。 当 ResourceKind TotalCpuSeconds 时,将根据已完成请求 CPU 使用率的执行后报告强制执行限制。 报告 CPU 使用率为 0.005 秒或更低时间的请求不会计入计数。 限制(MaxUtilization )表示在指定时间范围内(TimeWindow )内请求可以使用的总 CPU 秒数。 例如,运行即席查询的用户可能每小时限制为 1000 CPU 秒。 如果超出此限制,即使并发启动,后续查询也会受到限制,因为累积 CPU 秒数已超过滑动时段内定义的限制。 |
RequestCount ,TotalCpuSeconds |
MaxUtilization | long |
可以利用的资源的最大值。 | RequestCount: [1 , 16777215 ];TotalCpuSeconds: [1 , 828000 ] |
TimeWindow | timespan |
应用限制的滑动时间窗口。 | [00:01:00 , 1.00:00:00 ] |
当请求超出资源利用率限制时:
-
系统信息命令呈现的请求状态将
Throttled
。 - 错误消息将包括限制的 源 以及已超出的 配额。 例如:
下表显示了一些超出资源利用率限制的请求示例,以及这些请求返回的错误消息:
场景 | 错误信息 |
---|---|
已分类到名为 Automated Requests 的工作负荷组的限制请求,该请求在主体范围内每小时有 1000 个请求的限制。 |
由于超出配额限制,请求被拒绝。 资源:“RequestCount”,配额:“1000”,TimeWindow: '01:00:00',Origin: 'RequestRateLimitPolicy/WorkloadGroup/Automated Requests/Principal/aadapp=9e04c4f5-1abd-48d4-a3d2-9f58615b4724;6ccf3fe8-6343-4be5-96c3-29a128dd9570'。 |
一个限制请求,该请求被分类为名为 Automated Requests 的工作负荷组,该请求在工作负荷组范围内限制为每小时 2000 个 CPU 秒。 |
由于超出配额限制,请求被拒绝。 资源:“TotalCpuSeconds”,配额:“2000”,TimeWindow:“01:00:00”,源:“RequestRateLimitPolicy/WorkloadGroup/自动请求”。 |
- HTTP 响应代码将
429
。 子代码将TooManyRequests
。 - 异常类型将
QuotaExceededException
。
一致性如何影响速率限制
在高度一致性的情况下,最大并发请求的默认限制取决于群集的 SKU,并计算为:Cores-Per-Node x 10
。 例如,使用 Azure D14_v2 节点设置的群集(其中每个节点有 16 个 vCore)将默认限制为 16
x 10
= 160
。
在弱一致性下,最大并发请求的有效默认限制取决于群集的 SKU 和查询头数,并计算为:Cores-Per-Node x 10 x Number-Of-Query-Heads
。 例如,使用 Azure D14_v2 和 5 个查询头设置的群集(其中每个节点有 16 个 vCore)将具有有效的默认限制,即 16
x 10
x 5
= 800
。
由于高度一致性,最大并发请求的默认限制取决于事件屋的 SKU,计算方式为:Cores-Per-Node x 10
。 例如,使用 Azure D14_v2 节点设置的事件库(其中每个节点有 16 个 vCore)将默认限制为 16
x 10
= 160
。
在弱一致性下,最大并发请求的有效默认限制取决于事件库的 SKU 和查询头数,计算方式为:Cores-Per-Node x 10 x Number-Of-Query-Heads
。 例如,使用 Azure D14_v2 和 5 个查询头设置的事件库(其中每个节点有 16 个 vCore)将具有有效的默认限制 16
x 10
x 5
= 800
。
有关详细信息,请参阅 查询一致性。
default
工作负荷组
默认情况下,default
工作负荷组定义了以下策略。 可以更改此策略。
[
{
"IsEnabled": true,
"Scope": "WorkloadGroup",
"LimitKind": "ConcurrentRequests",
"Properties": {
"MaxConcurrentRequests": < Cores-Per-Node x 10 >
}
}
]
注意
- 更改
default
工作负荷组的策略时,必须为最大并发请求定义限制。
例子
以下策略最多允许:
- 工作负荷组的 500 个并发请求。
- 每个主体 25 个并发请求。
- 每小时每个主体 50 个请求。
[
{
"IsEnabled": true,
"Scope": "WorkloadGroup",
"LimitKind": "ConcurrentRequests",
"Properties": {
"MaxConcurrentRequests": 500
}
},
{
"IsEnabled": true,
"Scope": "Principal",
"LimitKind": "ConcurrentRequests",
"Properties": {
"MaxConcurrentRequests": 25
}
},
{
"IsEnabled": true,
"Scope": "Principal",
"LimitKind": "ResourceUtilization",
"Properties": {
"ResourceKind": "RequestCount",
"MaxUtilization": 50,
"TimeWindow": "01:00:00"
}
}
]
以下策略将阻止分类到工作负荷组的所有请求:
[
{
"IsEnabled": true,
"Scope": "WorkloadGroup",
"LimitKind": "ConcurrentRequests",
"Properties": {
"MaxConcurrentRequests": 0
}
},
]