分布式系统的基石之 ZooKeeper

由于 ZooKeeper 集群的实现采用了一致性算法,所以它成为一个非常可靠的、强一致性的、没有单点故障的分布式数据存储系统。但它的目标不是提供简单的数据存储功能,而是成为分布式集群中不可或缺的基础设施。

1.ZooKeeper 的原理与功能

前面我们提到,绝大多数分布式系统都采用了中心化的设计理念,一些新的分布式系统的设计表面上看似乎是无中心的,但实际上隐含了中心化的内核,在这类架构中往往有如下普适性的共性需求。

(1)提供集群的集中化的配置管理功能。该看起来简单,但实际上也有复杂之处,比如不重启程序而让新的配置参数即时生效,这在分布式集群下就没那么简单了,如果我们认真思考或者开发过配置中心,那么应该对这个需求的实现难度有深刻的理解。

(2)需要提供简单可靠的集群节点动态发现机制。该需求是构建一个具备动态扩展能力的分布式集群的重要基础,通过实现一个便于使用的集群节点动态发现的服务,我们可以很容易开发先进的分布式集群:在一个节点上线后能准确得到集群中其他节点的信息并进行通信,而在某个节点宕机后,其他节点也能立即得到通知,从而实现复杂的故障恢复功能。这个需求的实现难度更大,因为涉及多节点的网络通信与心跳检测等复杂编程问题。

(3)需要实现简单可靠的节点 Leader 选举机制。该需求用来解决中心化架构集群中领导选举的问题。

(4)需要提供分布式锁。该需求对于很多分布式系统来说也是必不可少的,为了不破坏集群中的共享数据,程序必须先获得数据锁,才能进行后面的更新操作。

ZooKeeper 通过巧妙设计一个简单的目录树结构的数据模型和一些基础 API 接口,实现了上述看似毫无关联的需求,而且能满足很多场景和需求,比如简单的实时消息队列。如下所示是 ZooKeeper 基于目录树的数据结构模型示意图。

img

ZooKeeper 的数据结构可以被认为是模仿 UNIX 文件系统而设计的,其整体可以被看作一棵目录树,其中的每个节点都可作为一个 ZNode,每个 ZNode 都可以通过其路径(Path)唯一标识,比如上图中第 3 层的第 1 个 ZNode,它的路径是/app1/p_1。每个 ZNode 都可以绑定一个二进制存储数据(Data)来存储少量数据,默认最大为 1MB。我们通常不建议在 ZNode 上存储大量的数据,这是因为存在数据多份复制的问题,当数据量比较大时,数据操作的性能降低,带宽压力也比较大。

ZooKeeper 中的 ZNod

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值