ETCD 性能优化实践
Sep 25, 2019 22:30 · 356 words · 1 minute read
影响 etcd 性能的因素
- Raft
- 网络 IO 节点之间的 RTT/带宽
- WAL 受到磁盘 IO 写入延迟
- 存储
- 磁盘 IO fdatasync 延迟
- 索引层锁的block
- boltdb Tx 的锁
- boltdb 本身的性能
- 其他
- 内核参数
- grpc api 层延迟
server 性能优化
硬件部署
- 足够的 CPU & Mem
- 性能优秀的 SSD
- 网络带宽优先级
- 独占部署,减少其他程序运行时的干扰
https://etcd.io/docs/v3.4.0/op-guide/hardware/
软件
-
内存索引层
提升 etcd 内存索引层性能,优化内部锁的使用减少等待时间 https://github.com/coreos/etcd/pull/9511
-
lease 规模使用
优化 lease invoke 和过期失效的算法,解决了 lease 规模性的问题 https://github.com/etcd-io/etcd/pull/9418
-
后端 boltdb 使用优化
- 后端 bacth size limit/intervsal,可根据不同的硬件和工作负载配置(以前是固定保守值)
- 完全并发读:优化调用 boltdb tx 读写锁使用,提升读性能 https://github.com/etcd-io/etcd/pull/10523
- 基于 segregated hashmap 的 etcd 内部存储 freelist 分配回收算法 https://www.cncf.io/blog/2019/05/09/performance-optimization-of-etcd-in-web-scale-data-scenario
etcd client 性能优化
- put 时避免大 value,精简再精简(例如 k8s 中 crd 使用)
- 避免创建频繁变化的 kv(例如 k8s 中 node 数据上传)
- 避免创建大量 lease,尽量选择复用(例如 k8s 中 event 数据管理)