分布式系统之异常
異常的概念
分布式系統的一臺服務器或者服務器上運行的一個進程稱為一個節點,節點和節點之間通過互聯網互聯,然而服務器節點是不可靠的,節點和節點之間也是不可靠的,所以在系統運行過程中出現異常。
異常類型
1)服務器宕機
引起服務器宕機的原因可能是內存錯誤,資源耗盡,服務器停電等,當服務器宕機時,節點會失去所有的內存信息,所以應該考慮如何通過讀取持久化的介質,如機械鍵盤,固態硬盤等來恢復內存信息,使其恢復到宕機前某個一致的狀態。
2)網絡異常
引起網絡異常的原因可能是消息丟失,消息亂序或者網絡包數據錯誤。
還有一些特殊的網絡異常稱為“網絡分區”,集群劃分為多個網絡分區,網絡分區之間無法通信,而每個網絡分區內部可以通信的情況。
3)磁盤故障
磁盤故障是一種發生概率很高的異常,磁盤故障分為兩種情況:磁盤損壞和磁盤數據錯誤。
磁盤損壞:丟失了磁盤上的所有數據,因此,需要考慮將數據部署到多臺服務器,即使其中一臺服務器發生磁盤錯誤,也可以從其他的服務器中恢復。
磁盤錯誤恢復:可以采用校驗和機制來解決,可以選擇在操作系統層面實現,也可以在上層的分布式系統層面實現。
分布式系統的三態
由于網絡異常的存在,分布式系統中請求結果存在“三態”的概念。
在分布式系統中,如果某個節點向另一個節點發起 RPC(Remote procedure call)調用,即某個節點 A 向另一個節點 B 發送一個消息,節點 B 根據收到的消息內容完成某些操作,并將操作的結果通過另一個消息返回給節點 A,那么這個 RPC 執行的結果有三種狀態:“成功”、“失敗”、“超時(未知)”,稱之為分布式系統的三態。
如果請求 RPC 的節點 A 收到了執行 RPC 的節點 B 返回的消息,并且消息中說明執行成功,則該 RPC 的結果為“成功”。
如果請求 RPC 的節點 A 收到了執行 RPC 的節點 B 返回的消息,并且消息中說明執行失敗,則該 RPC 的結果為“失敗”。
但是,如果請求 RPC 的節點 A 在給定的時間內沒有收到執行 RPC 的節點 B 返回的消息,則認為該操作“超時”。原因可能是服務器宕機,網絡異常,磁盤故障等
總結