文档版本 v3.7-DRAFT 处于 草稿 状态。如需获取最新的稳定版文档,请参阅 v3.6。
etcd v2.2.0-rc 基准测试
etcd v2.2.0-rc 的性能指标
物理机
GCE n1-highcpu-2 机器类型
- 1x 专用本地 SSD 挂载在 /var/lib/etcd 下
- 1 块专用慢速磁盘用于操作系统
- 1.8 GB 内存
- 2 个 CPU
etcd 集群
3 个 etcd 2.2.0-rc 成员,每个运行在一台单独的机器上。
详细版本:
etcd Version: 2.2.0-alpha.1+git
Git SHA: 59a5a7e
Go Version: go1.4.2
Go OS/Arch: linux/amd64
此外,我们使用 3 个 etcd 2.1.0 alpha 阶段的成员组成集群以获得基准性能。etcd 的提交头是c7146bd5,与我们在etcd 2.1 基准测试中使用的相同。
测试
启动另一台机器并使用 hey HTTP 基准测试工具 向每个 etcd 成员发送请求。请参阅 基准测试黑客指南 获取详细说明。
性能
读取单个键
| 键大小(字节) | 客户端数量 | 目标 etcd 服务器 | 读取 QPS | 90 百分位延迟(毫秒) |
|---|---|---|---|---|
| 64 | 1 | 仅领导者 | 2804 (-5%) | 0.4 (+0%) |
| 64 | 64 | 仅领导者 | 17816 (+0%) | 5.7 (-6%) |
| 64 | 256 | 仅领导者 | 18667 (-6%) | 20.4 (+2%) |
| 256 | 1 | 仅领导者 | 2181 (-15%) | 0.5 (+25%) |
| 256 | 64 | 仅领导者 | 17435 (-7%) | 6.0 (+9%) |
| 256 | 256 | 仅领导者 | 18180 (-8%) | 21.3 (+3%) |
| 64 | 64 | 所有服务器 | 46965 (-4%) | 2.1 (+0%) |
| 64 | 256 | 所有服务器 | 55286 (-6%) | 7.4 (+6%) |
| 256 | 64 | 所有服务器 | 46603 (-6%) | 2.1 (+5%) |
| 256 | 256 | 所有服务器 | 55291 (-6%) | 7.3 (+4%) |
写入单个键
| 键大小(字节) | 客户端数量 | 目标 etcd 服务器 | 写入 QPS | 90 百分位延迟(毫秒) |
|---|---|---|---|---|
| 64 | 1 | 仅领导者 | 76 (+22%) | 19.4 (-15%) |
| 64 | 64 | 仅领导者 | 2461 (+45%) | 31.8 (-32%) |
| 64 | 256 | 仅领导者 | 4275 (+1%) | 69.6 (-10%) |
| 256 | 1 | 仅领导者 | 64 (+20%) | 16.7 (-30%) |
| 256 | 64 | 仅领导者 | 2385 (+30%) | 31.5 (-19%) |
| 256 | 256 | 仅领导者 | 4353 (-3%) | 74.0 (+9%) |
| 64 | 64 | 所有服务器 | 2005 (+81%) | 49.8 (-55%) |
| 64 | 256 | 所有服务器 | 4868 (+35%) | 81.5 (-40%) |
| 256 | 64 | 所有服务器 | 1925 (+72%) | 47.7 (-59%) |
| 256 | 256 | 所有服务器 | 4975 (+36%) | 70.3 (-36%) |
性能变化说明
在大多数情况下,读取 QPS 下降了 5~8%。原因是 etcd 记录了每个存储操作的指标。这些指标对于监控和调试非常重要,因此这是可以接受的。
写入到领导者的 QPS 增加了 20~30%。这是因为我们将 Raft 主循环和条目应用循环解耦,从而避免了它们互相阻塞。
写入到所有服务器的 QPS 增加了 30~80%,因为跟随者可以更早地接收到最新的提交索引,并更快地提交提案。