API 管理高级策略 - 将并发限制为 1

Posted

技术标签:

【中文标题】API 管理高级策略 - 将并发限制为 1【英文标题】:API Management advanced policies - Limit concurrency to 1 【发布时间】:2020-07-30 11:04:59 【问题描述】:

我在 Azure API 管理中有一个包含多个操作的 API。其中一项操作的限制执行并发性应为 1。我尝试使用以下后端策略来限制并行执行,就像 Microsoft Docs 中解释的那样。

<backend>
    <limit-concurrency key="general" max-count="1">
        <forward-request timeout="120" />
    </limit-concurrency>
</backend>

https://docs.microsoft.com/en-us/azure/api-management/api-management-advanced-policies#LimitConcurrency

不幸的是,这个限制的行为是我可以同时执行两次操作。第三次并行执行导致 429 状态码。

有人知道为什么最大计数为 1 会导致最大计数为 2?

【问题讨论】:

您必须使用 DB 或队列来实现它。 【参考方案1】:

使用并发控制,我们可以保证后端系统的并发调用不超过 2 个,并且之后的所有调用都排队到最大限制,并在 2 个并发调用之一完成时立即处理。确保不在重试和空闲时间上浪费资源。使用并发控制很简单,这里的策略是:

<limit-concurrency key="general" max-count="1" timeout="120" max-queue-length="100">
    <forward-request timeout="120" />
</limit-concurrency>

更多详情可以参考这个article。

【讨论】:

是的,正如我所写,我知道这种可能性。但不幸的是,我的后端服务无法处理 2 个并发调用。所以我需要确保它只接收 1 个并发呼叫。如果我将 max-count 设置为 1,它的行为就像设置为 2...

以上是关于API 管理高级策略 - 将并发限制为 1的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统管理——高级文件系统管理

Linux 第15天: (08月29日) Linux高级文件系统管理

高并发缓存设计策略

华为S5700系列交换机使用高级ACL限制不同网段的用户互访

在Azure API Management中设置并发限制

kakfa从入门到放弃: 分区和副本机制高级与低级API kafka-eagle原理数据清理限速