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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fei33423/article/details/53013333

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





展开阅读全文

没有更多推荐了,返回首页