天天看點

分布式系統之異常

異常的概念

分布式系統的一台伺服器或者伺服器上運作的一個程序稱為一個節點,節點和節點之間通過網際網路互聯,然而伺服器節點是不可靠的,節點和節點之間也是不可靠的,是以在系統運作過程中出現異常。

異常類型

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 傳回的消息,則認為該操作“逾時”。原因可能是伺服器當機,網絡異常,磁盤故障等

繼續閱讀