zookeeper - leader/follower/observer启动介绍(8)

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
简介: 概述    之所以会有这篇文章,是因为我原本想理清楚集群模式下client连接follower的场景下发起写操作,如何被路由到leader以及leader如何通过两阶段提交最终持久化数据 ,但是在这个过程中我发现需要一些前置过程需要理一理,否则理解那个复杂的过程会特别饶,基于将复杂逻辑进行拆分的原则,就有这篇文章。

概述

    之所以会有这篇文章,是因为我原本想理清楚集群模式下client连接follower的场景下发起写操作,如何被路由到leader以及leader如何通过两阶段提交最终持久化数据 ,但是在这个过程中我发现需要一些前置过程需要理一理,否则理解那个复杂的过程会特别饶,基于将复杂逻辑进行拆分的原则,就有这篇文章。


server启动过程

    启动过程分析

    zookeeper集群当中所有的节点都会默认启动accept线程,负责接收client的连接,划重点啊,是所有的节点都会创建client的accept线程。

    整个启动过程如下图所示,基本上就是分为三步走,

    1、通过ServerCnxnFactory创建NIOServerCnxnFactory并进行基本的配置(配置其实就是创建acceptor线程和selector线程);

    2、创建QuorumPeer对象并将NIOServerCnxnFactory注入;

    3、启动QuorumPeer对象并将NIOServerCnxnFactory进行启动,然后acceptor线程就位了,selector线程就位了。整个服务就启动了。

img_47c66d06934b7f0adfeb925f987707fa.png
QuorumPeer启动过程


启动过程源码

img_af0fc1beac4910df61131f7b773a8078.png
整体流程

说明:

    整体流程包括创建工厂、创建quorumPeer对象,注入工厂并启动quorumPeer对象。


img_576f6b7b4f20f6809e82905b8f2b96f3.png
创建工厂

说明:

    创建工厂的过程,其实我们可以看出来这里其实是创建的NIOServerCnxnFactory对象。


img_6ff124f4d281b69dfc8a5d6c792afec3.png
设置工厂参数中初始变量

说明:

    初始化NIOServerCnxnFactory对象,里面主要创建了acceptor的socket对象、线程;创建了selector对象的线程数。


img_785bf55283e7afb2dd9ea4af6f7ca28e.png
启动过程

说明:

    启动了NIOServerCnxnFactory对象。


img_5dd33a841dd1684daf1ca975525c5a03.png
实际执行启动的过程

说明:

    真正是启动了acceptThread和selectorThreads。


leader启动过程

启动过程分析

    在leader启动过程中,核心点在于启动quorumPeer通信的socket的accept线程,然后通过accept线程去accept其他learner等连接,针对每个learner的连接我们都启动一个LearnerHandler线程进行处理。


img_3937994c2a93874c089589d4838fdb37.png
Leader时序图


启动过程源码

img_fa763f9b120902c90595d7960f0aaaaa.png
leader-1

说明:

    通过makeLeader创建leader,通过leader.lead()方法启动服务。



img_92db022bb2ebd16f6ed4c786e5dcd7ed.png
leader-2

说明:

    绑定quorumPeer之间通信的socket。


img_1928e26062912d4a3e2c202848305616.png
leader-3

说明:

    启动LearnerCnxAcceptor线程,负责接收learner的连接且为每个连接启动一个线程。


img_92e2f8e4397348631b754b6a3a80ed1e.png
leader-4


follower/observer启动过程

启动过程分析

    follower和observer的启动过程其实就是一个创建follower对象并向leader发起连接的过程。

img_67edfdfc83c37477a1b9a4f6cf534e15.png
follower时序图


启动过程源码

img_dadb51b5fbce1a5b41ff3bd322f4f881.png
follower-1

说明:

    创建follower。


img_fbb691821d9d8376ec81e363a7c25cce.png
follower-2

说明:

    连接leader,并不停的读取和处理报文。


 server-accept过程

启动过程分析

    server的accept过程由AcceptThread线程负责接收新的socket,然后从selectorThreads当中选取一个selector对象(轮询选择selector)进行注册。

    注册后由selectorThread会通过selector处理注册到这个线程的socket,并进行后续的读写操作。

    AcceptThread继续处理新的连接到来,并注册到selectorThread当中。

img_cdc64425b93393ff829084a75bc103b3.png
AcceptThread处理连接过程


启动过程源码

img_7c0f6409c0454a7a581c1b495aa4a044.png
accept-1

说明:

    循环执行过程中获取accept的socket。


img_5a6a7f75296bb2479402e187b6ab2c51.png
accept-2

说明:

    执行doAccept过程,内部负责accept新的socket。


img_03750ce23eba0fcb6cb0e04627e14f7e.png
accept-3

说明:

    针对accept的socket选择一个selectorThread进行注册。


img_8b1fad4bcbe82379f9467a7afd07ee4d.png
accept-4

说明:

    每次先执行待读取的数据,然后注册新accept的socket。


img_ac37578f552af7c86c1a34c6449b94cc.png
accept-5

说明:

    核心的关键点在于注册到selectorThread的selector当中。

目录
相关文章
|
存储 负载均衡 算法
深入浅出Zookeeper源码(七):Leader选举
对于一个分布式集群来说,保证数据写入一致性最简单的方式就是依靠一个节点来调度和管理其他节点。在分布式系统中我们一般称其为Leader。
257 6
|
消息中间件 分布式计算 算法
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析(上)
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析
959 0
|
12月前
|
分布式计算 负载均衡 算法
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
121 1
|
12月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
207 1
|
12月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
159 0
|
监控 算法 网络协议
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析(下)
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析
166 1
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
存储 负载均衡 Dubbo
分布式-Zookeeper(一)
分布式-Zookeeper(一)
|
10月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论