這篇開始,回到CASSANDRA/SCYLLA 一些分散式資料庫的系統處理介紹。
還記得Day4. 淺談分散式DB概念的簡介嗎?
想認識CASSANDRA/SCYLLA怎麼做到跨機器同步資料,怎麼追求不同節點資料的最終一致性,這些知識都無可厚非,我們必須認識它們。
首先,分佈在不同節點,每個在不同機器上的CASSANDRA/SCYLLA資料庫,可能遇到物理/系統層面的非預期意外。
好比機器的電源線被拔了,網路突然不通了,機器突然當機了等等,某個節點上的服務突然不能使用。
如此去想,馬上就浮出現幾個問題:
CASSANDRA/SCYLLA 利用gossip
機制,去做節點和服務的偵測。
gossip
直接翻譯起來叫『八卦』/『謠言』,比較常聽到通俗的講法,就是『病毒式傳播』。
亦即每個成員都可以是傳播者/主動發起者,並沒有一定是要某個核心成員主導才能作業。
P2P就是這樣的概念,這種機制並非CASSANDRA/SCYLLA專有,在分散式系統,是很常出現的機制,只差在實作細節的不同。
這種機制有什麼好處和壞處呢?
我們拿中心化/主從式的系統做比較,好處和壞處同樣很明顯。
好處:
壞處:
CASSANDRA/SCYLLA 在每個節點開始運作時,該節點就會有一個叫做gossiper的部分,專門處理針對其他節點狀態的偵測資訊。
gossiper會每秒隨機挑選叢集當中某一個節點,與之建立gossip session,每次這樣的gossip動作,會有三次訊息來回傳遞。
簡單來說就像tcp的handshake(三向交握),send+recv+ack。
確認對方節點是否存活,若這個gossip動作失敗,該gossiper對於節點的維護列表,會在上頭記上一筆。
但是一次失敗,並不是馬上就判斷對方節點失效了。
而是有個進階的累積錯誤演算法,計算一個叫做Phi
的數值,藉此判斷目標節點的狀況。
不過這已經是很底層的部分,我們並不需要特別了解實際的演算法運作,大概曉得概念就好。
以上關於gossip的介紹到這邊。