在分布式计算中,通常您可能只希望允许一定数量的请求同时执行。通过使用 Dapr 的 app-max-concurrency
,您可以控制同时调用您应用程序的请求和事件数量。
默认情况下,app-max-concurrency
设置为 -1
,表示不限制并发数量。
本指南主要介绍 app-max-concurrency
,但您也可以使用 middleware.http.ratelimit
中间件来限制每秒的请求速率。理解这两种方法的区别非常重要:
middleware.http.ratelimit
:限制每秒的请求数量app-max-concurrency
:限制在任意时间点的最大并发请求(和事件)数量。有关该方法的更多信息,请参见速率限制中间件。
观看此视频以了解如何控制并发和速率限制。
app-max-concurrency
如果不使用 Dapr,您需要在应用程序中创建某种信号量并负责获取和释放它。
使用 Dapr,您无需对应用程序进行任何代码更改。
选择您希望配置 app-max-concurrency
的方式。
要在本地开发环境中使用 Dapr CLI 设置并发限制,请添加 app-max-concurrency
标志:
dapr run --app-max-concurrency 1 --app-port 5000 python ./app.py
上述示例将您的应用程序变成一个顺序处理服务。
要在 Kubernetes 中配置并发限制,请将以下注释添加到您的 pod:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nodesubscriber
namespace: default
labels:
app: nodesubscriber
spec:
replicas: 1
selector:
matchLabels:
app: nodesubscriber
template:
metadata:
labels:
app: nodesubscriber
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "nodesubscriber"
dapr.io/app-port: "3000"
dapr.io/app-max-concurrency: "1"
#...
速率限制适用于来自 Dapr 的每个事件,包括 pub/sub 事件、来自其他服务的直接调用、bindings 事件等。然而,Dapr 无法对外部传入您应用程序的请求强制执行并发策略。