zookeeper概念定义学习 《从PAXOS到Zookeeper》

基本概念

角色

Leader:仅一台,通过选举完成,提供读写服务
Follower:参与Leader选举以及”过半写成功”策略,提供读写服务
Observer:仅提供读服务(我们有吗)

会话 session

zk对外默认端口2181,客户端启动时和zk服务器建立TCP连接,这样客户端的会话也就开始了。
客户端通过心跳检测(???)保持有效的会话,并且接收服务器Watch事件通知。(???ws这样和ss交互)
通过sessionTimeout来设置客户端会话的超时时间。

数据节点 znode

数据模型是一棵树,数据存储在内存中

分为持久节点和临时节点。
持久节点创建了之后要显式才能删除。
临时节点在客户端会话结束之后就被删除。

版本

pass

事件监听器 Watcher

zk允许用户在指定的znode上注册监听器,在特定事件触发时,zk会通知给对应的客户端。(看源码)

ACL

pass

ZAB协议

zk使用一个单一的主进程来接受并处理客户端所有事务请求,用ZAB的原子广播协议将服务器的数据状态变更以事务proposal广播给所有副本进程。

一个广播进程的好处:
1.相对于多进程互相广播通知,节省开销,更适合客户端大并发
2.更容易保证全局变更序列的顺序性

两种基本模式:崩溃恢复和消息广播

消息广播:集群中过半Follower与Leader完成同步,就进入了消息广播模式
恢复模式:服务启动或者Leader网络中断,重启等情况,进入恢复模式选举新Leader

消息广播

消息广播过程是一个原子广播协议(这是什么???),类似于2PC过程

消息广播过程中,leader会为每个事务请求生成对应的proposal来广播,分配全局单调递增的ID,即事务ID(ZXID)
要保证消息的前后顺序,就要保证Proposal按照ZXID先后顺序来处理

zxid通常是一个64位数字
高32位是Leader周期epoch编号,每次选leader时+1
低32位是计数器,每次产生proposal时+1,每次选leader时置为0

消息广播与传统2PC的不同
1.避免了follower中断,leader不用必须等待每个follower的ack
2.leader收到过半follower的ack就可提交事务了

消息广播缺陷
leader挂了或者leader失去了过半的follower,这引出崩溃恢复

崩溃恢复

解决消息广播时,leader挂了或者leader失去了过半的follower的问题

基本特性

1.leader已经commit的proposal必须被所有follower commit

《zookeeper概念定义学习 《从PAXOS到Zookeeper》》 Paste_Image.png

图示为leader在提交C2之后,发给follower之前挂了,那么follower也要commit c2(???follower怎么知道c2的)

这样避免了leader上commit了follower没有commit的数据不一致问题

2.丢弃只在leader上提出的proposal

《zookeeper概念定义学习 《从PAXOS到Zookeeper》》 Paste_Image.png

图示Leader提出P3就挂了,其他服务器都没收到P3,那P3就可以丢掉了(???不丢不行)

如果此时有服务器接收到了P3,那么就不能丢了

处理请求

Follow接收到请求:转给Leader(???看代码)
Leader接收到请求:生成事务proposal发起广播

算法流程

选leader

简而言之就是选取拥有最新zxid的机器成为leader
书中这一块并不清晰,比如准Leader是什么,迭代过程是怎样的

同步

Leader把初始化历史记录给各个follower让其commit

广播

崩溃回复后,各节点同步,可以开始广播

Server的三种状态:

LOOKING:当前Server不知道leader是谁,正在搜寻
LEADING:当前Server即为选举出来的leader
FOLLOWING:leader已经选举出来,当前Server与之同步

思考

zk的一致性特性如何保证的

消息广播以及崩溃恢复

zookeeper生成全局唯一的递增编号是如何实现的

ZXID

Watcher的意义

client端对感兴趣的znode绑定监听器,监听增删改之类的事件

问题

主进程广播是和谁绑定的,leader?
选leader的过程以及崩溃恢复的基本特性这个需要再考究。感觉不全面或者和看到的说法有出入

refer:

<选主流程>http://cailin.iteye.com/blog/2014486/
http://blog.csdn.net/xhh198781/article/details/10949697
《从PAXOS到Zookeeper …》

    原文作者:赤子心_d709
    原文地址: https://www.jianshu.com/p/18083c1f675b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞