我搜索了关于 Couchbase 如何在集群内实现强一致性的解释。所有这些都是使用 membase 的结果吗?
3 回答
Couchbase 是 membase 顺便说一句。Couchbase 是一个产品和一个公司,该公司是 NorthScale (Membase) 和 CouchDB 创始人的合并,因此公司和产品的名称都是 Couchbase。
更新操作(replace 和 [forced] set)首先更新 RAM 缓存,随后的读取是新值,这就是一致性模型。
Couchbase 是一种“最终持久化”(EP)架构,其中 CRUD 操作首先更新 RAM 缓存,然后插入 EP 队列以进行磁盘 i/o。同时,当配置副本时,它们会进入副本队列并转移到其他节点。EP 架构允许即时一致性和超高吞吐量,因为磁盘 i/o 是所有系统中最慢的组件。
正如 WiredPrairie 所提到的,单个节点负责/激活给定密钥。密钥被散列,散列的结果是它应该存在的特定分区。sdk 维护的 partition->couchbase-node 映射允许它们直接转到每个分区的活动节点。同样,这减少了延迟,因为它不必通过负载平衡器(它由架构本身进行负载平衡),也不会通过“主”节点,每个节点都是主节点,也不会通过一个“分片主”,其工作是将客户端重定向到特定分片。通过绕过所有这些,延迟减少到最低限度。
Couchbase 通过强制对特定数据的所有读取都转到集群中的单个节点来保证强一致性。您无法从副本中读取。如果可以,您最终可能会得到不一致的数据。
使用 2.0 XDCR 时,Couchbase 仅提供最终一致性。
除了他们对软件的特定设计要求之外,我不会说这是任何“结果”。
这篇博文中有一些额外的信息。
我不认为它是强一致性,因为如果一个节点主动vbucket重启,数据还没有被复制或者还没有持久化,它会丢失数据;强一致性需要W+R>N,这里R=1,所以我们需要W=N,也就是说所有的replica都应该是ACID;我们可以称之为假强一致性