【发布时间】:2016-03-23 03:50:55
【问题描述】:
我对 Cassandra 如何执行写请求有一些疑问;我有两种情况,请阅读它们并确保哪个是正确的。
假设我们有一个由 4 个节点 N1、N2、N3 和 N4 组成的集群。由于 Cassandra 以环形拓扑分布节点,因此节点链接如下:
N-->N-->N3-->N4-->N1
此外,我们的复制因子等于 3,RF=3,一致性级别等于 ALL。 CL=ALL
客户端将写入请求 W 发送到协调器 N4。分区器已确定 W 的主节点为 N1。
现在会发生什么?
场景 1:协调器将W 发送到N1。收到W后,N1将其存储在本地(在commitLog和memtable中,请忘记内部流程)并确认协调员N4。然后N1 将W 的副本发送到N2(因为N2 是来自N1 预期的环中的下一个节点)。收到W,N2 后将其存储在本地,并向N4 发送确认。然后N2 将W 的副本发送到N3(因为N3 是来自N2 预期的环中的下一个节点)。在收到W,N3 后将其存储在本地并确认 CoordinatorN4。最后,一旦协调器N4 收到来自所有节点(N1、N2 和 N3)的确认,它就会将其重播给客户端。
请注意,如果场景 1 正确,则延迟将为 4 轮
N4-->N1-->N2-->N3-->N4 ----client.
场景 2:协调员,N4,广播W 到 N1,N2,和 N3
N4-->N1, N4-->N2, N4-->N3。
然后副本 (N1, N2, and N3) 在本地存储 W 并确认到N4。当N4 接收到所有ACK's 时,它会重播给客户端。
谁能确认 Cassandra 中哪个场景是正确的?
问候?
【问题讨论】:
标签: cassandra