在Zookeeper集合处理任何请求之前,客户端必须先建立和服务器的连接。会话的概念相当重要,同时对于Zookeeper的操作也是至关重要的。客户端提交给Zookeeper的所有操作都与一个会话相关联。当一个会话因为任何原因结束时,那个会话期间建立的临时节点也会随之消失。

    当一个客户端使用某种语言创建了Zookeeper的处理器时,它就建立和服务的会话。客户端起初只会连接集合中的一台服务器,也只会连接一台。它使用TCP连接与服务器通信,但是当它不再收到当前服务器的信息一段时间,它就会转移到其它服务器。转移会话连接到另外一台服务器是Zookeeper客户端库透明的处理的。

    会话提高了顺序性的保障,这意味着在一个会话中请求的执行是按FIFO的顺序执行的。典型情况下,一个客户端只打开一个会话,那么所有的请求都是按FIFO的顺序执行的。如果客户端有多个并发会话,跨会话的FIFO顺序不一定会得到保障。来自同一个客户端连续的会话,即使它们时间上不重叠,也不一定会保障FIFO的顺序。在下面这个例子演示了它是如何发生的:

    • 客户端建立一个会话,并发出两个连续的异步调用去创建\/tasks和\/workers
    • 第一个会话过期
    • 客户端建立另外一个会话,并发出一个异步调用去创建\/assigin

    按这个顺序进行调用,有可能只会创建\/tasks和\/assigin,这样保证了第一个会话的FIFO顺序,但是跨越多个会话就得不到保证了。