This commit is contained in:
by931
2022-09-06 22:30:37 +08:00
parent 66970f3e38
commit 3d6528675a
796 changed files with 3382 additions and 3382 deletions

View File

@@ -196,7 +196,7 @@ function hide_canvas() {
<p>会话是 ZooKeeper 中最核心的概念之一。客户端与服务端的交互操作中都离不开会话的相关的操作。在前几节课中我们学到的临时节点、Watch 通知机制等都和客户端会话有密不可分的关系。比如一次会话关闭时,服务端会自动删除该会话所创建的临时节点,或者当客户端会话退出时,通过 Watch 监控机制就可以向订阅了该事件的客户端发送响应的通知。接下来我们就从会话的应用层使用,到 ZooKeeper 底层的实现原理,一步步学习会话的相关知识。</p>
<h3>会话的创建</h3>
<p>ZooKeeper 的工作方式一般是通过客户端向服务端发送请求而实现的。而在一个请求的发送过程中,首先,客户端要与服务端进行连接,而一个连接就是一个会话。在 ZooKeeper 中,一个会话可以看作是一个用于表示客户端与服务器端连接的数据结构 Session。而这个数据结构由三个部分组成分别是会话 IDsessionID、会话超时时间TimeOut、会话关闭状态isClosing如下图所示。</p>
<p><img src="assets/CgqCHl7XUbeAH4RvAABLmAD-zt0526.png" alt="image" /></p>
<p><img src="assets/CgqCHl7XUbeAH4RvAABLmAD-zt0526.png" alt="png" /></p>
<p>下面我们来分别介绍一下这三个部分:</p>
<ul>
<li>会话 ID会话 ID 作为一个会话的标识符当我们创建一次会话的时候ZooKeeper 会自动为其分配一个唯一的 ID 编码。</li>
@@ -205,7 +205,7 @@ function hide_canvas() {
</ul>
<h3>会话状态</h3>
<p>通过上面的学习,我们知道了 ZooKeeper 中一次会话的内部结构。下面我们就从系统运行的角度去分析,一次会话从创建到关闭的生命周期中都经历了哪些阶段。</p>
<p><img src="assets/CgqCHl7XUcSAAoGmAAO6qmEJCC4477.png" alt="11.png" /></p>
<p><img src="assets/CgqCHl7XUcSAAoGmAAO6qmEJCC4477.png" alt="png" /></p>
<p>上面是来自 ZooKeeper 官网的一张图片。该图片详细完整地描述了一次会话的完整生命周期。而通过该图片我们可以知道,在 ZooKeeper 服务的运行过程中会话会经历不同的状态变化。而这些状态包括正在连接CONNECTING、已经连接CONNECTIED、正在重新连接RECONNECTING、已经重新连接RECONNECTED、会话关闭CLOSE等。</p>
<p>当客户端开始创建一个与服务端的会话操作时,它的会话状态就会变成 CONNECTING之后客户端会根据服务器地址列表中的服务器 IP 地址分别尝试进行连接。如果遇到一个 IP 地址可以连接到服务器,那么客户端会话状态将变为 CONNECTIED。</p>
<p>而如果因为网络原因造成已经连接的客户端会话断开时,客户端会重新尝试连接服务端。而对应的客户端会话状态又变成 CONNECTING ,直到该会话连接到服务端最终又变成 CONNECTIED。</p>