ZooKeeper是否总是满足CAP理论中的CP呢?还是有办法将其用作面向服务发现的AP呢?
ZooKeeper是否总是满足CAP理论中的CP呢?还是有办法将其用作面向服务发现的AP呢?
不,你不能像其他系统那样在当前版本的ZooKeeper中更改一致性保证。
你可以为客户端添加本地缓存,如果集群崩溃,它们将具有只读数据,但就CAP而言,这仍然不是A,因为它需要对更新和读取都可用。
如果ZK为您的服务发现需求提供了过强的一致性级别,您应该尝试研究其他选项,例如Eureka、Consul或etcd。
可能相关的阅读材料:
一个很好的问题。
在CAP定理中,“C”实际上意味着线性一致性:
如果操作B在操作A成功完成后开始,则操作B必须看到系统处于与操作A完成时相同的状态或更新的状态。
由于ZooKeeper中的写入在仲裁确认后被视为已完成,因此仍可能存在具有旧数据的陈旧节点。因此,严格来说,默认情况下ZooKeeper不是CP系统,尽管它提供了相当高的一致性水平。您可以通过在读取之前使用sync
命令来确保线性一致性。
关于网络分区下的可用性,那些不在多数派中的节点将无法再处理写请求,因为它们没有仲裁。
另请参见: