简单的概念
zk是高性能,高可用的分布式协调框架,
zk并没有完全采用paxos协议,而是采用自定义的zab(原子消息广播协议)协议保证事务的一致性。
zab协议是为分布式协调服务zk专门设计的一种支持奔溃恢复的原子广播协议。
基于这种协议,zk实现了一种主备模式的系统架构来保持集群各个副本之间的数据的一致性
设计的目标
提供了一个高性能、高可用并且具有严格顺序访问的控制能力的分布式协调服务
- 高性能使得zk能够应用于那些对系统吞吐量有明确要求的的大型分布式系统中
- 高可用使得分布式单点问题得到了很好的解决
- 严格的顺序访问控制使得客户端能够基于zk实现一些复杂同步原语言
目标一 简单的数据模型
使得分布式程序能够通过一个共享的、树型结构的名字空间来进行相互协调
这里所说的树型结构的名字空间,是指zk服务器内存中一个数据模型,其由一系列被称为znode的数据节点组成
总体来说,其数据模型类似一个文件系统,而znode之间的层次
目标二 可以构建集群
一个zookeeper集群通常由一组机器组成 一般3-5台机器就可以组成一个zookeeper集群
组成zk集群的每台机器都会在内存中维护当前的服务器的状态。并且每台机器之间相互通信
值得一提的是,只要集群中存在超过一半机器能够正常工作,那么整个集群就能够正常对外服务。
zk的客户端程序会选择和集群中任意一台机器共同来创建一个tcp连接。一旦客户端和某台zk服务器之间的连接断开后,客户端会自动连接到集群中某个机器
目标三 顺序访问
对于来自客户端的每个更新请求,zk都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序,应用程序可以使用zk的这个特性来来实现
目标四 高性能
由于zk将全景数据都存放在内存中,并直接服务于客户端所有的非事务请求,因此尤其适用于读操作为主的应用场景
未完 补充中