Zookeeper应用
dubbo中zk的应用123456789在zk中创建的节点路径dubbo com.alibaba.demo.DemoService [服务名,service] configurators consumers [类型,type,生产者消费者] ... providers ... [url] routers 其中接口(service)下会有四个子节点providers, consumers, routers, configurators 其中dubbo、接口、providers都是持久化节点,只有url是临时节点。当会话消失(服务器断开与zookeeper的连接),对应的临时节点会被删除。 dubbo-registry-zookeeper模块中, ZookeeperRegistry 类继承自 FailbackRegistry.构造方法中通过...
Zookeeper Processor
processors PrepRequestProcessor通常是请求处理链的第一个处理器.识别客户端请求是否是事务请求.对于事务请求,做预处理,诸如 创建请求事务头,事务体,会话检查,ACL检查 和 版本检查 等. ProposalRequestProcessorleader 服务器的事务投票处理器,也是 leader 服务器事务处理流程的发起者.对于 非事务请求,它会直接将请求流转到 CommitProcessor 处理器,不再做其他处理.对于 事务请求,除了将请求交给CommitProcessor处理器外,还会根据请求类型创建对应的 Proposal 提议,并 发给所有 Follower 来发起一次集群内的事务投票.它还会将事务请求交给 SyncRequestProcessor 进行事务日志的记录. SyncRequestProcessor事务日志记录处理器,将事务请求记录到事务日志文件中,同时还会触发zk进行数据快照.发送Sync请求的处理器.将请求记录到磁盘.它批量处理有效执行io的请求.在将日志同步到磁盘之前,请求不会传递到下一个...
Zookeeper选举流程
leader选举相关线程QuorumCnxManager : 管理者,包含发送 和 接收 队列.持有 listener. QuorumCnxManager.Listener : 监听 并 建立 server 之间的连接. FastLeaderElection.Messenger.SendWorker消息生产者.循环 从发送队列 queueSendMap 中取消息(出队)并发送出去.并将该消息存入 lastMessageSent 中. FastLeaderElection.Messenger.RecvWorker消息消费者.循环 接收线程从底层 Socket 收到报文后放到 recvQueue 队列中,等待 Messenger 调用 pollRecvQueue 方法获取消息. leader选举流程启动时选举选举算法的创建之前先创建 QuorumCnxManager,它通过 TCP 协议来进行 leader...
Zookeeper启动流程
zk启动流程 启动类为 QuorumPeerMain 解析 zoo.cfg 配置 创建并启动 DatadirCleanupManager 用于清理过期 snapshot 和 txnlog. 创建 QuorumPeer 实例并启动该线程,用于完成选举. 根据 snapshot 和 txnlog 恢复 内存数据库 ZKDatabase. 12345678910111213141516171819202122232425262728293031323334353637383940- QuorumPeerMain.main()- 1.创建QuorumPeerMain对象- 2.初始化 运行 main.initializeAndRun(args) - 0.创建QuorumPeerConfig对象 - 1.通过QuorumPeerConfig.parse(),解析配置文件 - 读取zoo.cfg配置到Properties中 - parseProperties()解析Properties配置到QuorumPeerConfig对象中 -...
Zookeeper环境搭建
zk idea 代码阅读环境搭建采用最新的 zookeeper release 版本 3.4.13zk发行版下载地址 从 github 上 clone 该版本的代码. 1. ant 构建 zkbuild.xml 搜索 ant-eclipse-1.0.bin.tar.bz2, 1290行修改 12<get src="http://ufpr.dl.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2"dest="${src.dir}/java/ant-eclipse-1.0.bin.tar.bz2" usetimestamp="false" /> 执行 ant eclipse 2. idea 导入这个 eclipse 项目即可File -> New -> import project from exist source -> 选eclipse 将...
Zookeeper数据同步流程
zk选举完后数据同步流程Leader为每个Follower/observer都建立一个TCP长连接. LearnerHandler,即learner服务器的管理者,负责follower/observer服务器和leader服务器之间的一系列网络通信.包括数据同步,请求转发和Proposal提议的投票等. leader.lead();->leader 从磁盘中恢复数据和session列表Leader zk.loadData();->Leader 启动监听线程 LearnerCnxAcceptor, 等待新的followers的连接请求->follower 连接leaderFollower follower.followLeader();->LearnerCnxAcceptor 监听到follower的socket请求,为每个 follower 创建单独的 LearnerHandler 线程用于交互.->follower 发送 FOLLOWERINFO 包 给leader,包括新的zxid和 sidFollower...
Java 线程池实现原理
Java 线程池实现原理提交任务流程提交任务 submit() 流程。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748491.newTaskFor() 将任务包装成 FutureTask2.execute(task)交给executor执行任务 执行任务 1.若当前线程数少于核心线程数,则直接创建并添加一个 worker 来执行任务. 创建成功直接返回,否则往下走 addWorker()方法 创建一个新的线程,并把当前任务 command 作为这个线程的第一个任务 addWorker() 一.循环CAS操作,将线程池中的线程数+1 0.外层循环 1.获取当前线程状态 2.若当线程池处于 SHUTDOWN 的时候,不允许提交任务,但是已有的任务继续执行.返回false ...