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