反模式:配置非分布式配额
<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
借助 Apigee Edge,您可以配置针对以下 API 代理的允许请求数量:
特定时间段内的配额。配额政策。
反模式
API 代理请求可以由一个或多个名为
消息处理器。如果有针对服务 API 配置了多个消息处理器
请求数量超出配额,那么每个消息处理器都会保留自己的
“count”所处理的请求数量
让我们借助一个示例来解释这一点。请考虑某个 API 代理的以下配额政策:
<!-- /antipatterns/examples/1-6.xml -->
<Quota name="CheckTrafficQuota">
<Interval>1</Interval>
<TimeUnit>hour</TimeUnit>
<Allow count="100"/>
</Quota>
上面的配置每小时应该允许处理共 100 个请求。
但实际上,如果有多个消息处理器处理 API 请求,会发生以下情况:
在上面的图示中:
- 配额政策配置为每小时允许处理 100 个请求。
- 向 API 代理发送的请求正在由两个消息处理器处理。
- 每个消息处理器都设有自己的配额计数变量(
quota_count_mp1
和 quota_count_mp2
)来跟踪其正在处理的请求数。
- 因此,每个消息处理器将分别允许处理 100 个 API 请求。实际结果是总共处理了 200 个请求,而不是 100 个请求。
影响
这种情况不符合配额配置的目的,会对处理请求的后端服务器产生不利影响。
后端服务器可能会出现以下情况:
- 由于传入的流量高于预期流量而受到压力
- 对较新的 API 请求没有响应,导致 503 错误
最佳做法
您可以考虑在配额政策中将 <Distributed>
元素设置为 true
,以确保使用一个共用的计数器来跟踪所有消息处理器中的 API 请求。可以按以下代码段所示设置 <Distributed>
元素:
<!-- /antipatterns/examples/1-7.xml -->
<Quota name="CheckTrafficQuota">
<Interval>1</Interval>
<TimeUnit>hour</TimeUnit>
<Distributed>true</Distributed>
<Allow count="100"/>
</Quota>
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-08-22。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻译问题"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/代码问题"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"易于理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"解决了我的问题"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u6700\u540e\u66f4\u65b0\u65f6\u95f4 (UTC)\uff1a2024-08-22\u3002"}
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2024-08-22。"],[],[]]