kubernetes学习笔记27:etcd性能

理解etcd性能:etcd集群架构图,包含raft层,storage层(storage层包含treeindex层和boltdb底层持久化存储key-value层),它们每一层都可能造成性能损失,raft层需要网络同步数据,网络io节点之间的rtt和带宽都会影响etcd性能,另外wal也会受到磁盘io的写入速度影响。

storage层,磁盘io fdatasync延迟会影响性能,索引层锁的BLOCK也会影响性能,另外boltdb tx锁以及boltdb本事性能也会影响性能,其他方面etcd所在宿主机内核参数和grpc api层的延迟也会影响性能。

怎么优化:硬件上面:用足够的CPU和memory,磁盘使用性能比较好的SSD固态硬盘,网络尽量要快,最后是单独部署,防止宿主机上其他程序的干扰。

软件上面:内存索引层优化(原来的是btree,锁粒度太粗),lease使用规模优化(优化lease过期和失效算法,降低遍历失效list的复杂度),后端boltdb优化(将后端batch size limit/interval进行调整,根据不同的硬件和工作负载进行动态可配置,不是固定值),谷歌工程师优化boltdb tx读写锁性能(完全并发读特效优化),基于segregated hashmap的内部存储freelist分配回收新算法。

客户端优化:put操心避免使用大value,避免创建大量的lease,尽量选择复用,尽量创建不频繁变动的key-value,比如k8s中的元数据信息。

posted @ 2020-04-28 16:53  ppjj  阅读(134)  评论(0编辑  收藏  举报