为啥这么多公司用ZooKeeper?它到底解决了什么问题?
ZooKeeper 是用来做什么的? 之前没有ZK,为什么会诞生 ZK?
ZooKeeper 是用于简化分布式应用开发的,对开发者屏蔽一些分布式应用开发过程中的底层细节 ZooKeeper 对外暴露简单的 API,用于支持分布式应用开发 ZooKeeper 在提供上述功能的同时,其还是一个 高性能、高可用、高可靠的分布式集群
分布式应用开发,有哪些常见问题?ZK 是如何屏蔽这些底层细节的? ZooKeeper 对外暴露了那些 API?这些 API 如何支持分布式应用开发的?这些 API 还能简化吗?API 的语义性怎么样? ZooKeeper 自身是一个高性能、高可用、高可靠的分布式集群,那有个简单的问题: 高性能是指什么?ZooKeeper 为了达到高性能,做了哪些工作? 高可用同上 高可靠同上
# 为什么有 ZooKeeper
处理复杂 处理逻辑可重用
# ZooKeeper 的特点
ZooKeeper 的 API:从 文件系统 API 得到的启发,提供简单的 API ZooKeeper 运行在专用服务器上,跟业务逻辑分离,保证了高容错性和可扩展性
ZK上存储的数据聚焦为:协作数据(元数据),而不是应用数据,应用数据有自己的存储方案,例如 HDFS 等 ZK 本质上,可以看作一种特殊的 FS
应用数据和元数据,由于使用场景不同,对一致性和持久性的要求有差异, 因此,架构设计、数据治理过程中,应将 2 类数据独立看待、独立存储。
# ZooKeeper 的使命
ZK 目标:简化分布式应用开发中,多进程协作问题。为分布式应用,提供高效、可靠的分布式协调服务(基础服务),例如:
统一的命名服务 分布式锁 进程崩溃检测 Leader 选举 配置管理:配置变更时,及时下发到各个 Client。
协作:多进程需要一同处理某些事情,一些进程采取行动是的其他进程能够正常工作,例如:主从结构,M 向 S 分配任务,S 才会执行,否则 S 就保持空闲状态 竞争:两个进程不能同时工作,一个进程必须等待另个进程执行完毕,例如:主从结构,M 节点失效后,很多 S 都想成为 M,这时,就需要互斥锁,只有第一个获得锁的 S 成为 M
不跨网络协作:多进程,可以在同一台物理主机上,同步原语很方便(比如?管道、共享内存、消息队列、信号量) 跨网络协作:多进程,分布在不同的物理主机上,ZK 关注这一类
消息机制:通过网络,直接信息交换,多消息传递算法,实现同步原语 共享存储:利用外部共享存储,实现多进程协作,要求共享存储提供有序访问,ZK 采用这种方式
消息延迟:由于网络原因,后发送先到达 处理器性能:由于系统调度原因,消息到达后,延迟处理 时钟偏移:不同物理主机,时钟发生偏移
ZK 精心设计用于屏蔽上述 3 个共性问题,使得这些问题在应用服务层面完全透明化。
# ZooKeeper 特性
ZooKeeper 解决的本质问题
消息传递:延迟性,先发送的消息,不一定先到达; 消息传递:丢失性,发送的消息,可能丢失; 节点崩溃:分布式系统内,任何一个节点都可能崩溃;
提案投票:基于投票策略,2PC 选举投票:基于投票策略,投出优先级最高的节点(包含最新数据的节点)
Paxos 目标:解决分布式一致性问题,提高分布式系统容错性的一致性算法。 Paxos 本质:基于消息传递的高度容错的一致性算法
# ZooKeeper 定位
分布式协调服务 高效、可靠 方便应用程序,聚焦业务逻辑开发,而不需要过多关注分布式进程间协作细节
# ZooKeeper 特性
顺序一致性:同一个 Client 发起的事务请求,严格按照发起顺序执行 原子性:事务请求,要么应用到所有节点,要么一个节点都没有应用 单一视图:Client 无论连接到哪个节点,看到的服务端数据都是一致的(Note:不准确,其实是最终一致性) 可靠性:事务一旦执行成功,状态永久保留 实时性:事务一旦执行成功,Client 并不能立即看到最新数据,但 ZooKeeper 保证最终一致性
# ZooKeeper 设计目标
目标一:高性能(简单的数据模型)
采用树形结构组织数据节点; 全量数据节点,都存储在内存中; Follower 和 Observer 直接处理非事务请求;
目标二:高可用(构建集群)
半数以上机器存活,服务就能正常运行 自动进行 Leader 选举
目标三:顺序一致性(事务操作的顺序)
每个事务请求,都会转发给 Leader 处理 每个事务,会分配全局唯一的递增id(zxid,64位:epoch + 自增 id)
目标四:最终一致性
通过提议投票方式,保证事务提交的可靠性 提议投票方式,只能保证 Client 收到事务提交成功后,半数以上节点能够看到最新数据
# ZooKeeper 出现之前
分布式锁管理器 分布式数据库
Master-Slave Leader 选举:要求提供Master节点选举功能 进程响应跟踪 崩溃检测:要求提供进程存活状态的跟踪 分布式锁:互斥排它锁
# 术语介绍
推荐阅读
评论