阅读 107

Kubernetes专栏—etcd详细介绍

分布式,可靠的,kv分布式系统

Raft算法

  • 从多个节点选出leader,leader负责数据的同步和分发。

quorum=(n+1)/2

  • 3个节点容忍1个故障
  • 5个节点容忍2个故障

API

  • PUT(key,value)/Delete(key)
  • Get(key)/Get(keyFrom,keyEnd) key的范围
  • Watch(key/keyPrefix)
  • Transactions(if/then/else ops).commit() 满足条件,执行操纵
  • Leases:Grant/Revoke/KeepAlive

etcd的数据版本号机制

  • term:全局单调递增 (整个集群leader的任期,leader进行切换,term加1)
  • revision: 全局单调递增 (代表的kv修改一次,revision加1)
  • KeyValue:
    • create_revision:创建的次数
    • mod_revision:修改的次数
    • version:此次key修改的次数

一个数据有多个版本,通过定期Compaction来清理历史数据

lease(租约)

性能优化

Ratf层

  • 网络IO
  • 节点之间的RTT/带宽
  • 磁盘IO 写入延迟

Storage

  • 磁盘IO fdatasync延迟
  • 索引层所的block
  • boltdb Tx的锁
  • boltdb本身的性能

其他

  • 内核参数
  • grpc api层的延迟

服务端性能优化 -硬件

  • 升级CPU/memory
  • 选取优秀的ssd
  • 网络带宽优先级
  • 独占部署

服务端性能优化 - 软件

  • 没存索引层:提升etcd内存索引性能,优化内部锁的使用减少等待时间
  • lsase规模使用:优化lease revoke过期失效的算法,解决了lease规模性的问题
  • 后端boltdb使用优化:端酒batch size limit /interval,根据不同的硬件和工作负载配置(以前是固守保守值)
  • 完全并发读,优化调用boltdb tx读写锁使用,提升读性能
  • 基于segregated hashmap的etcd内部存储freelist分配回收算法

客户端性能优化

  • put 避免大value,精简再精简
  • 避免创建频繁变化的key/value
  • 避免创建按大量lease,尽量选择复用