TL--3--zookeeper--4

羊群效应的优化,监听的是状态。

-------------------------------------------------------------

源码:

zookeeper内部是NIO,内部是netty的。

内存数据是保存到硬盘,重启再加载进来。

用快照文件和日志文件。

会话管理器。定时扫描会话看是不是过期了。

-------------------------------------------------------------------------

初始化对外服务:

NIO的工厂类。循环监听事件节点是什么状态。

两个端口号:一个是数据同步 一个是选举

启动服务:

开启服务对外的netty或者nio服务:

-----------------

netty启动:

看下pipline是如何初始化的。

好熟悉的代码

所有的连接进来的时候都会进入到这个方法的。点进去追踪:

创建连接,相同客户端的连接放在一起。

读取数据channelRead。

我们可以用ls /模拟下。

-----

快照和事务日志的存储:

事务日志是实时保存的,快照是时间点所有的数据。

快照是固定大小的,倍数扩容的。

日志和快照是看启动时候日志id谁大用谁的。

写10万次日志文件就写到快照文件的。再新建日志文件。

快照拿最新的用zxid比较,最大的,然后拿日志的,和快照的zxid比较。

流程:

DataTree:

数据都保存在了concurrenthashmap里面了。

任何数据变更导致zxid的增加。

发布了402 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_28764557/article/details/105118833