为什么策展人不使用连接池来管理连接

时间:2019-04-03 03:18:03

标签: apache-zookeeper apache-curator

我是使用curator的新手,我发现某些框架使用连接池来管理jdbc,redis之类的连接。但是我在curator中找不到连接池。为什么curator不提供连接池以减少每个连接消耗的资源。

1 个答案:

答案 0 :(得分:0)

一个CuratorFramework实例包装了ZooKeeper实例,该实例又维护了与ZooKeeper节点的连接。

ZooKeeper提供以下订购保证:

  
      
  • 可线性化的写入:所有更新ZooKeeper状态的请求都是可序列化的,并且具有优先权;
  •   
  • FIFO客户端订单:来自给定客户端的所有请求均按照客户端发送的顺序执行。
  •   

假定存在带有两个CuratorFramework实例A和B的连接池。我们向A发出写请求,以创建一个znode /a并将A返回到连接池。然后,我们从连接池中获得另一个CuratorFramework实例。这次我们得到B。我们向B发出读取请求以读取/a。由于无法保证读请求将被放置在写请求之后,因此我们可能无法获得/a。只有具有相同的连接,我们才能确保顺序。因此,连接池存在此数据不一致问题。

另一个问题是临时znodes。用一个CuratorFramework实例创建的临时znode对其自身仅可见。使用连接池,仅当使用创建它们的相同CuratorFramework实例时,我们才能读取临时znode。