【Free Style】ZooKeeper总结材料分享(二)

举报
pappy 发表于 2017/11/07 19:34:19 2017/11/07
【摘要】 会话过期由ZooKeeper集群,而不是客户端来管理。客户端与集群建立会话时会提供上面讨论的超时值。集群使用这个值来确定客户端会话何时过期。集群在指定的超时时间内没有得到客户端的消息时发生会话过期。会话过期时集群将删除会话的所有临时节点,立即通知所有(观察节点的)客户端。此时已过期会话的客户端还是同集群断开连接的,不会被通知会话已经过期,直到(除非)客户端重新建立到集群的连接,这时候已过期会话的观

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

会话过期由ZooKeeper集群,而不是客户端来管理。客户端与集群建立会话时会提供上面讨论的超时值。集群使用这个值来确定客户端会话何时过期。集群在指定的超时时间内没有得到客户端的消息时发生会话过期。会话过期时集群将删除会话的所有临时节点,立即通知所有(观察节点的)客户端。此时已过期会话的客户端还是同集群断开连接的,不会被通知会话已经过期,直到(除非)客户端重新建立到集群的连接,这时候已过期会话的观察才会收到“会话已过期”通知。

已过期会话的观察看到的状态转换过程示例:

1.已连接:会话建立,客户端与集群通信中(客户端/服务器通信正常进行)

2.客户端从集群中分离

3.连接已断开:客户端失去同集群的连接

4.时间流逝,超时时间过后,集群让会话过期,客户端并不知道,因为它还是同集群断开连接的。

5.时间流逝,客户端与集群间的网络恢复正常。

6.已过期:最终客户端重新连接到集群,此时被通知会话已经过期。

建立会话时的另一个参数是默认观察。客户端发生状态改变时观察会被通知。比如说,客户端将在失去同服务器的连接,或者会话过期时被通知。观察应该认为初始状态是连接已经断开(在客户端库向观察发送任何状态改变事件之前)。新建连接时发送给观察的第一个事件通常是会话连接建立事件。

会话由客户端发送的请求保持为活动状态。如果要空闲一段将导致超时的时间,客户端将发送PING请求,保持会话是活动的。PING请求不仅让服务器知道客户端仍然是存活的,也让客户端可以确认,到服务器的连接依然是活动的。PING的时序足够保守,确保能够在合理的时间内检测到死掉的连接,重新连接到新的服务器。

一旦到服务器的连接成功建立,则进行同步或者异步操作时,通常有两种情况导致客户端库产生连接丢失事件(C绑定中的错误码,Java中的异常:关于绑定特定的细节,请看API文档):

1.应用程序对已经不存活/有效的会话进行操作

2.在有到服务器的未决操作(例如,有一个进行中的异步调用)时,客户端断开同服务器的连接

3.2.0版增加SessionMovedException。有一种称作SessionMovedException的内部异常。通常客户端看不到这个异常。在某连接上收到一个会话请求,但是这个会话已经重建到另一个服务器上的时候会发生这种异常。导致这种错误的原因通常是,客户端向服务器发送请求,但是数据分组被延迟,以致客户端超时并且连接到一个新的服务器。延迟的分组到达先前的服务器的时候,服务器检测到会话已经移走,会关闭客户端连接。客户端通常看不到这个错误,因为客户端不会从较早的连接上读取数据(通常关闭了较早的连接)。两个客户端试图使用已保存的会话ID和密码重新建立相同的连接时会看到这种错误。其中一个客户端将重新建立连接,而另一个客户端会被断开连接(导致无限次地试图重新建立连接/会话)。


因字数限制,下一篇接着分享~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。