ZooKeeper总是CP(就CAP定理而言)是否正确? 或者有没有将它用作服务发现需求的AP?ZooKeeper在CAP定理方面总是一致的吗?
回答
不,您不能在当前版本的ZooKeeper中像在其他一些系统中一样更改一致性保证。
如果集群发生故障,您可以向客户端添加本地高速缓存,使其只有只读数据,但对于仍不是A的CAP而言,因为它需要可用于更新以及读取。
如果ZK提供的服务发现需求的一致性水平太高,您应该尝试研究其他选项,例如,尤里卡,领事或etcd。
可能与上写着:
出色的问题。
在CAP定理而言,“C”,其实就是线性化:
如果操作B.操作后启动的成功完成,然后 操作B必须看到系统在相同的状态,因为它在 完成操作A或更新的状态。
由于ZooKeeper中的写入在仲裁确认后被认为已完成,因此仍旧会有旧数据的旧节点。因此,严格来说,ZooKeeper默认情况下不是CP系统,尽管它提供了相当高的一致性。您可以通过在sync
命令前进行读取来确保线性化。
关于网络分区下的可用性,那些不是大多数的节点不能再处理写入请求,因为它们没有仲裁。
参见:
动物园管理员不是A,因此它被称为CP显然不能降P.。就CAP定理而言,“C”实际上意味着线性化。
线性化:如果操作B.操作后启动的成功完成,然后操作B必须看到系统在相同的状态,因为它是在操作的完成,或更新状态。
但是, 动物园管理员有顺序一致性 - 更新从客户端将在它们的发送顺序应用。
ZooKeeper实际上在客户端视图中并不一致。 http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html#ch_zkGuarantees
的ZooKeeper并不能保证在每个实例的时候,两个不同的客户会有ZooKeeper的数据的一致意见。由于网络延迟等因素,一个客户端可能会在另一个客户端收到更改通知之前执行更新。考虑两个客户端A和B的情况。如果客户端A将znode/a的值从0设置为1,然后告诉客户端B读取/ a,则客户端B可以读取旧值0,具体取决于哪个服务器它连接到。如果客户端A和客户端B读取相同的值很重要,则客户端B在执行读取操作之前应该先从ZooKeeper API方法调用sync()方法。
ZooKeeper提供“顺序一致性”。这比线性化弱,但仍然非常强大,比“最终一致性”强得多。 ZooKeeper还提供了一个同步命令。如果您调用同步命令,然后执行读操作,则读操作将保证至少可以看到在同步启动之前完成的最后一次写操作。
linearizability
,写入应该看起来是瞬时的。不准确的是,一旦写入完成,所有后来的读取(其中“稍后”由挂钟开始时间定义)应返回该写入的值或稍后写入的值。一旦读返回一个特定的值,其随后所有的读操作将返回该值或更高的写入的价值。”
在动物园管理员,他们有同步()方法来使用,我们需要像线性化。
Serializability
是关于事务或一个或多个对一个或多个对象的操作的组的保证,它保证对多个项目执行一组事务(通常包含读取和写入操作)等同于某些串行执行(总订购)
参见:
- 1. Zookeeper Watches系统是否有错误,或者这是CAP定理的限制吗?
- 2. DynamoDB是否遵循CAP定理及其“强一致性”承诺?
- 3. 在CAP中可用性的一致性定理
- 4. 今天的技术是克服CAP定理的局限性吗?
- 5. 分布式Erlang和在CAP定理
- 6. 只有分布式系统遵循CAP定理吗?
- 7. Oracle RDBMS在CAP定理中的位置在哪里?
- 8. “可用性”如何在CAP定理中起作用。 AP里面出
- 9. Azure,SLA和CAP理论
- 10. 是python str.split()不一致吗?
- 11. FPS Cap仍然会导致闪烁
- 12. 这是Laravel会话处理不一致的bug吗?
- 13. zlib:压缩流总是一样的吗?
- 14. IMultiValueConverter的参数总是一样吗?
- 15. numpy独一无二总是一样吗?
- 16. 一个窗口可以总是在另一个窗口上面吗?
- 17. 有什么方法可以覆盖cap deploy:setup任务吗?
- 18. PHP条件重定向总是重定向到同一页面
- 19. 一个静态方法总是可以转换为一个实例方法吗?
- 20. jQuery - 总是排在前面
- 21. 我可以递归地在Zookeeper中创建一个路径吗?
- 22. 在重定向上重定向的页面被处理了吗?
- 23. 我可以注入一个总是出现在现有div上方的div吗?
- 24. sys.modules [__ name __] .__ doc__和__doc__总是一样吗?
- 25. RInterface.GetArrayToVBA()总是返回一个数组吗?
- 26. 对于(1)总是和perl一样吗?
- 27. 动物园管理员澄清CAP
- 28. WSDL总是公开的吗?
- 29. 对象应该总是封装其方法所处理的数据吗?
- 30. ASP.NET AJAX页面方法不一致