Golang_etcd 了解
文章目录
什么是 etcd
etcd 应该和zookeeper 类型
zookeeper
zookeeper watches
用户可以对一个 ZNode 设置 watch,当这个 ZNode 发生了变化时,例如 创建、删除、数据变更、添加或移除子节点,watch API 就会发出通知,这是 zookeeper 非常重要的功能。
zookeeper 的 watch 有一个缺点,就是这个 watch 只能被触发一次,一旦发出了通知,如果还想对这个节点继续 watch,用户需要重新设置 watch。
优点
- 非阻塞全部快照(达成最终一致)
- 高效的内存管理
- 高可靠
- API 简单
- 连接管理可以自动重试
- ZooKeeper recipes 的实现是经过完整良好的测试的。
- 有一套框架使得写新的 ZooKeeper recipes 非常简单。
- 支持监听事件
- 发生网络分区时,各个区都会开始选举 leader,那么节点数少的那个分区将会停止运行。
缺点
- zookeeper 是 java 写的,那么自然就会继承 java 的缺点,例如 GC 暂停。
- 如果开启了快照,数据会写入磁盘,此时 zookeeper 的读写操作会有一个暂时的停顿。
- 对于每个 watch 请求,zookeeper 都会打开一个新的 socket 连接,这样 zookeeper 就需要实时管理很多 socket 连接,比较复杂。
etcd
etcd 是用 go 开发的,出现的时间并不长,不像 zookeeper 那么悠久和有名,但是前景非常好。
etcd 是因为 kubernetes 而被人熟知的,kubernetes 的 kube master 使用 etcd 作为分布式存储获取分布式锁,这为 etcd 的强大做了背书。
etcd 使用 RAFT 算法实现的一致性,比 zookeeper 的 ZAB 算法更简单。
etcd 没有使用 zookeeper 的树形结构,而是提供了一个分布式的 key-value 存储。
zookeeper 是用 java 开发的,被 Apache 很多项目采用。
etcd 是用 go 开发的,主要是被 Kubernetes 采用。
zookeeper 非常稳定,是一个著名的分布式协调系统,etcd 是后起之秀,前景广阔。
因为 etcd 是用 go 写的,现在还没有很好的 java 客户端库,需要通过 http 方式调用。
而 zookeeper 在这方面就成熟很多,对于 java 之外的其他开发语言都有很好的客户端库。
具体选择 zookeeper 还是 etcd,需要根据您的需求结合它们各自的特性进行判断,还有您所使用的开发语言。
文章作者 LYR
上次更新 2021-08-14