从解决配置、服务发现、分布式锁等方面比较ectd、zookeeper、consul、
etcd | Zookeeper | Consul | newSQL(Cloud Spanner,CockroachDB,TiDB) | |
---|---|---|---|---|
并发原语 | 锁定rpc、选举rpc、命令行锁、命令行选举、go实现 | curator,java实现 | 本地锁定API | 基本没有 |
线性读 | 是 | 否 | 是 | 有时 |
MVCC | 是 | 否 | 否 | 有时 |
事务 | 属性对比、读、写 | 版本锁定、写 | 属性对比、读、写 | sql |
修改通知 | 历史和当前的关键间隔 | 当前的关键字和目录 | 当前关键字和前缀 | 有时使用触发器 |
用户权限 | 基于角色的权限 | 使用ACL | 使用ACL | 每种DB的都不一样 |
Http/JSON API | 有 | 无 | 有 | 比较少的api |
成员重新配置 | 可以 | 3.5以后 | 可以 | 可以 |
可靠数据库大小 | GB级别 | MB级别 | MB级别 | TB级别以及以上 |
最小线性延迟 | 网络RTT | 没有线性读 | RTT+异步 | 时钟隔离 |
etcd是基于复制状态机实现的分布式协调服务。
在读行为上,Zookeeper默认读可能会返回stale data,而etcd使用的线性读,能确保读取到反应集群共识的最新数据。
共识算法上,etcd使用的是raft,zookeeper使用的是Zab。
网友评论