羊群效应的优化,监听的是状态。
-------------------------------------------------------------
源码:
zookeeper内部是NIO,内部是netty的。
内存数据是保存到硬盘,重启再加载进来。
用快照文件和日志文件。
会话管理器。定时扫描会话看是不是过期了。
-------------------------------------------------------------------------
初始化对外服务:
NIO的工厂类。循环监听事件节点是什么状态。
两个端口号:一个是数据同步 一个是选举
启动服务:
开启服务对外的netty或者nio服务:
-----------------
netty启动:
看下pipline是如何初始化的。
好熟悉的代码
所有的连接进来的时候都会进入到这个方法的。点进去追踪:
创建连接,相同客户端的连接放在一起。
读取数据channelRead。
我们可以用ls /模拟下。
-----
快照和事务日志的存储:
事务日志是实时保存的,快照是时间点所有的数据。
快照是固定大小的,倍数扩容的。
日志和快照是看启动时候日志id谁大用谁的。
写10万次日志文件就写到快照文件的。再新建日志文件。
快照拿最新的用zxid比较,最大的,然后拿日志的,和快照的zxid比较。
流程:
DataTree:
数据都保存在了concurrenthashmap里面了。
任何数据变更导致zxid的增加。