整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

14.3.5会话

hadoop 花牛 77℃ 0评论

每个ZooKeeper客户端的配置中都包括集合体中服务器的列表。在启动 时,客户端会尝试连接到列表中的一台服务器。如果连接失败,它会尝试 连接另一台服务器,以此类推,直到成功与一台服务器建立连接或因为所 有ZooKeeper服务器都不可用而失败。

一旦客户端与一台ZooKeeper服务器建立连接,这台服务器就会为该客户端创建一个新的会话。每个会话都会有一个超时的时间设置,这个设置由 创建会话的应用来设定。如果服务器在超时时间段内没有收到任何请求, 则相应的会话会过期。一旦一个会话已经过期,就无法重新被打开,并且任何与该会话相关联的短暂znode都会丢失。会话通常都会长期存在,而 会话过期则是一种比较罕见的事件,但对于应用来说,如何处理会话过期 仍是非常重要的(详情可参见14.4.2)。

只要一个会话空闲超过一定时间,都可以通过客户端发送ping请求(也称为心跳)来保持会话不过期。ping请求是由ZooKeeper的客户端库自动发送, 因此在你的代码中不需要考虑如何维护会话。)这个时间长度的设置应当足 够低,以便能够检测出服务器故障(由读超时体现),并且能够在会话超时的时间段内重新连接到另外-台服务器。

ZooKeeper客户端可以自动地进行故障切换,切换至另一台ZooKeeper服务器,并且关键的是,在另一台服务器接替故障服务器之后,所有的会话(和相关的短暂znode)仍然是有效的。

在故障切换过程中,应用程序将收到断开连接和连接至服务的通知。当客户端断开连接时,观察通知将无法发送,但是当客户端成功恢复连接后,这些延迟的通知还会被发送。当然,在客户端重新连接至另一台服务器的 过程中,如果应用程序试图执行一个操作,这个操作将会失败。这充分说明在真实的ZooKeeper应用中处理连接丢失异常的重要性(详情可参见 14.4.2 )。

ZooKeeper中有几个时间参数。“滴答tick time)参数定义了ZooKeeper中的基本时间周期,并被集合体中的服务器用来定义相互交互的时间表。其他设置都是根据滴答参数来定义的,或至少受它限制。例如, 会话超时(session timeout)参数的值不可以小于2个滴答并且不可以大于20个滴答。如果你试图将会话超时参数设置在这个范围之外,它将会被自动修改到这个范围之内。

通常将滴答参数设置为2秒(2000毫秒),对应于允许的会话超时范围是4 到40秒。在选择会话超时设置时有几点需要考虑。

较短的会话超时设置会较快地检测到机器故障。在组成员管理的例子中,会话超时的时间就是用来将故障机器从组中删除的时间。但要避免将会话超时时间设得太低,因为繁忙的网络会导致数据包传输延迟,从而可能会 无意中导致会话过期。在这种情况下,机器可能会出现“振动”(flap)现象:在很短的时间内反复出现离开后又重新加入组的情况。

对于那些创建较复杂暂时状态的应用程序来说,由于重建的代价较大,因此比较适合设置较长的会话超时。在某些情况下,可以对应用程序进行设计,使它能够在会话超时之前重启,从而避免出现会话过期的情况(这适合 于对应用进行维护或升级)。服务器会为每个会话分配一个唯一的ID和密 码,如果在建立连接的过程中将它们传递给ZooKeeper,可以用于恢复一个会话(只要该会话没有过期)。将会话ID和密码保存在稳定存储器中之后,可以将一个应用程序正常关闭,然后在重启应用之前凭借所保存的会话ID 和密码来恢复会话环境。

你可以将这个特征看成是一种用来帮助避免会话过期的优化技术,但不能因此忽略对会话过期异常的处理,因为机器的意外故障也会导致会话过期,或者,即使应用程序是正常关闭,也有可能因任何原因导致它没有在 会话未过期之前完成重启。

般的规则是,ZooKeeper集合体中的服务器越多,会话超时的设置应越 大。连接超时、读超时和ping周期都被定义为集合体中服务器数量的函 数,因此集合体中服务器数量越多,这些参数的值反而越小。如果频繁遇 到连接丢失的情况,应考虑增大超时的设置。可以使用JMX来监控 ZooKeeper的度量指标,例如请求延迟的统计信息。

转载请注明:全栈大数据 » 14.3.5会话

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址