在 Cassandra 與 Mongo 的辯論中,據說由于 mongo 具有主從架構,因此它具有單點故障(主節點),當主節點發生故障時,從節點需要時間來決定新的主節點,因此有一個停機時間視窗。
使用 Cassandra,我們沒有這個問題,因為所有節點都是平等的。但是 Cassandra 也有一個系統,其中節點使用 gossip 協議來保持自己的更新。在 gossip 協議中,需要最少數量的節點才能參與。假設如果其中一個參與節點出現故障,則需要一個新節點來替換它。但是產生一個新的替換節點需要時間,這種情況類似于 mongo 中的 master 故障。
那么就單點故障而言,2 之間有什么區別?
uj5u.com熱心網友回復:
您對 Cassandra 的假設不正確,因此請允許我解釋一下。
Gossip 不需要多個節點即可作業。有可能有一個單節點集群,并且 gossip 仍然可以作業,所以這個陳述是不正確的:
在 gossip 協議中,需要最少數量的節點才能參與。
為獲得最佳實踐,我們建議每個資料中心有 3 個副本(復制因子為 3),因此每個資料中心至少需要 3 個節點。復制因子為 3 時,您的應用程式可以在節點中斷的情況下幸存下來,以達到或推薦的一致性級別ONE,因此這些陳述句也是不正確的:LOCAL_ONELOCAL_QUORUM
假設如果其中一個參與節點出現故障,則需要一個新節點來替換它。但是產生一個新的替換節點需要時間,這種情況類似于 mongo 中的 master 故障。
向 Cassandra 集群引入單點故障的唯一方法是:
- 在單個物理主機上部署多個實體(不推薦)
- 為所有節點使用共享存盤(例如 SAN、NAS、NFS)(不推薦)
作為旁注,其他用戶可能會投票結束您的問題的友好警告,因為比較通常是不受歡迎的,因為答案通常基于意見。干杯!
uj5u.com熱心網友回復:
此外,您對 MongoDB 的假設也不正確。
MongoDB 4.0 版本(當前版本為 5.0)中洗掉了 Master-Slave 復制,現在它使用Replica Sets
通常,您連接到副本集而不是單個副本集成員。當當前 PRIMARY 出現故障時,將選擇一個新的 PRIMARY ,您的應用程式將自動重新連接并重試對新 PRIMARY 的寫入操作。它可能會掛起幾秒鐘,但應該會繼續運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/435817.html
標籤:mongodb 卡桑德拉 nosql 可扩展性 分布式系统
