分布式系统-5-Zookeeper

上节知识准备:Raft
论文:Zookeeper

前面聊了如何使用一致性算法保证集群的可用性,接下来我们聊聊基于这类算法构建的基础服务案例:Zookeeper。

之前我们聊到复制状态机,相同序列 log 可让机器到达相同结果状态。类似于 Raft 这种一致性算法只是保证了多台机器的可用性,并没有规定 log 的内容,类似于计算机网络分层模型,传输层保证了数据的可好传输,而我们在此之上构建何种应用则属于应用层的事情。

Zookeeper 可以看做提供了一个分布式且保证了操作一致性的文件系统,其设计目标不是像 GFS 一样管理大量大文件,而是以文件系统的目录和文件作为基本数据结构,提供一系列 API,方便用户构建自己的分布式服务。

相对于普通的目录,Zookeeper 提供四种类型:

  1. PERSISTENT:持久化目录节点,这个目录节点存储的数据不会丢失;

  2. PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已经存在的节点数自动加 1,然后返回给客户端已经成功创建的目录节点名;

  3. EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端连接超时,这种节点会被自动删除;

  4. EPHEMERAL_SEQUENTIAL:临时自动编号节点。

这些特性显然是为方便分布式系统开发而设计的,比如 SEQUENTIAL 将 select 和 自增 合二为一个原子操作;EPHEMERAL 则用目录的存在与否代表创建改目录的机器的连接状态。

举个例子,全局锁。

首先在在创建 /Lock/ 创建一个 EPHEMERAL_SEQUENTIAL 类型的目录,会得到新创建的目录序列号 Index,然后在查看 /Lock/ 下面最小的目录序列号是不是 Index,若是则代表获得锁,操作结束后,删除 Index 目录,即可释放锁。若有比 Index 小的目录,则监听这些目录的变化,直到 Index 是做小的目录。

本文旨在为分布式系统知识架构中以 Zookeeper 为例解释复制一致性模型的应用,没有面面俱到,深入了解可参考论文,其详细描述了这个系统的目标,设计思路,实践经验,性能分析。

    原文作者:王谙然
    原文地址: https://www.jianshu.com/p/af1961e5a326
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞