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