官术网_书友最值得收藏!

1.3.1 容錯性

我們可能永遠也制造不出永不出現故障的機器。類似的,我們更加難以制造出永不出錯的軟件,畢竟軟件的運行還在一定程度上依賴于硬件的可靠性。那么在互聯網上有那么多的應用程序和服務,它們都有可能出現故障,但在很多時候,我們幾乎都不能發現這些服務中斷的情況,這時分布式系統的特點之一容錯性就凸顯出來了。在大規模分布式系統中,檢測和避免所有可能發生的故障(包括硬件故障、軟件故障或不可抗力,如停電)往往是不太現實的。因此,我們在設計分布式系統的過程中,就會把容錯性作為開發系統的首要目標之一。這樣一來,一旦在分布式系統中某個節點發生故障,利用容錯機制來避免整套系統服務不可用。

那么問題來了,在考慮容錯性的同時,我們是否也需要具備檢測、恢復和避免故障的能力呢?沒錯,在設計與開發分布式系統的過程中,這些問題都需要我們進行認真的思考。對于檢測故障來說,最直接的方法是校驗消息或數據是否有效,但是這種方法能夠覆蓋的故障面很窄。而有些問題,如服務器應用程序崩潰,通過普通方法很難檢測,這時我們可能就需要一套復雜完整的流程來檢測服務器是否真的宕機以及服務器的節點信息,這當中涉及很多因素,如網絡延遲、消息亂序等,最后,采用合適的方法通知運維人員。

故障恢復對于分布式系統設計與開發來說極其重要。當服務器崩潰后,我們需要通過一種方法來回滾永久數據的狀態,確保尚未處理完成的數據不被傳遞到下一個狀態繼續處理,并解決多個節點數據可能存在的不一致性問題,這往往涉及事務性。

常見的避免故障的方法包括消息重發、冗余等。考慮到分布式系統的特性,很多計算任務被分布在不同的節點之間進行,那么其中一個難以避免的問題就是消息丟失,消息丟失的情況屢見不鮮,這幾乎成為了設計分布式系統必須解決的問題,我們通常的做法是在一定超時范圍內,消息不可達時對消息進行重傳,在重新嘗試多次后如果消息仍然不可達,才認為節點出現問題。數據冗余存儲可以在一定程度上降低數據出錯的概率。例如,同一份數據,我們將其存儲為A和B兩份,那么當單點故障發生時,A存儲的數據部分丟失或全部丟失,而B存儲的數據完好無損,這時候,我們就可以利用B存儲的數據對數據進行恢復,避免單點故障導致的數據丟失。當然,這里我們只考慮到數據,如果把分布式系統中其他組件也考慮進來,我們就能看到更多冗余應用的案例,例如,訪問某一特定節點的路由器應當還有一份冗余備份,確保當一個路由器發生故障時,消息仍然可以通過備份的路由器送達。數據庫中的數據也可以利用類似的思想存儲多份冗余數據,以便在某個節點數據丟失的情況下恢復數據。在消息通信的過程中,將相同的消息派發給兩個以上的節點存儲或處理,以避免某個節點單點故障導致消息丟失等。

冗余是設計分布式系統時必須考慮的特性之一,也是系統對外提供服務的質量的重要保證,提高用戶體驗,盡可能減少服務不可用時間是非常重要的。

主站蜘蛛池模板: 台北县| 湘西| 定边县| 仲巴县| 英超| 承德市| 无锡市| 怀化市| 监利县| 江安县| 弥勒县| 澎湖县| 交城县| 浙江省| 丰城市| 南昌县| 淄博市| 金乡县| 南皮县| 朔州市| 孟村| 兴义市| 宜丰县| 华阴市| 汨罗市| 金坛市| 辽阳市| 昭觉县| 双鸭山市| 黎川县| 新乐市| 阳朔县| 土默特右旗| 洪洞县| 肇庆市| 永川市| 兴安盟| 平阴县| 边坝县| 运城市| 乌拉特前旗|