Cassandra 对replic的写入是并行完成的吗
我对Cassandra如何执行写请求有一些疑问;我有两个场景,请阅读并确保哪一个是正确的 假设我们有一个由4个节点N1、N2、N3和N4组成的集群。由于Cassandra将节点分布在环形拓扑中,因此节点链接如下:Cassandra 对replic的写入是并行完成的吗,cassandra,Cassandra,我对Cassandra如何执行写请求有一些疑问;我有两个场景,请阅读并确保哪一个是正确的 假设我们有一个由4个节点N1、N2、N3和N4组成的集群。由于Cassandra将节点分布在环形拓扑中,因此节点链接如下: N-->N-->N3-->N4-->N1 此外,我们的复制因子等于3,RF=3,一致性级别等于ALLCL=全部 客户端将写请求W发送给协调器,比如N4。分区器已确定W的主节点为N1 现在会发生什么 场景1:协调员将W发送到N1。收到W后,N1将其存储在本地(commitLog和memt
N-->N-->N3-->N4-->N1
此外,我们的复制因子等于3,RF=3
,一致性级别等于ALL<代码>CL=全部
客户端将写请求W发送给协调器,比如N4。分区器已确定W的主节点为N1
现在会发生什么
场景1:协调员将W
发送到N1
。收到W
后,N1
将其存储在本地(commitLog和memtable中,请忘记内部流程),并确认协调员N4
。然后N1
向N2
发送W
的副本(因为N2
是N
1的环中的下一个节点)。收到W
后,N2
将其存储在本地,并向N4
发送确认。然后N2
将W
的副本发送到N3
(因为N3
是N2
环中的下一个节点)。收到W
后,N3
将其存储在本地,并确认协调员N4
。最后,只要协调器N4
,从所有节点(N1
、N2
、和N3
)接收到确认,它就会将其重放到客户端
请注意,如果场景1正确,则延迟将为4轮
N4-->N1-->N2-->N3-->N4----客户端
场景2:协调器,N4
,向N1
,N2
和N3
广播
N4-->N1,N4-->N2,N4-->N3
然后副本(N1、N2和N3
)在本地存储W
,并确认N4
。当N4
接收到所有ACK
时,它将重播到客户端
有人能确认卡桑德拉的哪种情况是正确的吗
关于?场景2是正确的。请求是并行发送的
以顺序方式查询副本没有任何好处,它只会使请求花费您指出的更长时间。如果其中一个节点发生故障,则需要更长的时间才能找到该信息
还要注意,在上面的示例中,假设一致性级别为ALL。i、 e.协调器将在返回到客户机之前等待接收来自具有数据副本的所有节点的确认。如果一致性较低,例如ONE或QUORUM,则协调器不必等待来自具有副本的每个节点的ACK,并且可以更快地返回到客户端 场景2是正确的
协调器节点将负责将写请求发送到所有副本,而不是副本节点