看zookeeper源代码庖丁解牛[还是写的很乱,自己看都看不懂了.]

50 篇文章 0 订阅
12 篇文章 0 订阅

1.学习了解zookeeper (大概会使用,了解基本概念,使用的外部流程)

2.了解内部机理(zookeeper 有介绍内部机理. 内部交互流程. 除了普通guide和develop 外)

3. 学会安装并允许zk (我也直接忽略了)

4. 找到入口类(通过安装文件,我是别人直接告诉的)

5. 一开始直接看了,看到后面有点累了.陷到点里面去了.(源码研究文章其实有很多,但此次目的是为了自己看懂.就没有去搜索对应的文章)

6.果断扭转方向.尝试ide中编写.(zookeeper eclipse 环境搭建之路 (idea)

     另外一个同事采用的是手动部署两台,然后远程debug的模式.. 手脚要快,不然启动流程一下就过去了.(可以通过配置 debug参数 suspend=true来实现 )

7.执行入口类的单测. 执行业务流单测 (没有网络交互)

别人的文章图解 fastLeader http://www.open-open.com/lib/view/open1413796647528.html . 要学会画无职责的流程图(含循环+ 节点批注)

 

类似图比较好. 但是这个图还是没有画出 存储结构,数据流中转等.

所有的设计都是 流程+边界+实体(同一个实体不同时期有不同的角色,对zk机器而已,不同的流程分别是 QuorumPeer,leader,learner.  ).

  这些实体的抽象命名是很关键的.

写源代码解析还是要

    先说业务逻辑:交互图,时序图(边界). 流程图(内部逻辑) ,

    再到实现层面的类图,实体图(依赖关系,属性归属,互相依赖是最差的实现,也是最方便的实现, 见 Leader 和 内部类 learnLeader的关系.).

相应的图表文件等上传到gitHub上去.当做代码管理和云存储.分享给大家.

 

边界:

    0. 选举时通信边界:

    1.选举后的通信边界类

流程:

     选举之后的数据同步. Observer.processPacket 处理来自leader的消息.

     zk集群接收客户端请求后zookeeper 读写过程 .ZooKeeperServer.processPacket(ServerCnxn, ByteBuffer) 处理来自客户端的消息 进一步调用ZooKeeperServer.submitRequest(Request) .后续调用process 通过组合来实现各个角色的功能. 流程是类似的.抽象出通用的东西出来并且利用设计模式,不仅仅是简单的组合调用了.

   leader的learnHader也会调用ZooKeeperServer.submitRequest(Request)

     故leader的请求一种来自外部,一种来自内部的转发.

 

 

 

 

 

 

 

 

实体:

 

 

层次关系, 内存型中间件的也可以有实体. 把实体抽象出来,逻辑抽象出来. 其他就都是内部的BO了.

一个程序的包没有体现出这些,自己就应该去抽象出这些实体类.持久化的实体类.

socket这种都是框架属性,完全可以归属到在业务外的包中.

 

T

 

 

 

 

 

3.内部类:

   1.配置类: 含

   2.原子文件操作 ,不错的思路.AtomicFileOutputStream

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值