分佈式系統不可靠的網絡問題

在之前我們講述了分佈式系統會出現 partial failures 主要原因是部分組件或者服務發生故障 faults, 其實還存在另一個故障, 即網絡故障. 今天我們來聊下分佈式系統不可靠的網絡問題.

不可靠的網絡問題分類

在前面我們講述了分佈式系統模型, 其中已經對響應結果做出了分析, 這裏我藉助《設計數據密集系統》一張圖來說明下, 總結起來主要有三個方面:

關於第一點相信很容易理解, 一般就是硬件故障導致的; 這裏主要講述下爲什麼網絡數據包存在亂序以及網絡延遲爲什麼是不可靠的, 最後我們再分析下分佈式系統兩大類集羣存在服務節點失效判斷的模糊性.

同步網絡與異步網絡

同步網絡與有界延遲

什麼是同步網絡, 其實在我們傳統的電話網絡中就是採用同步網絡實現的. 同步網絡就是在通話雙方之間的整個路徑上會爲通話分配固定的、有保障的網絡帶寬流量, 這條電路會一直保持到通話結束, 其網絡拓撲結構爲星型結構, 其主要特徵是流量路徑固定, 以南北流量爲準, 同時也存在單點故障問題, 如下:

這裏的同步網絡就好比我們乘坐廣州到北京高鐵, 單個鐵軌上只能容納一列高鐵, 通話兩端就好比從廣州到北京, 那麼這這個過程中我們的路程固定, 速率也是固定的, 那麼到達目的地的時間一般而言也是固定, 至少我們可預測達到目的地時間點.

那麼將上述的例子映射到我們同步網絡環境中, 同步網絡是雙向的, 即雙軌, 廣州到北京以及北京廣州的軌道. 從網絡拓撲結構中可以看出, 每個電路都是提前預留對應傳輸數據的大小, 並且由於不存在排隊現象, 網絡延遲從端到端是固定的, 我們把這種情況稱之爲有界延遲.

異步網絡與無界延遲

相比同步網絡, 我們的數據中心網絡以及移動電話則是異步網絡, 異步網絡好比我們的高速公路, 在同一個高速公路上會存在大小不同的車型, 就好比數據包, 同時在同一個高速公路上也存在車輛臨時換道插隊現象, 關鍵是會存在堵車, 尤其是臨近節假日高峯時段, 原本 4 小時達到目的地由於中間堵車導致我們 10 小時甚至更久的時間達到, 即網絡端到端的延遲是不固定的, 因爲存在網絡擁塞導致數據包要進行排隊等待現象, 對於產生的延遲具備不可預測性, 我們稱之爲無界延遲.

那爲什麼異步網絡會亂序呢? 在我們的異步網絡中是採用分組交換的傳輸機制, 也就是說我們會把網絡的數據包拆分不同的小包通過數據傳輸進行傳送, 那麼這些不同的數據包就好比我們高速公路上不同大小車型的車輛運行在同一個高速公路通道上, 對於數據包的傳輸我們無法保證其順序, 由於亂序的存在會導致數據不完整, 因此一般爲了保證數據的完整性, 我們一般會在數據包會增加對應的頭尾標記, 這樣當數據包從一端傳送到另一端的時候也能夠保證其數據的完整性. 其實就是一個數據拆包與粘包的機制.

對於異步網絡的拓撲結構, 主要有兩種, 即 Fat Tree 結構以及 Spine-Leaf 結構, 如下:

關於同步與異步網絡總結如下:

節點失效的模糊性

既然我們已經知道分佈式系統中網絡延遲具備不可靠性, 那麼由於這個原因也給分佈式系統額外增加了新的複雜度, 即節點失效的模糊性.

節點失效的模糊性主要是體現在分佈式系統中針對 Fault Tolerance 中節點故障自動檢測切換過程, 主要分爲兩類, 一是計算集羣故障檢測; 二是存儲集羣故障檢測.

計算集羣

針對計算集羣的自動檢測如下, 負載均衡器需要停止向已死機的節點 Node3(即停止讓其參與請求分配)發送請求。

存儲集羣

存儲集羣, 比如主從架構中, 如果 Master 節點發生故障, 那麼就需要從其中一個 Slave 節點進行選舉提升爲新的 Master 節點.

但是在上述故障檢測過程中, 由於網絡的存在, 我們必須要考慮到實際不可預測的因素, 比如上述的兩者模型中 Node3 節點 / Master 節點真的是故障還是由於網絡問題而被判斷爲故障呢?

可能會想到一個可行的解決方案, 那麼就是在上述故障檢測中增加超時機制, 如果超過指定的時間我們再進行重試, 若無響應則我們判斷爲對應的節點故障, 然後再採取故障容錯機制或者重新選舉新 Master 節點方式來避免分佈式系統產生更多連鎖的 Failures.

但是超時時間要設置多長呢? 如果設置的時間過長, 那麼會導致分佈式系統出現的 Failures 時間更長, 如果時間過短, 那麼就會產生誤判, 比如上述計算集羣中由於誤判導致 Node1 以及 Node2 節點流量突增而過載產生級聯故障. 那麼我們有辦法預測我們的網絡延遲以及請求處理的時間嗎? 假如往返的網絡延遲均爲 d, 請求處理時間爲 r, 那麼我們設置超時間爲 2d + r 則是一個合理的超時時間, 但是實際運行環境中並不具備. 因爲網絡延遲不確定, 因此我們設置延遲超時其實是與資源利用的 Trade-Off.

總結

在採用數據中心的異步網絡組成的分佈式系統中, 基於分組交換技術以及網絡阻塞排隊導致我們分佈式系統在網絡超時設置上存在很多的不確定性, 對於超時的時間設置反而需要我們在延遲與資源利用率之間進行 Trade-Off.

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/RdgVk2dO_QY-T0bqGgGMyA