吳亞鳳(1975-)女,陜西渭南人,碩士,中國(guó)勞動(dòng)關(guān)系學(xué)院基礎(chǔ)部講師,主要從事應(yīng)用數(shù)學(xué)方面的研究。
摘要:本文分析了目前工業(yè)計(jì)算機(jī)控制系統(tǒng)中服務(wù)器冗余控制存在的問(wèn)題,提出一種高可靠的服務(wù)器冗余控制算法模型,并給出了該算法的詳細(xì)內(nèi)容及其實(shí)現(xiàn)。
關(guān)鍵詞:計(jì)算機(jī)控制;服務(wù)器;冗余控制;算法模型
Abstract: This paper analyzes server redundant control problems in industrial computer control system. It presents a highly reliable algorithmic model for the servers’ redundant control. Moreover, it analyzes the detailed content of the algorithm, and describes its realization.
Key words: Computer Control; Server; Redundancy; Algorithmic Model
1 問(wèn)題的提出
在工業(yè)計(jì)算機(jī)控制應(yīng)用領(lǐng)域,為了提高系統(tǒng)的可靠性以及可用性,經(jīng)常采用冗余服務(wù)器架構(gòu),即設(shè)置兩臺(tái)互為冗余的服務(wù)器,工作在一用一備模式下,為網(wǎng)絡(luò)上的其他節(jié)點(diǎn)提供各類(lèi)數(shù)據(jù)服務(wù),并且常常設(shè)置冗余網(wǎng)絡(luò),進(jìn)一步提高系統(tǒng)的可用性。可以實(shí)現(xiàn)當(dāng)存在單個(gè)服務(wù)器節(jié)點(diǎn)故障或者單個(gè)網(wǎng)絡(luò)故障時(shí),系統(tǒng)的可用性不降低。系統(tǒng)結(jié)構(gòu)如圖1所示[1]。
這樣的系統(tǒng)結(jié)構(gòu)一般都會(huì)存在如下幾個(gè)問(wèn)題,難于解決:
(1)服務(wù)器A、B機(jī)的主從控制機(jī)制復(fù)雜,常會(huì)出現(xiàn)“雙主”、“雙從”或者來(lái)回切換(“打乒乓球”現(xiàn)象),使得系統(tǒng)可靠性降低。為了解決這個(gè)問(wèn)題,有些系統(tǒng)采用硬件方式給兩臺(tái)服務(wù)器之間設(shè)置硬件切換電路板,保證不出現(xiàn)這個(gè)問(wèn)題,但又存在成本以及切換電路可靠性的問(wèn)題;
(2)兩臺(tái)服務(wù)器的數(shù)據(jù)同步是冗余控制的難點(diǎn),特別是在雙機(jī)進(jìn)行各種狀態(tài)轉(zhuǎn)換(主機(jī)、從機(jī)、單機(jī)、故障/停機(jī))過(guò)程中發(fā)生的數(shù)據(jù)更新或者來(lái)自操作站的控制命令時(shí),如何保證雙機(jī)數(shù)據(jù)嚴(yán)格的一致性以及不丟失數(shù)據(jù)是非常困難的;
(3)系統(tǒng)雙網(wǎng)絡(luò)結(jié)構(gòu)使得某些情況下難于控制,如兩臺(tái)服務(wù)器的交叉網(wǎng)絡(luò)故障,使得雙機(jī)互不能訪問(wèn)對(duì)方,從而造成系統(tǒng)不可用[2]。
2 冗余控制模型
本文提出一種基于圖1的改良網(wǎng)絡(luò)模型,在兩個(gè)服務(wù)器上各增加一塊以太網(wǎng)卡,形成第三條網(wǎng)絡(luò)(如圖2所示),通過(guò)合適的控制算法,使其達(dá)到準(zhǔn)確檢測(cè)、正確切換、無(wú)擾控制、不丟數(shù)據(jù)的目的,以滿足工業(yè)控制場(chǎng)合高可靠性與高可用性要求。
該冗余控制模型如圖3所示,自下到上依次是狀態(tài)診斷、主從控制、數(shù)據(jù)服務(wù)以及冗余控制四層結(jié)構(gòu),下層為上層提供服務(wù),上層的執(zhí)行依賴于下層的運(yùn)算結(jié)果。
它們的功能如下:
狀態(tài)診斷:為服務(wù)器提供自己和對(duì)方準(zhǔn)確的網(wǎng)絡(luò)以及關(guān)鍵進(jìn)程狀態(tài);
主從控制:根據(jù)自己和對(duì)方的狀態(tài),按照服務(wù)器切換狀態(tài)機(jī)進(jìn)行主從切換;
數(shù)據(jù)服務(wù):客戶機(jī)向服務(wù)器進(jìn)行數(shù)據(jù)請(qǐng)求,以及服務(wù)器的數(shù)據(jù)服務(wù)過(guò)程;
冗余控制:兩臺(tái)服務(wù)器之間的數(shù)據(jù)同步過(guò)程。
3 服務(wù)器的狀態(tài)診斷
服務(wù)器狀態(tài)監(jiān)測(cè)包括自我監(jiān)測(cè)、狀態(tài)廣播、監(jiān)聽(tīng)對(duì)方、監(jiān)聽(tīng)客戶機(jī)四個(gè)部分。服務(wù)器監(jiān)測(cè)自己的三個(gè)網(wǎng)絡(luò)的好壞、監(jiān)測(cè)自身關(guān)鍵進(jìn)程的運(yùn)行狀態(tài),并將這些狀態(tài)填入自身狀態(tài)字中,然后將自身狀態(tài)字通過(guò)全部網(wǎng)卡廣播出去;并一直監(jiān)視來(lái)自對(duì)方服務(wù)器的廣播信息包以及來(lái)自其他客戶機(jī)的異常監(jiān)聽(tīng)反饋,根據(jù)它們來(lái)填充自己狀態(tài)字、計(jì)算對(duì)方服務(wù)器的狀態(tài),并作為服務(wù)器主從控制模塊的輸入。
作為客戶機(jī),一般情況下,它只監(jiān)聽(tīng)來(lái)自兩臺(tái)服務(wù)器的廣播信息,只有在以下幾種異常情況下,它才給予回復(fù),用于通知兩臺(tái)服務(wù)器。
(1)兩臺(tái)服務(wù)器均聲稱自己看不見(jiàn)對(duì)方;
(2)兩臺(tái)服務(wù)器運(yùn)行狀態(tài)沖突(將雙主、雙從、雙單機(jī)三種情況均視為沖突)。
對(duì)于第一種情況,這是因?yàn)閮膳_(tái)服務(wù)器之間的網(wǎng)絡(luò)存在交叉故障問(wèn)題,兩臺(tái)服務(wù)器之間失去了聯(lián)系;第二種情況在系統(tǒng)被割裂為獨(dú)立的兩個(gè)子系統(tǒng)并在恢復(fù)的瞬間會(huì)出現(xiàn),以及為了防止程序BUG等意外情況所做的容錯(cuò)設(shè)計(jì)。客戶機(jī)回復(fù)狀態(tài)字如圖5所示。
由以上的過(guò)程,可以對(duì)兩臺(tái)服務(wù)器關(guān)鍵進(jìn)程、各自的網(wǎng)絡(luò)、客戶機(jī)網(wǎng)絡(luò)做出準(zhǔn)確的判斷,只要當(dāng)系統(tǒng)被割裂為完全獨(dú)立的兩個(gè)子系統(tǒng)時(shí),系統(tǒng)的運(yùn)行模式轉(zhuǎn)為兩個(gè)獨(dú)立系統(tǒng),如圖6所示。
只有當(dāng)兩個(gè)服務(wù)器的NETA和B交叉故障、NETC故障、每臺(tái)客戶機(jī)均有一個(gè)網(wǎng)絡(luò)故障的情況下,才會(huì)出現(xiàn)被割裂為完全獨(dú)立的兩個(gè)子系統(tǒng)的情況。但是故障恢復(fù)后,系統(tǒng)可以進(jìn)行數(shù)據(jù)的合并,保證不丟失數(shù)據(jù)。
4 服務(wù)器的主從控制
服務(wù)器的狀態(tài)有四種:主機(jī)、備用機(jī)、故障、單機(jī)模式。主機(jī)就是該服務(wù)器在兩臺(tái)冗余的服務(wù)器中起著主導(dǎo)地位,處于工作模式,則另外一臺(tái)服務(wù)器一定也是運(yùn)行狀態(tài),并且處于備用狀態(tài)(備用機(jī))或者故障狀態(tài);單機(jī)模式就是網(wǎng)絡(luò)中只存在一臺(tái)服務(wù)器處于運(yùn)行狀態(tài),是獨(dú)立運(yùn)行的。這四種狀態(tài)是隨著網(wǎng)絡(luò)狀態(tài)、服務(wù)器關(guān)鍵進(jìn)程狀態(tài)、服務(wù)器的配置等情況的不同而動(dòng)態(tài)變化的。
服務(wù)器的主從切換控制就是控制自己的運(yùn)行狀態(tài)在上述這四種狀態(tài)中動(dòng)態(tài)切換,它是在服務(wù)器狀態(tài)診斷的基礎(chǔ)上執(zhí)行的,并且兩臺(tái)服務(wù)器的狀態(tài)切換是獨(dú)立進(jìn)行的,切換按照?qǐng)D7所示的服務(wù)器狀態(tài)機(jī)進(jìn)行。
服務(wù)器狀態(tài)機(jī)中的轉(zhuǎn)換條件如表1,表中轉(zhuǎn)換前狀態(tài)以及轉(zhuǎn)換后狀態(tài)請(qǐng)參考圖7。
序號(hào)轉(zhuǎn)換條件:
1 收不到對(duì)方服務(wù)器的狀態(tài)信息,并且在預(yù)設(shè)的時(shí)間內(nèi)收不到客戶機(jī)的異常回復(fù)
2 同(1)
3 本機(jī)故障恢復(fù),并且具備(1)
4 收到對(duì)方服務(wù)器狀態(tài)信息,本機(jī)為A機(jī)
5 收到對(duì)方服務(wù)器狀態(tài)信息,本機(jī)為B機(jī)
6 本機(jī)關(guān)鍵進(jìn)程故障
7 本機(jī)故障恢復(fù),并收到對(duì)方服務(wù)器聲稱自己故障
8 本機(jī)關(guān)鍵進(jìn)程故障
9 本機(jī)關(guān)鍵進(jìn)程故障
10 本機(jī)故障恢復(fù),并收到對(duì)方服務(wù)器聲稱自己為主機(jī)
11 收到操作人員的切換命令
12 同(11)
服務(wù)器各自對(duì)自身的狀態(tài)進(jìn)行計(jì)算與控制,還需要將其狀態(tài)回填至圖4所示的狀態(tài)字中,以使得網(wǎng)絡(luò)上其他節(jié)點(diǎn)獲得該信息。
5 系統(tǒng)數(shù)據(jù)服務(wù)
服務(wù)器向網(wǎng)絡(luò)上的客戶機(jī)提供各類(lèi)數(shù)據(jù)服務(wù),包括為客戶機(jī)發(fā)布數(shù)據(jù)(或者服務(wù)器的控制命令輸出)和接收客戶機(jī)的命令消息(或者服務(wù)器的數(shù)據(jù)更新),這兩類(lèi)數(shù)據(jù)服務(wù)從服務(wù)器的角度看就是輸出數(shù)據(jù)和輸入數(shù)據(jù)。對(duì)于輸出數(shù)據(jù),僅由主機(jī)(單機(jī))對(duì)外提供;對(duì)于輸入數(shù)據(jù),則服務(wù)器處于任何狀態(tài)下均要處理。其消息傳遞模型如圖8所示。
作為客戶機(jī)而言,它向服務(wù)器請(qǐng)求數(shù)據(jù)或者發(fā)送命令時(shí),需要同時(shí)向兩臺(tái)服務(wù)器發(fā)送,并給消息進(jìn)行編號(hào);接收數(shù)據(jù)時(shí),僅接收主機(jī)(或者單機(jī))服務(wù)器的數(shù)據(jù)。
服務(wù)器處理數(shù)據(jù)時(shí),需要記錄已經(jīng)處理的消息的編號(hào)或者處理動(dòng)作計(jì)數(shù)器,以便后續(xù)數(shù)據(jù)冗余同步控制的執(zhí)行。
6 數(shù)據(jù)冗余控制
服務(wù)器的冗余控制是為了保證兩臺(tái)服務(wù)器上的數(shù)據(jù)的一致性、完整性。其手段是同步控制,即保證兩臺(tái)服務(wù)器上的數(shù)據(jù)的源頭一致,處理步調(diào)一致,以達(dá)到其數(shù)據(jù)的完全一致。
服務(wù)器要處理的數(shù)據(jù)根據(jù)數(shù)據(jù)源以及對(duì)數(shù)據(jù)加工需求的不同可以分為如下幾類(lèi):(1)僅從外部數(shù)據(jù)源獲取數(shù)據(jù),并更新本機(jī)的數(shù)據(jù);(2)僅為外部需求者提供數(shù)據(jù);(3)根據(jù)外部需求做出動(dòng)作;(4)與外部無(wú)關(guān)的數(shù)據(jù)處理過(guò)程。對(duì)于不同類(lèi)型的數(shù)據(jù)處理,其冗余控制不同。對(duì)于1、3類(lèi),需要冗余同步;對(duì)于2、4類(lèi),不需要冗余同步控制。
數(shù)據(jù)冗余同步分為兩種:全部同步、增量同步。全部同步是將主機(jī)上的數(shù)據(jù)庫(kù)全部復(fù)制至備用機(jī),用于服務(wù)器由故障、單機(jī)轉(zhuǎn)為備用機(jī)和備用機(jī)啟動(dòng)過(guò)程中;增量同步是將主機(jī)上的部分?jǐn)?shù)據(jù)復(fù)制至備用機(jī),用于雙機(jī)正常工作中的主機(jī)為從機(jī)同步過(guò)程中。
全部同步處理比較簡(jiǎn)單;增量同步比較復(fù)雜,需要記錄哪些內(nèi)容需要同步以及做哪些數(shù)據(jù)備份等。雙機(jī)在工作過(guò)程中,各自維護(hù)一個(gè)數(shù)據(jù)處理ID堆棧和計(jì)數(shù)器堆棧,主機(jī)定周期的通知從機(jī)自己處理的ID和計(jì)數(shù)器,從機(jī)檢查自己的處理是否與其一致,如不一致,則向主機(jī)發(fā)出數(shù)據(jù)備份請(qǐng)求,主機(jī)再向從機(jī)發(fā)出備份數(shù)據(jù),并矯正數(shù)據(jù)處理ID和計(jì)數(shù)器堆棧,完成一次增量同步過(guò)程,如圖9所示。
7 小結(jié)
該冗余算法設(shè)計(jì)采用分層模式,結(jié)構(gòu)清晰明了,層間耦合度小,易于實(shí)現(xiàn)[3]。已經(jīng)在SCADA系統(tǒng)中實(shí)現(xiàn)并得以驗(yàn)證,有較高的可靠性,并提高系統(tǒng)的可用性,能較好的解決工業(yè)計(jì)算機(jī)控制系統(tǒng)的服務(wù)器冗余問(wèn)題。
參考文獻(xiàn):
[1] 王常力等. 分布式控制系統(tǒng)(DCS)設(shè)計(jì)與應(yīng)用實(shí)例[M]. 北京: 電子工業(yè)出版社, 2004. 22~31.
[2] 夏士兵等. 變電站SCADA系統(tǒng)雙服務(wù)器無(wú)擾動(dòng)切換算法[J]. 電力系統(tǒng)自動(dòng)化, 2006, 30(14): 58~60.
[3] 柯奈漢等. 程序設(shè)計(jì)實(shí)踐[M]. 北京: 機(jī)械工業(yè)出版社, 2000. 23~65
摘自《自動(dòng)化博覽》2010年第十二期