摘 要:大規(guī)模分布式系統(tǒng)設(shè)計的一個重要目標(biāo)是節(jié)省成本,因此性價比較高的PC服務(wù)器大量的應(yīng)用在分布式系統(tǒng)中。這些服務(wù)器的性價比很高,但是故障率也較高,這就要求分布式系統(tǒng)能夠在軟件層面上自動容錯,當(dāng)分布式系統(tǒng)中的節(jié)點出錯時,系統(tǒng)能夠自動檢測和發(fā)現(xiàn),將故障節(jié)點的數(shù)據(jù)和服務(wù)遷移到其他正常節(jié)點上。本文主要研究分布式系統(tǒng)如何將這些異常自動檢測處理并恢復(fù)。
關(guān)鍵詞:分布式系統(tǒng);異常檢測;異?;謴?fù)
中圖分類號:TP393.08 文獻(xiàn)標(biāo)識碼:A 文章編號:1004-7344(2018)33-0316-01
隨著社交網(wǎng)絡(luò)、移動互聯(lián)網(wǎng)、電子商務(wù)等技術(shù)的不斷發(fā)展,大量互聯(lián)網(wǎng)用戶產(chǎn)生了海量的數(shù)據(jù),為了處理這些數(shù)據(jù),各大互聯(lián)網(wǎng)公司都采用了一系列的分布式計算機(jī)系統(tǒng)[1]進(jìn)行用戶數(shù)據(jù)的存儲、處理和分析。分布式系統(tǒng)通常由大量的PC組成,這些PC服務(wù)器性能優(yōu)異,價格低廉,有著良好的成本優(yōu)勢,但是也存在故障率高的問題。由大量PC服務(wù)器組成的分布式系統(tǒng),節(jié)點出現(xiàn)故障失效是極其常見的,為了在節(jié)點出現(xiàn)故障時,不對整個分布式系統(tǒng)的正常運行產(chǎn)生影響,分布式系統(tǒng)應(yīng)該有能力在節(jié)點發(fā)生故障時將故障檢測出來,然后進(jìn)行處理,將故障節(jié)點的數(shù)據(jù)和服務(wù)遷移[2]到其他節(jié)點上。本文主要對分布式系統(tǒng)可能出現(xiàn)的節(jié)點異常類型進(jìn)行分析,對如何檢測異常和恢復(fù)異常進(jìn)行研究。
1 分布式系統(tǒng)中的異常類型
在分布式系統(tǒng)中,通常將一臺服務(wù)器稱為一個節(jié)點,節(jié)點與節(jié)點之間通過網(wǎng)絡(luò)進(jìn)行通信,但是,服務(wù)器節(jié)點是不可靠的,網(wǎng)絡(luò)也是不可靠的,我們首先分析分布式系統(tǒng)中的各種異常類型。
1.1 節(jié)點宕機(jī)
造成節(jié)點宕機(jī)的原因很多,可能是停電、操作系統(tǒng)出錯、內(nèi)存出錯、系統(tǒng)提供資源耗盡等等。節(jié)點宕機(jī)隨時可能發(fā)生,當(dāng)節(jié)點重新啟動后,節(jié)點內(nèi)存中的數(shù)據(jù)完全丟失。因此,分布式系統(tǒng)設(shè)計時要考慮如何設(shè)計通過讀取存儲中的數(shù)據(jù),將節(jié)點恢復(fù)到一個一致的狀態(tài),繼續(xù)提供服務(wù)。
1.2 網(wǎng)絡(luò)出錯
分布式系統(tǒng)的節(jié)點之間是通過網(wǎng)絡(luò)通信的。引發(fā)網(wǎng)絡(luò)錯誤的原因可能是消息丟失、消息亂序、網(wǎng)絡(luò)包數(shù)據(jù)錯誤等。
對于常見的IP網(wǎng)絡(luò)來說,網(wǎng)絡(luò)層不保證數(shù)據(jù)報文的可靠傳遞,在網(wǎng)絡(luò)擁堵,設(shè)備異常,路由變動的情況下都有可能發(fā)生報文丟失。因此,分布式系統(tǒng)的網(wǎng)絡(luò)協(xié)議必須要能夠處理網(wǎng)絡(luò)報文丟失的情況。
消息亂序是指分布式系統(tǒng)中的節(jié)點發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)報文有時不是按照發(fā)送時的順序依次到達(dá)目的節(jié)點。通常由于IP網(wǎng)絡(luò)采用的存儲轉(zhuǎn)發(fā)機(jī)制、路由的不確定性等原因,數(shù)據(jù)報文亂序也是一種常見的網(wǎng)絡(luò)異常。這就要求設(shè)計分布式系統(tǒng)網(wǎng)絡(luò)協(xié)議時,需要有機(jī)制來處理網(wǎng)絡(luò)消息的亂序問題,使得無效的、過期的網(wǎng)絡(luò)消息不影響系統(tǒng)的正確性。
網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)報文可能在傳輸?shù)倪^程中,因為信號干擾,網(wǎng)絡(luò)設(shè)備異常等原因,導(dǎo)致傳輸?shù)臄?shù)據(jù)出錯,分布式系統(tǒng)的網(wǎng)絡(luò)協(xié)議應(yīng)該能夠檢測出出錯的網(wǎng)絡(luò)報文,并且將出錯的網(wǎng)絡(luò)報文丟棄,并且通知數(shù)據(jù)報文的源節(jié)點重新傳輸該數(shù)據(jù)報文,直到成功接收該報文。
1.3 磁盤故障
在分布式系統(tǒng)中,大量的磁盤用于存儲海量的用戶數(shù)據(jù),這些磁盤負(fù)擔(dān)這高強(qiáng)度的讀寫操作,因此,磁盤故障是一種發(fā)生概率較高的異常。磁盤故障主要分為兩種:磁盤損壞和數(shù)據(jù)錯誤。磁盤損壞時會丟失存儲在上面的數(shù)據(jù),分布式系統(tǒng)設(shè)計時需要將數(shù)據(jù)存儲到多個節(jié)點,一個節(jié)點出錯,也能夠從其他節(jié)點上恢復(fù)數(shù)據(jù)。另外,分布式系統(tǒng)也要能夠檢測出磁盤數(shù)據(jù)錯誤。
2 分布式系統(tǒng)中的異常檢測和恢復(fù)
2.1 節(jié)點宕機(jī)檢測和恢復(fù)
對于節(jié)點宕機(jī),采用心跳檢測[3]是一種常用的方法,分布式系統(tǒng)中的每一個節(jié)點,每隔一個固定的時間,向管理節(jié)點發(fā)送一個網(wǎng)絡(luò)心跳數(shù)據(jù)包,管理節(jié)點就認(rèn)為該節(jié)點出于可用狀態(tài)。如果管理節(jié)點超過一定時間,沒有收到某個節(jié)點的心跳包,則檢測出該節(jié)點處于不可用狀態(tài),然后將該節(jié)點的數(shù)據(jù)從其他節(jié)點進(jìn)行恢復(fù),將該節(jié)點提供的服務(wù)遷移到其他節(jié)點上,保證分布式系統(tǒng)繼續(xù)正常服務(wù)。
運維人員恢復(fù)發(fā)生宕機(jī)的節(jié)點并將其重啟后,節(jié)點失去了所有的內(nèi)存信息,可以通過讀取磁盤上的持久化數(shù)據(jù),將節(jié)點的狀態(tài)恢復(fù)到宕機(jī)前的一個一致的狀態(tài),繼續(xù)提供服務(wù)。
2.2 網(wǎng)絡(luò)故障檢測和恢復(fù)
對于網(wǎng)絡(luò)故障中的消息丟失錯誤,可以采用確認(rèn)機(jī)制來保證正確傳輸。節(jié)點發(fā)送的數(shù)據(jù)報文,只有收到了目的節(jié)點的確認(rèn)才認(rèn)為報文正確發(fā)送。
對于網(wǎng)絡(luò)故障中的消息亂序錯誤[4],可以采用數(shù)據(jù)報文序號機(jī)制。對每個數(shù)據(jù)報文編號,如果目標(biāo)節(jié)點收到的報文的序號較期望收到的數(shù)據(jù)報文序號大,則將其保存在內(nèi)存中,待收到之前的報文后,再將其中的數(shù)據(jù)取出來;如果收到的報文的序號較期望收到的數(shù)據(jù)報文序號小,則直接將該報文丟棄。
對于網(wǎng)絡(luò)故障中的數(shù)據(jù)出錯,可以采用校驗和來檢測。對傳輸?shù)臄?shù)據(jù)報文計算校驗和并存放到數(shù)據(jù)報文后,目標(biāo)節(jié)點接收到報文后計算校驗和,如果和報文中的校驗和一致,則報文數(shù)據(jù)是正確的,否則報文數(shù)據(jù)出錯,要求源節(jié)點重傳數(shù)據(jù)。
2.3 磁盤故障檢測和恢復(fù)
對于磁盤損壞故障,節(jié)點如果發(fā)現(xiàn)其上的磁盤無法進(jìn)行讀寫操作,分布式系統(tǒng)可以采用出錯節(jié)點向管理節(jié)點報告磁盤出錯的方法檢測錯誤。管理節(jié)點將該節(jié)點標(biāo)記為不可用狀態(tài),然后將該節(jié)點中的數(shù)據(jù)和服務(wù)遷移到其他正常工作的節(jié)點上,保證分布式系統(tǒng)可用性。
對于磁盤數(shù)據(jù)錯誤故障,可以采用對數(shù)據(jù)計算校驗和的方法檢測。如果節(jié)點對數(shù)據(jù)計算校驗和出錯,那么節(jié)點可以將錯誤報告管理節(jié)點,管理節(jié)點首先刪除該節(jié)點上的錯誤數(shù)據(jù),之后從其他節(jié)點上將備份的數(shù)據(jù)恢復(fù)到錯誤節(jié)點上,這樣數(shù)據(jù)錯誤就被更正了。
3 結(jié) 論
分布式系統(tǒng)中采用了大量的PC服務(wù)器,這些服務(wù)器性價比優(yōu)異,但是存在故障率高的問題,為了保證分布式系統(tǒng)持續(xù)對外提供服務(wù)不中斷,分布式系統(tǒng)必須能夠在軟件層面自動檢測系統(tǒng)中節(jié)點出現(xiàn)的故障并自動恢復(fù)。本文介紹的分布式系統(tǒng)中故障的類型以及檢測和恢復(fù)方法都是實踐中可以采用的方法。
參考文獻(xiàn)
[1]崔星燦,禹曉輝,劉 洋,呂朝陽.分布式流處理技術(shù)綜述.計算機(jī)研究與發(fā)展,2015,12.
[2]慈 松,于 冰,韓言妮.虛擬網(wǎng)絡(luò)的服務(wù)遷移技術(shù)研究.中興通訊技術(shù),2014,6.
[3]陳 誠,陳海濤.一種自適應(yīng)的容災(zāi)系統(tǒng)心跳檢測算法.計算機(jī)工程與科學(xué),2008,05.
[4]趙麗莉,孫 偉.TCP協(xié)議亂序數(shù)據(jù)包處理算法綜述.軟件工程師,2010,7.
收稿日期:2018-10-13