This is the multi-page printable view of this section. Click here to print.
Dapr 的性能与扩展性概述
- 1: 服务调用性能
- 2: actor 性能激活
1 - 服务调用性能
本文提供了在不同托管环境中运行Dapr所需组件的服务调用API性能基准和资源利用率。
系统概述
Dapr由两个主要部分组成:数据平面和控制平面。数据平面是运行在应用程序旁边的sidecar,而控制平面负责配置sidecar并提供证书和身份管理等功能。
自托管组件
- sidecar(数据平面)
- Sentry(可选,控制平面)
- Placement(可选,控制平面)
更多信息请参见Dapr自托管模式概述。
Kubernetes组件
- sidecar(数据平面)
- Sentry(可选,控制平面)
- Placement(可选,控制平面)
- Operator(控制平面)
- sidecar注入器(控制平面)
更多信息请参见Dapr在Kubernetes上的概述。
Dapr v1.0的性能总结
服务调用API是一个反向代理,内置了服务发现功能,用于连接其他服务。这包括跟踪、指标、用于流量传输加密的mTLS,以及通过重试网络分区和连接错误来实现的弹性。
通过服务调用,您可以实现从HTTP到HTTP、HTTP到gRPC、gRPC到HTTP和gRPC到gRPC的调用。Dapr在sidecar之间的通信中始终使用gRPC,但保留了应用程序调用时使用的协议语义。服务调用是与Dapr actor通信的底层机制。
更多信息请参见服务调用概述。
Kubernetes性能测试设置
测试在一个3节点的Kubernetes集群上进行,使用普通硬件,每个节点配备4核CPU和8GB RAM,没有任何网络加速。 设置包括一个负载测试器(Fortio)pod,其中注入了一个Dapr sidecar,调用服务调用API以到达不同节点上的pod。
测试参数:
- 每秒1000个请求
- sidecar限制为0.5 vCPU
- 启用sidecar mTLS
- 启用sidecar遥测(采样率为0.1的跟踪)
- 1KB的负载
基准测试包括直接、未加密的流量,没有遥测,直接从负载测试器到目标应用程序。
控制平面性能
Dapr控制平面在非高可用模式下运行时使用总共0.009 vCPU和61.6 Mb,这意味着每个系统组件只有一个副本。 在高可用生产设置中运行时,Dapr控制平面消耗约0.02 vCPU和185 Mb。
组件 | vCPU | 内存 |
---|---|---|
Operator | 0.001 | 12.5 Mb |
Sentry | 0.005 | 13.6 Mb |
sidecar注入器 | 0.002 | 14.6 Mb |
Placement | 0.001 | 20.9 Mb |
有许多因素会影响每个系统组件的CPU和内存消耗。这些因素在下表中显示。
组件 | vCPU | 内存 |
---|---|---|
Operator | 请求组件、配置和订阅的pod数量 | |
Sentry | 证书请求数量 | |
sidecar注入器 | 准入请求数量 | |
Placement | actor重新平衡操作数量 | 连接的actor主机数量 |
数据平面性能
Dapr sidecar每秒处理1000个请求时使用0.48 vCPU和23Mb内存。 在端到端的调用中,Dapr sidecar(客户端和服务器)在第90百分位延迟中增加约1.40 ms,在第99百分位延迟中增加约2.10 ms。端到端是指从一个应用程序发出请求到另一个应用程序接收响应的全过程。这在此图的步骤1-7中显示。
这种性能与常用的服务网格相当或更好。
延迟
在测试设置中,请求通过Dapr sidecar在客户端(从负载测试工具服务请求)和服务器端(目标应用程序)进行。 在Dapr测试中启用了mTLS和遥测(采样率为0.1的跟踪)和指标,而在基准测试中禁用了这些功能。


2 - actor 性能激活
本文介绍了在 Kubernetes 上 Dapr 中 actor 的服务调用 API 的性能基准和资源使用情况。
系统概述
在 Dapr 中使用 actor 的应用程序需要考虑两个方面。首先,actor 调用的路由由 Dapr 的边车(sidecar)处理。其次,actor 的运行时在应用程序端实现和处理,这依赖于所使用的 SDK。目前,性能测试使用 Java SDK 在应用程序中提供 actor 运行时。
Kubernetes 组件
- 边车(数据平面)
- Placement(actor 所需,控制平面将 actor 类型映射到主机)
- Operator(控制平面)
- 边车注入器(控制平面)
- Sentry(可选,控制平面)
Dapr v1.0 的性能总结
Dapr 边车中的 actor API 负责识别注册了特定 actor 类型的主机,并将请求路由到拥有该 actor ID 的合适主机。主机运行应用程序的一个实例,并使用 Dapr SDK(.Net、Java、Python 或 PHP)通过 HTTP 处理 actor 请求。
本次测试通过 Dapr 的 HTTP API 直接调用 actor。
有关更多信息,请参见 actor 概述。
Kubernetes 性能测试设置
测试在一个由 3 个节点组成的 Kubernetes 集群上进行,使用普通硬件,每个节点配备 4 核 CPU 和 8GB RAM,没有网络加速。 设置包括一个负载测试器(Fortio)pod,其中注入了一个 Dapr 边车,调用服务 API 以访问不同节点上的 pod。
测试参数:
- 每秒 500 个请求
- 1 个副本
- 持续 1 分钟
- 边车限制为 0.5 vCPU
- 启用 mTLS
- 启用边车遥测(采样率为 0.1 的跟踪)
- 空 JSON 对象的负载:
{}
结果
- 实际吞吐量约为 500 qps。
- tp90 延迟约为 3ms。
- tp99 延迟约为 6.2ms。
- Dapr 应用程序消耗约 523m CPU 和约 304.7Mb 内存
- Dapr 边车消耗 2m CPU 和约 18.2Mb 内存
- 无应用程序重启
- 无边车重启
相关链接
- 有关更多信息,请参见 Kubernetes 上的 Dapr 概述