初步了解ZooKeeper
ZooKeeper的学习,包括了产品级别的学习,和源码级别的学习。产品级别的学习,主要就是通过一些文章,了解ZooKeeper是什么东西,可以提供什么服务,提供什么样的语义保证,我们怎么用好这些服务,怎么选主等等。这部分的资料基本上都整理到了内网的confluence上,我简单罗列一下:
- ZooKeeper基础介绍:介绍什么是ZooKeeper,怎么用的。
- ZooKeeper部署、运维:介绍部署、配置的基本操作
- ZooKeeper ZAB协议介绍:介绍ZAB协议的基本流程,这个协议是ZooKeeper的核心协议。
- oJmgs选主、ZooKeeper Session介绍
- ZooKeeper的sync操作是什么:sync是一个有严重误导性的操作,一开始我们所有的用sync的代码全是错的,值得单独关注一下。
- ZooKeeper FAQ:最常见的ZooKeeper问题的定位方法。
源代码学习
要定位一些复杂的ZooKeeper问题,甚至是ZooKeeper的bug,那么就必须要对源代码有所了解。虽然不需要看明白所有源代码,但大体的流程需要了解。
ZooKeeper的源代码学习,个人觉得,重点包括了以下几个方面:
- ZooKeeper的初始化:初始化的大体流程是什么?事务日志、快照是怎么读进来的?做好哪些准备工作之后可以发起选主?
- ZooKeeper的选主是什么样的流程?怎么开始的,怎么样算结束?会维护几个投票箱,为什么?Zookeeper的选主完成后,马上可以开始提供数据读写服务了吗?日志对齐是怎么做的呢?
- ZooKeeper的消息通信:ZooKeeper有几套消息通道?分别用来干什么的?每套通信通道的生命周期是什么样的?连接是怎么建立的?遇到网络错误是怎么处理的?同时结合配置文件里的synclimit等参数,说明这些参数怎么影响通信的。
- ZooKeeper读写处理:读写请求是怎么处理的?读写请求的责任链模式是怎么实现的?每个处理器要完成什么样的工作?如果写请求没有完成,读请求可以继续吗?如果不可以,那么是在哪个环节控制这个顺序的呢?
- ZooKeeper的退出:什么情况下ZooKeeper服务会退出。
- Session是怎么维护的,怎么更新的?Session的超时是怎么处理的?
以上的源代码学习方面,每项一周,大概是7周的时间,也就是不到2个月。期望可以有3次以上的分享,内容可以自己定义,分享时间控制在30分钟以上,1小时以下,不可以和Confluence上已有的重复。
剩下的,就是不断的在问题中提高自己对ZooKeeper源代码的熟悉程度了。
网友评论