文章目录
-
- 2 ZooKeeper:因为协调分布式系统是一个动物园
-
- 2.1 ZooKeeper Overview:为客户端开发人员、管理员和贡献者提供的技术概述文档。
-
- 2.1.1 Overview:ZooKeeper 的鸟瞰图,包括设计理念和建筑。
-
- 2.1.1.1 设计目标(Design Goals)
- 2.1.1.2 数据模型和层次命名空间(Data model and the hierarchical namespace)
- 2.1.1.3 节点和临时节点(Nodes and ephemeral nodes)
- 2.1.1.4 更新条件和观察(Conditional updates and watches)
- 2.1.1.5 担保(Guarantees)
- 2.1.1.6 Simple API
- 2.1.1.7 实现(Implementation)
- 2.1.1.8 应用(Uses)
- 2.1.1.9 性能(Performance)
- 2.1.1.10 可靠性(Reliability)
- 2.1.1.11 ZooKeeper项目(The ZooKeeper Project)
2 ZooKeeper:因为协调分布式系统是一个动物园
ZooKeeper是一种针对分布式应用程序的高性能协调服务。它在一个简单的接口中公开了常见的服务——例如命名、配置管理、同步和组服务——因此您不必从头开始编写它们。您可以使用它来实现共识、组管理、领导人选举和到场协议。你可以在此基础上为你自己的特定需求而建。
2.1 ZooKeeper Overview:为客户端开发人员、管理员和贡献者提供的技术概述文档。
2.1.1 Overview:ZooKeeper 的鸟瞰图,包括设计理念和建筑。
ZooKeeper
是一个开源的分布式应用程序协调服务。它公开了一组简单的原语,分布式应用程序可以在这些原语的基础上实现更高级别的服务,用于同步、配置维护、组和命名。它被设计为易于编程,并使用了一个数据模型,其风格类似于文件系统的目录树结构。它运行在Java中,并具有Java和C的绑定
。
众所周知,协调服务很难做好。它们特别容易出现竞争条件和死锁等错误。ZooKeeper
背后的动机是减轻分布式应用程序从零开始实现协调服务的责任。
2.1.1.1 设计目标(Design Goals)
ZooKeeper is simple. ZooKeeper允许分布式进程通过与标准文件系统组织类似的共享层次命名空间相互协调。名称空间由数据寄存器(用ZooKeeper
的话说,称为znodes
)组成,这些寄存器类似于文件和目录。与设计用于存储的典型文件系统不同,ZooKeeper
数据保存在内存中,这意味着ZooKeeper
可以实现高吞吐量和低延迟数。
ZooKeeper实现非常重视高性能、高可用性和严格有序的访问。ZooKeeper
的性能方面意味着它可以用于大型分布式系统。可靠性方面使其不会成为单点故障。严格的顺序意味着可以在客户机上实现复杂的同步原语。
ZooKeeper is replicated. 和它所协调的分布式进程一样,ZooKeeper
本身也打算在一组称为合集的主机上进行复制。
组成ZooKeeper
服务的服务器必须相互了解。它们在持久存储中维护状态的内存映像以及事务日志和快照。只要大多数服务器可用,ZooKeeper
服务就可用。
客户机连接到单个ZooKeeper服务器。客户机维护一个TCP
连接,通过它发送请求、获取响应、获取监视事件和发送心跳。如果到服务器的TCP
连接中断,客户机将连接到另一台服务器。
ZooKeeper is ordered. ZooKeeper给每个更新贴上一个数字,这个数字反映了所有ZooKeeper事务的顺序。后续操作可以使