ZooKeeper介绍

 

What is ZooKeeper?

ZooKeeper是什么?

ZooKeeper is a distributed, open-source coordination service for
distributed applications.

ZooKeeper提供一个简单的原语集合,以便于分布式应用可以在它之上构建更高层次的同步服务。ZooKeeper的设计非常易于编程,它使用的是类似于文件系统那样的树形数据结构。

想正确的实现一个协作服务是出了名的难,最常见的错误就是竞争条件和死锁。ZooKeeper的动机就是解放开发分布式应用的程序员,让他们避免从零开始实现协作服务。

Design Goal

ZooKeeper is simple.

ZooKeeper维护着一个hierarchal的名字空间,这个名字空间的组织形式很想标准文件系统。分布式的进程可以通过操作这个共享的名字空间来协作。ZooKeeper的名字空间由称作znodes的data register组成,znodes和文件,路径很像。但是不同于典型的文件系统,ZooKeeper的数据都存放在内存中,这意味着ZooKeeper的吞吐量会很高,同时latency会比较低。

ZooKeeper的实现更重视high performance, highly available, strictly ordered access. 也就是说ZooKeeper要能够用于大型的分布式系统,同时要避免出现单点故障,还能够通过自身的有序性以便让client实现复杂的同步原语。

ZooKeeper is replicated.

分布式的系统不可避免的都会有备份。

ZooKeeper Service

 

组成ZooKeeper service的所有server都必须知道其他server的存在。这些server在内存中维护着一个状态的镜像,还有持久存储的transaction logs和快照(在硬盘上)。只要集群中多数server可访问,那么ZooKeeper服务就可用。

Clients会连接到某一个ZooKeeper server上。client维护一个TCP连接,通过TCP连接, client发送请求,得到response,watch event,还有发送心跳。如果连接到某个server的TCP连接断了,client将会连接到另一个server上。

ZooKeeper is ordered.

ZooKeeper给每个update操作都附上了stamp,通过stamp来反映所有transaction的顺序。

ZooKeeper is fast.

ZooKeeper很快,尤其是在读操作占主导地位的服务中。ZooKeeper应用可以跑在上千台机器上,当读写操作的比例为10:1时,性能达到最佳。

Data model and the hierarchical namespace

ZooKeeper提供的名字空间非常像一个标准文件系统。name的形式和Unix的路径一样,由slash隔开。ZooKeeper的名字空间中的每个node都有一个path指定。

ZooKeeper’s Hierarchical Namespace

Nodes and ephemeral nodes

ZooKeeper namespace的一个特点是:每个znode都可以存放数据或者连接child,就好像一个文件系统的文件同时可以是路径一样。(ZooKeeper被设计为用来存储coordination data:包括status imformation,configuration,location information等等,所以每个znode存放的数据通常是很小的,数量级在KB范畴)

Znode维护着一个stat结构,包括data changes,ACL changes的version number,还有timestamp。这样可以检查cache的有效性以及coordinated updates。每当一个znode的data改变了,version number就会增加。例如,只要一个client取了data,那么它同时也会受到这个data的version。

对每个znode中存储的data的读写操作都是原子的。读操作会拿到这个znode所关联的所有data bytes。而写操作会覆盖掉所有的data。每个node都有一个Access Control List来限制谁能做什么操作。

ZooKeeper还有临时node(ephemeral node)的概念。这种ephemeral znode只存在于创建该znode的session中。session结束了,这个znode也就被删除了。

Conditional updates and watches

ZooKeeper支持watches。Clients可以在某个znode上设置一个watch。这个znode发生的任何变化都会触发这个watch,随后watch被删除。当watch被触发时,client会受到一个packet说该znode已经被修改了。如果client和ZooKeeper server的连接断了,那么client会受到一个local notification。

Guarantees

ZooKeeper非常快,用起来也很简单。由于它的目标是作为更复杂的服务的基础架构,所以它提供了一系列的guarantee,包括:

  • Sequential Consistency – 从同一个client来的updates动作会按照这些updates发送时的顺序执行。
  • Atomicity – Updates要么成功,要么失败。不会有部分成功的结果。
  • Single System Image – 无论client连接到了哪个server,只会看到相同的view。
  • Reliability – 只要一个update成功执行了,那么在一个client覆盖此次update之前,该update的结果一直有效。
  • Timeliness – 保证clients在一个确定的时限内能够观察到最新的系统数据。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值