# etcd v2.2.0-rc 基准测试

> etcd 2.2.0-rc 的性能指标

---

LLMS 索引： [llms.txt](/zh/llms.txt)

---

## 物理机 {#physical-machine}

GCE n1-highcpu-2 机器类型

- 1 个专用本地 SSD，挂载于 /var/lib/etcd
- 1 个专用慢速磁盘，用于操作系统
- 1.8 GB 内存
- 2 个 CPU

## etcd 集群 {#etcd-cluster}

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][c7146bd5]，与 [etcd 2.1 基准测试][etcd-2.1-benchmark] 中所用版本相同。

## 测试 {#testing}

引导另一台机器，并使用 [hey HTTP 压力测试工具][hey] 向每个 etcd 成员发送请求。请参阅 [基准测试黑客指南][hack-benchmark] 以获取详细操作说明。

## 性能 {#performance}

### 读取单一键 {#reading-one-single-key}

| 键大小（字节） | 客户端数量 | 目标 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%) |

### 编写一个键 {#writing-one-single-key}

| 键大小（字节） | 客户端数量 | 目标 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%）         |

### 性能变化说明 {#performance-changes-explanation}

- 在大多数场景下，读取 QPS 下降了 5%~8%。原因是 etcd 会为每次存储操作记录存储指标。这些指标对监控和调试至关重要，因此该情况可接受。

- 写入 QPS 到领导者提升了 20%~30%。这是因为我们将 Raft 主循环与条目应用循环解耦，避免了两者相互阻塞。

- 所有服务器的写入 QPS 提升了 30% 至 80%，因为跟随者可更早接收到最新的提交索引，从而更快地提交提案。

[c7146bd5]: https://github.com/etcd-io/etcd/commits/c7146bd5f2c73716091262edc638401bb8229144
[etcd-2.1-benchmark]: /zh/docs/etcd/benchmarks/etcd-2-1-0-alpha-benchmarks/
[hack-benchmark]: https://github.com/etcd-io/etcd/tree/v2.3.8/hack/benchmark
[hey]: https://github.com/rakyll/hey
