我對Cassandra如何執行寫入請求有些疑惑;我有兩種情況,請閱讀並確保哪一種是正確的。寫入副本並行完成
假設我們有一個由4個節點N1,N2,N3和N4組成的集羣。如卡桑德拉分佈在環形拓撲中的節點,節點鏈接如下:
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
是來自N
1個預期的環中的下一個節點)。收到W
後,N2
將其存儲在本地,並將確認發送給N4
。然後N2
將W
的副本發送到N3
(因爲N3
是來自N2
未來的環中的下一個節點)。收到W
後,N3
將其存儲在本地,並確認協調員N4
。最後,只要協調員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
時,它會重播給客戶端。
任何人都可以確認卡桑德拉哪個場景是正確的嗎?
問候?