zookeeper源码分析

Zookeeper vs Etcd

2019-12-13  本文已影响0人  HelloWide

Zookeeper 和 Etcd 都是非常优秀的分布式协调系统,zookeeper 起源于 Hadoop 生态系统,etcd 的流行是因为它是 kubernetes 的后台支撑。

本文将会说明 zookeeper 和 etcd 的优缺点,以便于您根据实际需求选择更合适的分布式协调系统。

1.Zookeeper

image

概述

zookeeper 起源于 Hadoop,后来进化为 Apache 的顶级项目。现在已经被广泛使用在 Apache 的项目中,例如 Hadoop,kafka,solr 等等。


Zookeeper Architecture

zookeeper 使用 ZAB 协议作为其一致性协议。zookeeper 通过团队的形式工作,一组 node 一起工作,来提供分布式能力,这组 node 的数量需要是奇数。

第一个节点与其他节点沟通,选举出一个 leader,获取多数票数的成为 leader,这就是为什么需要奇数个 node,其他节点被称为follower。

client 连接 zookeeper 时可以连接任何一个,client 的读请求可以被任何一个节点处理,写请求只能被 leader 处理。所以,添加新节点可以提高读的速度,但不会提高写的速度。

对于 CAP 模型,zookeeper 保障的是 CP。

ZNode

ZNode Structure

存储数据时,zookeeper 使用树形结构,其中的每个节点称作 ZNode,访问一个 ZNode 时,需要提供从 root 开始的绝对路径。
每个 ZNode 可以存储最多 1MB 的数据,用户可以:

zookeeper watches

用户可以对一个 ZNode 设置 watch,当这个 ZNode 发生了变化时,例如 创建、删除、数据变更、添加或移除子节点,watch API 就会发出通知,这是 zookeeper 非常重要的功能。

zookeeper 的 watch 有一个缺点,就是这个 watch 只能被触发一次,一旦发出了通知,如果还想对这个节点继续 watch,用户需要重新设置 watch。

优点

缺点

2. etcd

image

概述

etcd 是用 go 开发的,出现的时间并不长,不像 zookeeper 那么悠久和有名,但是前景非常好。
etcd 是因为 kubernetes 而被人熟知的,kubernetes 的 kube master 使用 etcd 作为分布式存储获取分布式锁,这为 etcd 的强大做了背书。

image

etcd 使用 RAFT 算法实现的一致性,比 zookeeper 的 ZAB 算法更简单。
etcd 没有使用 zookeeper 的树形结构,而是提供了一个分布式的 key-value 存储。

API

etcd3 提供了如下操作接口:

优点

image

缺点

总结

  1. zookeeper 是用 java 开发的,被 Apache 很多项目采用。
  2. etcd 是用 go 开发的,主要是被 Kubernetes 采用。
  3. zookeeper 非常稳定,是一个著名的分布式协调系统,etcd 是后起之秀,前景广阔。
  4. 因为 etcd 是用 go 写的,现在还没有很好的 java 客户端库,需要通过 http 方式调用。而zookeeper 在这方面就成熟很多,对于 java 之外的其他开发语言都有很好的客户端库。
  5. 具体选择 zookeeper 还是 etcd,需要根据您的需求结合它们各自的特性进行判断,还有您所使用的开发语言。

翻译整理自:
https://medium.com/@Imesha94/apache-curator-vs-etcd3-9c1362600b26
引用自:

image
上一篇下一篇

猜你喜欢

热点阅读