序
本文主要研究一下SWIM Protocol
SWIM Protocol
SWIM的全稱是Scalable, Weakly-Consistent, Infection-Style, Processes Group Membership Protocol
heartbeats
傳統的諸如heartbeats這種membership protocols,每個node週期性地向網路中的所有其他節點傳送heartbeat來表示自己是alive的,如果peer超過指定interval沒有收到node的heartbeart則該node被認定為dead。這種方式適用於小型網路,其傳送的heartbeart數量為O(n^2),當網路中有成千上萬的node時則會造成巨大的網路負擔;SWIM採用Infection-Style dissemination來解決這個問題
tasks
與傳統的heartbeats相比,SWIM將整個過程分為Failure Detection及Membership update Dissemination兩個task
Completeness與Accuracy
對於failure detection來,有幾個衡量標準:
- Completeness
是否每個failed node最終都會被檢測到
- Speed of failure detection
一個node從failed到被檢測到failed的平均耗時
- Accuracy
false positive rate,即一個node被誤判為failed的概率
- Message Load
在檢測中每個node的network load是多少,是否均勻分佈
Unreliable Failure Detectors for Reliable Distributed Systems一文中指出對於非同步的網路來說,100%的Completeness與Accuracy無法同時保證,因而SWIM權衡之下選擇了Completeness,同時儘可能減少false positive rate以提升Accuracy
Failure Detection
SWIM的failure detection過程分為兩個部分,一個是direct ping,一個是indirect ping- direct ping
local node從alive nodes中隨機選擇N個node來進行detect;如果direct ping中有的node沒有在timeout時間內返回ack則會進行indirect ping
- indirect ping
local node從alive nodes中隨機選擇K個node來對direct ping目標node進行indetect ping,這K個node會把結果forwards給這個local node,最後local node檢查如果這個K個node沒有一個返回ack,則將該目標node標記為failed,然後通過Membership update Dissemination將該node的FAILED資訊傳播到網路中的其他node
Membership update Dissemination
Membership update Dissemination可以將messages分為JOINED、FAILED兩類:
- JOINED
當一個node加入到該網路時,需要通知其他node更新local membership新增該node
- FAILED
當一個node被檢測為failed時,需要通知其他node更新local membership移除該node
這個過程可以使用multicast來實現
改進
-
Infection-Style Dissemination multicast實現的Dissemination是不可靠的而且低效的,一個更加robust版本的SWIM採用Infection-Style的方式進行dissemination,即利用Failure Detection的ping機制,將需要dissemination的訊息piggyback在ping/ack上,來實現類似gossip的訊息傳播,從而減少額外的單獨資訊傳遞開銷
-
Suspicion Mechanism 為了更好地減少false positive rate以提升Accuracy,可以引入Suspicion Mechanism,即當local node檢測到該node failed時將其標記為suspected;被標記為suspected的node在最終被確認為failed之前被當做是alive;其他node如果檢測到該node是alive則對該node取消suspected,恢復alive;如果在指定時間該node沒有被恢復為alive則被標記為failed
-
Time bound failure detection 隨機選擇node進行ping可能會造成一定的延時,可以使用round robin的方式來取代隨機選擇,當所有node都選擇過了之後再重新shuffle該node list
小結
- SWIM的全稱是Scalable, Weakly-Consistent, Infection-Style, Processes Group Membership Protocol;與傳統的heartbeats相比,SWIM將整個過程分為Failure Detection及Membership update Dissemination兩個task
- SWIM的failure detection過程分為兩個部分,一個是direct ping,一個是indirect ping
- Infection-Style的方式進行dissemination,即利用Failure Detection的ping機制,將需要dissemination的訊息piggyback在ping/ack上,來實現類似gossip的訊息傳播,從而減少額外的單獨資訊傳遞開銷