Zookeeper知识图谱
2022-04-15 10:42:32 48 举报
AI智能生成
Zookeeper知识图谱是一个用于描述和组织Zookeeper相关知识的图形化工具。它包含了Zookeeper的基本概念、组件、操作、配置和管理等方面的内容,以及它们之间的关系和依赖。通过使用Zookeeper知识图谱,用户可以快速了解和掌握Zookeeper的核心功能和应用,从而更好地进行系统设计和开发。同时,Zookeeper知识图谱也可以帮助用户发现潜在的问题和风险,提高系统的可靠性和稳定性。总之,Zookeeper知识图谱是一个非常有价值的学习和参考资料,对于任何想要深入了解和使用Zookeeper的人来说都是不可或缺的。
作者其他创作
大纲/内容
集群模式部署
一般奇数节点,因为你5台机器可以挂2台,6台也是挂两台,不能超过一半的机器挂掉,所以5台和6台效果一致,那么奇数节点可以减少机器开销,小集群部署,读多写少
内存数据模型,znode,多种节点类型
客户端跟zk进行长连接,tcp,心跳,维持session
ZAB协议,2PC,过半ack+磁盘日志写,commit+写内存数据结构
支持watcher机制,监听回调通知
顺序一致性:消息按顺序同步,但是最终才会一致,不是强一致
高性能,2pc中的过半写机制,纯内存的数据结构,znode
高可用,follower宕机没影响,leader宕机有数据不一致的问题,新选举的leader会自动处理,正常运行,但是在恢复模式期间,可能还有一小段时间时没法写入zk的
高并发,单机leader写,Observer可以线性扩展读QPS
总结
Curator
运用于java分布式业务系统中
分布式锁
元数据管理
监听并作出响应,比如一个有数据,一个broker注册了一个数据,其他broker监听这个数据
分布式协调
HA架构
Master选举
分布式协调系统,封装了分布式架构中所有核心和主流需求和功能,分布式锁,分布式集群的集中式元数据存储,Master选举,分布式协调和通知。
总结:
应用场景
每台机器都在内存中保存了zk的全部数据,机器之间相互通信同步数据,客户端连接任何一台机器都不可以。
集群部署:3-5台机器组成一个集群
树形结构的数据模型:znode,树形结构,数据模型简单,纯内存保存
zxid,保证各种客户端发起的写请求都是有顺序的
顺序一致性:集群中只有一台机器可以写,所有机器都可以读,所有写请求都会分配一个zk集群全局唯一递增编号。
原子性:要么全部机器都成功,要么全部机器都别成功
数据一致性:任何一台zk机器收到了写请求都会同步给其他机器,保证数据的强一致性,你连接到任何一台机器看到的数据都是一致的。
3台机器可以挂掉一个,5台机器可以挂2台
高可用:哪怕集群中挂掉不超过一半的机器,都能保证可用,数据不会丢失
如果你让zk部署在高配置物理机上,一个3台机器的zk集群抗下每秒几万请求没问题
高性能:每台zk机器都在内存维护数据,所以zk集群绝对是高并发高性能的
写:只有一台机器进行写,但是高配置的物理机,比如16C32G,写入几万QPS
读:所有机器都可以读,3台机器的话,起码可以支撑十几万QPS
高并发:高性能决定的,只要基于纯内存数据结构来处理,并发能力是很高的
watcher监听机制
实时性:一旦数据发生变更,其他人要实时感知到
特点
可读写
Leader
可参与选举
只读,写请求转发到Leader
Follower
也不参与zab返回ack那个环节,可能存在数据不一致的问题
不可参与选举
Observer
角色划分
客户端宕机时,在sessionTimeout时间内重新发送心跳会继续维持长连接
定时发送心跳
通过tcp建立长连接,维护session
客户端通信
客户宕机依然存在
持久节点
客户宕机就没了
临时节点
创建节点时递增全局自增的序号
顺序节点
Curator的锁用的就是临时顺序节点
znode
内存数据模型
划分集群角色,主从架构,分为Leader和Follower,只有Leader接受写入请求
Leader接收到写请求,先写入磁盘文件,并向Follower发送事务proposal广播
Follower接收到proposal写入磁盘文件,然后向Leader返回ack
等待Leader发送commit写入znode
ZPC两阶段提交
超过半数的Follower返回ack消息,Leader将数据写入znode,将发送commit消息通知Follower写入
commit之后这个数据就能被读到了
过半写
即Zookeeper原子广播协议
在发起一个事务proposal之前,会生成一个自增的全局zxid,通过这个保证顺序性
Leader会为每个Follower创建一个队列,里面放要发送事务proposal,保证了同步的顺序性
顺序性保证
Zookeeper Atomic Broadcast
ZAB协议
跟Follower进行数据同步
完成后,退出恢复模式,进入消息广播模式
对外提供服务
选举出一个Leader,过半Follower即可成为Leader
恢复模式
启动
消息广播机制+Leader采用2pc模式的过半写机制,给Follower同步
消息写入
Leader/Follower宕机,只要集群宕机的机器不超过一半,就可以重新进行选举Leader,进行数据同步。
崩溃恢复
启动与崩溃恢复
只要写入一条消息,立马无论从那个zk节点都能查到数据,写入操作卡住,直到所有的follower都返回ack,leader执行commit之后,所有从节点都能读到数据
很明显,根据zab协议,zk不是强一致性
强一致性
研究过ZAB协议就能发现,follower半数以上返回ack,然后leader发送commit后就能读到数据了,那么就有一种可能,有的follower接收到commit了,可以读到,有的没有接收到,读不到,不过最后还是能读到。
它比最终一致性好些,因为leader可以保证所有的follower事务proposal都是按照顺序执行的,能保证顺序性
但是全部的follower的数据一致性确实是最终才能实现一致的。
zk官方的定义:顺序一致性
最终一致性
如果要求强一致,可以手动调用zk的sync()操作
强一致性/最终一致性
挑选已经收到zxid最大的那个Follower作为新的Leader
zxid大说明最近跟Leader进行了数据同步
Follower重新选举出Leader
新的Leader发现自己有一条proposal没有commit,其他follower也有这个proposal,并且数量过半,会重新commit给其他Follower进行数据同步,确保数据不会丢失。
Leader自己commit了,还没给其他的follower发送commit消息就挂了
zxid是64位的,高32位存放leader的版本是epoch,低32位主键自增
新的leader的epoch自增
它重新启动后跟Leader进行数据同步时,发现自己有一条没有commit的事务proposal
Leader没有,说明是它自己宕机前的脏数据
直接丢弃掉,从新Leader同步最新的数据
Leader接收到写请求,写入磁盘日志文件了,还没来得及和其他Follower发送事务proposal就挂了
所谓commit就是把这条数据加到内存的znode树上去,然后就对外可见了,也会通知一些监听这个znode的人
ZAB协议下的一种可能存在数据的一致性的问题
集群架构
所以zk适用于写少的场景
无论zookeeper集群多少台机器,只有leader能进行写入操作,单机写入最多每秒上万QPS,这是没办法拓展的
写请求
但是一般不建议加太多的follower,写入的时候会向follower发送proposal,并且等待过半的follower返回ack, follower太多会影响性能,可以多加observer,因为它不参与选举以及proposal的ack返回
读请求
读写性能分析
图解
Zookeeper
0 条评论
回复 删除
下一页