Cloud 學習筆記 11.Multicast 組播
阿新 • • 發佈:2019-12-31
Multicast 組播
組播是指從某一地址把資訊同時傳遞給一組目的地址。
單播 | 點對點發訊息 |
組播 | 某一點對一組目的傳送訊息 |
廣播 | 從某一點對所有地址傳送訊息 |
地址
在IP層語境下,一般是指IP地址
。在分散式系統裡,一般指程式
.
相對於廣播
,組播(也叫多播)
的傳輸更受限制。組播
只在一組地址(程式
)中傳播
組播的需求
雲端計算環境下,組播協議需要滿足兩個條件:容錯(fault-tolerance)
和可拓展性(scalability)
- 容錯(fault-tolerance): 節點故障、資料包丟失、底層網路延遲...
- 可拓展性(scalability): 節點數量可能快速增長,而協議開銷不能增長過快(慢於
O(n)
集中式解決方案
centralized
是最簡單的解決方案。sender
通過for/while loop
向所有receiver
傳送資訊。
但是會導致兩個問題:
- 無法容錯。如果在迴圈中出現異常,
loop
會被中斷,之後的receiver
將不會收到訊息 - 開銷高。
receiver
接收訊息的平均時間為O(n)
,網路延遲高
基於樹的解決方案
為瞭解決上述兩個問題,於是有了tree-based
方案
(e.g. IP組播,SRM,RMTP,TRAM,TMTP)
如果樹足夠平衡,那麼樹的高度應該是O(log n)
,並且子節點為常數。
對於雲來說,故障是常態,所以樹需要額外的固定開銷來持續維護/修復樹。
通常會在多播組之間生成樹,並使用生成樹演演算法來傳播組播訊息。隨後再用ACK(acknowledgments)
或NAK(negative acknowledgments)
來修復失敗的組播
SRM(Scalable Reliable Multicast)
- 使用
NAK
:- 如果一個節點一段時間沒有收到組播訊息,那麼它會向
root
方向(父節點)傳送修復請求。當另一個節點收到修復請求,它會重發所需的組播訊息
- 如果一個節點一段時間沒有收到組播訊息,那麼它會向
-
NAK/ACK
風暴: 當網路不穩定時,整個網路中可能瞬間充滿大量的NAK/ACK
資訊。為了避免NAK
風暴- 隨機延遲一段時間傳送請求
- 使用
exponential backoff
:每次請求的間隔為上一次時長的兩倍
RMTP(Relicable Multicast Transport Protocol)
- 使用
ACK
-
recevier
定期向sender
傳送一個資訊摘要(digest)
。如果sender
發現recevier
缺少資訊,就會重新傳送一份資料 - 為了避免
ACK
風暴,只有一部分節點會被指定(designated receiver)
。這部分節點會負責轉發缺失的組播訊息
然而,這些協議依然會造成O(n)
的ACK/NAK
開銷