欢迎大家注意github.com/hsfxuebao。我希望这对每个人都会有所帮助。如果您认为有可能
上一篇文章分析了ZK服务器的重要组件和单个计算机的启动过程,并了解了ZK的基本组成。Client客户端体系结构组件,站立-alone Alone Server Server Component Component Architection启动
关于ZK在运行时有很多问题,ZK的多路重用IO?客户端和服务器端如何实现交互式协议?在ZK操作过程中,不同操作的组件和交互过程是什么?
本文将从客户端和服务器的交互过程开始。首先分析两端的相互作用过程和重要组成部分,然后仔细分析这些重要组成部分解决上述问题的作用和有效方法。应注意,交互式操作分析是新的联系。新节点,PING和关闭连接的操作的一般过程类似于新结构,但是内部操作有些改变了。遵循这些遵循的分析。
注意:本文基于ZK版本3.7分析,需要为ZK和重要组件的体系结构提供一定的基础。当然,在阅读了过程后,您可以了解这些架构组件,但是建议首先了解服务器并首先了解服务器端的服务器和侧面,并且客户端上的体系结构组件在本文中不执行。
对于ZK,无论是使用Nio或Netty还是解决通信数据传输问题,客户端和服务器的交互过程都值得学习。
此交互过程仅考虑正常连接,并将其过程分为三个步骤,即:1。客户端启动连接服务器端请求;2.接种服务器的响应以生成相应的响应事件以触发本地侦听器。一般交互流程图如下:
让我们看一下三个步骤的特定详细交互式流程图。
三个步骤的第一步的第一步如下:如下:
在此步骤中,该过程简单地分为11个步骤。在此图中,如果您阅读了前两个有关ZK服务和客户端的重要组件,则可以清楚地知道它具有一般角色,但是在图中添加了它已添加到图形中。nio.next,在每个步骤中分析一些小细节:
服务器侧交互处理过程的三个步骤中的第二步如下:
从ZK系列的第二篇文章中,您可以知道,NioservercnxnFactory在ZK启动时也会在Guardian线程的对象上运行。它将始终询问是否有通过Selector进行新的IO事件。LET详细分析特定的交互过程:
在跟踪此请求源代码时,ZK反复刷新会话到期时间。为什么ZK会在每个请求处理器中刷新会话到期时间?从并发症的角度来看,此问题可能会困惑,因为对于只有一次,每个处理器等同于同步处理的请求,因此似乎不是必需的;当它高时,除了SyncrequestProcesor之外,除SynCrequestProcessor外,它是调用FinalRequestProcessor的同步过程。其他人是异步的。Zookeeeperver类调用了一个响应,以刷新会话的到期时间,并且会话跟踪器可能会将这些会话带入短期到期时间作为过期处理。
当然,以上只是我的猜测。ZK有更多考虑。未来ZK还需要知道其他原因。
最后一步分为三个步骤的交互式流程图如下:
与前两个步骤相比,此过程不是很多步骤,它大约是两个点:1。客户端监视接收响应;2.触发本地侦听器处理发生的ZK事件。特定过程分析如下:
在此时,回调基本上已经结束。无论是新连接还是触发事件,第三步是相同的。它与weaterevents数组相同,并判断调用相应监视器的类型。在分析操作命令交互和PING操作时,此步骤是通用的。
如前所述,Zookeeper是ZK客户端的API类。连接和其他操作基于此类。接下来,查看其新连接连接的外部接口:
创建主机提供商以将地址分散在缓存集中:
否则,每个客户都会旋转第一个客户
此类包含EventThread和SendThread。这两个内部类是ZK交互中最重要的两个类别。我之前也提到过。接下来,查看客户端如何启动两个内部线程类。
启动clientcnxn中的sendthread线程后的下一个主角只是sendthread和呼叫类,并且在处理事件对象时将分析eventthread类。该类是通过循环执行不同的操作。因此,不要将此过程视为单个函数。它是在周期内完成,发送和ping的,但是现在我们仅分析发送连接请求的代码。
从源代码可以看出,sendthread只是一个线程 - 转向呼叫类。特定的发送和接收操作移交给客户端cnxnsocket对象。
与插座的交互式类别。连接过程中的两个最重要的方法连接和Dotransport都在此类中。根据SendThread类中的过程,我们首先分析连接,然后查看Dotransport方法。
当插座已将请求数据序列到ByteBuffer中的数据时,客户端的第一步已经完成。此过程中最关键的事情是将OP_READ操作视为对接收服务器的响应,而OP_WRITE是操作主动发送数据与服务器交互,以便更容易理解代码的理解。
由于空间有限,其余两个步骤(服务器接收处理和响应以及客户终端接收服务器终端响应)将在下一篇文章中分析,因此请继续关注。
Zookeeper 3.7版本GitHub源代码注释分析
## ZK源代码分析系列
Zookeeper原理和源代码学习系列Zookeeper学习系列Zookeeper源代码系列
原始:https://juejin.cn/post/7100110021060460575