前言
这篇文章从分布式协调服务开源框架ZooKeeper入手,探索它的性质、技术原理。
Zookeeper
简介
Zookeeper是一个分布式协调服务的开源框架,本质上是一个分布式的小文件存储系统,主要用于解决分布式集群中应用系统的一致性问题。
特性
Zookeeper具有如下特性:
- 全局数据一致性
- 顺序性(更好地保证了全局数据一致性)
顺序性主要体现在了两个方面:
- 对全局而言,一台服务器上的消息的先后发布顺序同时也是该消息在其他服务器上的顺序(全局有序)
- 对某台服务器而言,先发布的消息必然排在前面(偏序)
- 可靠性
- 原子性(指数据更新的操作要么成功要么失败,何谓成功?半数以上即为成功)
- 实时性(此处指的是一个时间间隔范围内)
数据模型
Zookeeper使用了数据树这种数据结构作为目录结构来管理数据。它的基本结构如下:
mindmap
Root
A
A1
A2
A3
B
- Zookeeper的结点简称Znode,其分为如下两类:
- regular(相当于是永久型,需要手动删除)
- ephemeral(相当于临时结点,可被系统自动gc)
- 如上图所示的A结点被指定了sequential属性,其子节点会被按生成顺序添加单调递增的编号
工作机制
心跳检测与服务保持
每个客户端连接到Zookeeper后,都会保持一个长连接,有session及其过期时间。如果超时,即一直没有收到“心跳”,服务端就会断开连接,并删除session及所有相关的临时Znode和观察器。
体系结构
Zookeeper有如下特点:
- 采用主从集群与首要备份模式
- 读请求可由任意一台服务器处理,吞吐量高
- 写请求只由首要进程上的请求处理器处理
- 三大逻辑组件:请求处理器、原子广播、多副本数据库
- ZAB算法(为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议,借鉴了Paxos算法)
参考书籍
- 基于鲲鹏的大数据挖掘算法实战
- 维基百科——ZAB算法