當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]硬件冗余可以極大地提高計算機應(yīng)用系統(tǒng)的可用性,然而,一旦關(guān)鍵硬件出現(xiàn)故障或數(shù)據(jù)庫宕機,正在進行中的業(yè)務(wù)流程通常會中斷。探討了一種如何實現(xiàn)應(yīng)用系統(tǒng)高可用性的軟件架構(gòu)的設(shè)計方案,以彌補純硬件冗余應(yīng)用系統(tǒng)的不足。

在業(yè)內(nèi),計算機應(yīng)用系統(tǒng)的可用性定義為計算機應(yīng)用系統(tǒng)保持正常運行時間的百分比,通常用表1所示的“9”的個數(shù)來劃分可用性的類型。

通常,硬件冗余(容錯計算機、雙機或多機集群、磁盤陣列、SAN等)、數(shù)據(jù)復(fù)制、合理的災(zāi)難備份和恢復(fù)策略都可以極大地提高計算機應(yīng)用系統(tǒng)的可用性。正因為如此,當(dāng)前,對于計算機應(yīng)用系統(tǒng)的高可用性、業(yè)務(wù)的可持續(xù)性要求,業(yè)內(nèi)通常以硬件系統(tǒng)的高可用性來應(yīng)對或代替。常見的解決方案是雙機(或多機)集群方案或直接采用容錯計算機來保障系統(tǒng)的高可用性,應(yīng)用軟件的設(shè)計和開發(fā)往往僅注重業(yè)務(wù)流程的分析和過程控制。在這種完全依賴硬件來保障整個系統(tǒng)的可用性的系統(tǒng)里,一旦關(guān)鍵硬件出現(xiàn)故障或數(shù)據(jù)庫宕機,正在進行中的業(yè)務(wù)流程(如需較長執(zhí)行時間的事務(wù)處理、后臺批處理過程等)必然會中斷,這是因為雙機切換也需要時間。對此,應(yīng)用軟件本身并無多少作為,該類業(yè)務(wù)必須等待系統(tǒng)重新恢復(fù)后全部或部分重做。

 本文以基于大型數(shù)據(jù)庫的應(yīng)用系統(tǒng)為例,從“軟件容錯”設(shè)計的概念出發(fā),參考“分布式”數(shù)據(jù)庫結(jié)構(gòu)設(shè)計,以“系統(tǒng)服務(wù)總線”為核心,給出了一種可行的高可用性軟件架構(gòu)的設(shè)計方案,可以極大地提高應(yīng)用軟件的可用性和業(yè)務(wù)系統(tǒng)的可持續(xù)性。無論是傳統(tǒng)的C/S架構(gòu),還是近年來流行的B/S架構(gòu),本文中給出的設(shè)計方案都有一定的參考意義。

1 軟件結(jié)構(gòu)模型

任何基于大型數(shù)據(jù)庫的應(yīng)用系統(tǒng),都可以抽象為對數(shù)據(jù)的“讀”和“寫”操作。至于客戶端如何展現(xiàn)“讀”到的數(shù)據(jù),以及“客戶端”與“服務(wù)端”基于何種通信協(xié)議通信,不在本文討論之列。

軟件結(jié)構(gòu)的設(shè)計其實就是針對“讀”和“寫”的一系列流程的設(shè)計。如何最大限度地保證系統(tǒng)中的所有“硬件”和“軟件”協(xié)同工作,正確完成每一次“讀”和“寫”的操作,也就是對系統(tǒng)“高可靠性”和“高可用性”的要求。

圖1是基于“軟件容錯”和“分布式數(shù)據(jù)庫系統(tǒng)”的原理,并參照了計算機“總線”的工作原理給出的一種基于分布式數(shù)據(jù)庫或文件系統(tǒng)的高可用性的軟件架構(gòu)設(shè)計方案。系統(tǒng)采用3層架構(gòu):客戶端、中間應(yīng)用層和數(shù)據(jù)庫層。


2 系統(tǒng)設(shè)計

2.1 數(shù)據(jù)庫配置

為了更清楚地闡述本文的設(shè)計方案,先對數(shù)據(jù)庫的配置及其功能進行描述。本系統(tǒng)中,數(shù)據(jù)庫按角色可劃分為如下三類數(shù)據(jù)庫:控制數(shù)據(jù)庫(COTROLL DB)、日志數(shù)據(jù)庫(LOG DB)、業(yè)務(wù)數(shù)據(jù)庫(BUS DB_N)。

2.1.1 控制數(shù)據(jù)庫

控制數(shù)據(jù)庫也可以是一個或多個系統(tǒng)控制(參數(shù))文件。它存放要訪問的目標(biāo)數(shù)據(jù)庫的節(jié)點(N)、端口、用戶、文件頭、表、視圖等信息;存放對節(jié)點、業(yè)務(wù)數(shù)據(jù)庫、表或視圖的授權(quán)或訪問控制信息;目標(biāo)數(shù)據(jù)庫(或文件)的當(dāng)前狀態(tài)(聯(lián)機/脫機、忙/空閑等);目標(biāo)數(shù)據(jù)庫中的表或視圖的當(dāng)前狀態(tài)(聯(lián)機/脫機、忙/空閑、加鎖/解鎖等)。

2.1.2 日志數(shù)據(jù)庫

日志數(shù)據(jù)庫獨立于業(yè)務(wù)數(shù)據(jù)庫之外,用于記錄客戶端節(jié)點信息、請求時刻和發(fā)來的所有請求的原始內(nèi)容,但不做業(yè)務(wù)流程相關(guān)的處理、運算等。記錄每次數(shù)據(jù)操作分配的唯一的“事件號”(EVENT_ID)。對每一次客戶端的“請求”,“系統(tǒng)服務(wù)總線”(SYSSRV)會分配唯一的標(biāo)識符號,可以定義為有一定意義的字符串,比如,“當(dāng)前時刻+流水號”。以上信息可以被壓縮、打包、加密后存放,以記錄格式保存于數(shù)據(jù)庫的表或文件中。它可以設(shè)計為數(shù)據(jù)庫中的一個或多個表,也可以是文件格式。

2.1.3 業(yè)務(wù)數(shù)據(jù)庫

業(yè)務(wù)數(shù)據(jù)庫記錄所有業(yè)務(wù)相關(guān)的數(shù)據(jù)信息。所有業(yè)務(wù)數(shù)據(jù)庫的相關(guān)業(yè)務(wù)邏輯的數(shù)據(jù)結(jié)構(gòu)相同,即,N個節(jié)點的業(yè)務(wù)數(shù)據(jù)庫中與業(yè)務(wù)模式相關(guān)的表、視圖、過程或其他程序設(shè)置相同。
需要特別指出的是:

(1)控制數(shù)據(jù)庫、日志數(shù)據(jù)庫和業(yè)務(wù)數(shù)據(jù)庫可以是不同數(shù)據(jù)庫廠家或品牌的產(chǎn)品。比如,日志數(shù)據(jù)庫可以采用低端的數(shù)據(jù)庫產(chǎn)品或開源數(shù)據(jù)庫系統(tǒng),業(yè)務(wù)數(shù)據(jù)庫可以采用高端的大型數(shù)據(jù)庫產(chǎn)品。

(2)控制數(shù)據(jù)庫、日志數(shù)據(jù)庫和業(yè)務(wù)數(shù)據(jù)庫在物理上和邏輯上是可以相互隔離的,這可以極大地提高系統(tǒng)的整體安全性。目標(biāo)數(shù)據(jù)庫和要訪問的表或視圖對客戶端來說是“不可見”的,由控制數(shù)據(jù)庫動態(tài)定義和控制。

 (3)所有類別的數(shù)據(jù)庫在物理上位于一個或多個節(jié)點上,即節(jié)點N>=1;任意一個節(jié)點N上建有一個或多個業(yè)務(wù)數(shù)據(jù)庫(邏輯數(shù)據(jù)庫>=1);任意一個節(jié)點是一個完整的、可獨立工作的計算機。根據(jù)性能要求,可以是高性能PC機、PC服務(wù)器、小型機、集群或超級計算機,或是它們的“混合體”;任意一個節(jié)點是指定網(wǎng)絡(luò)中的一個指定節(jié)點。

2.2 應(yīng)用層設(shè)計

中間應(yīng)用層由5個后臺進程構(gòu)成:(1)系統(tǒng)服務(wù)總線(SYSSRV);(2)數(shù)據(jù)庫寫進程(DBWRT_N);(3)數(shù)據(jù)庫讀進程(DBRED_N);(4)數(shù)據(jù)庫在線恢復(fù)進程(DBRCY);(5)日志檢查進程(LOGCHK)。

2.2.1 系統(tǒng)服務(wù)總線

這是一個后臺監(jiān)聽、分發(fā)、調(diào)度總進程。設(shè)計目標(biāo)具有一定的“自我修復(fù)”和“自我復(fù)制”動能。它可以根據(jù)負(fù)載情況,自我復(fù)制或開啟子進程響應(yīng)新的負(fù)載;可以動態(tài)配置可服務(wù)的節(jié)點或客戶端;可以為特定節(jié)點或客戶端指定專用進程;它通過“DBWRT”和“DBRED”“讀/寫”日志數(shù)據(jù)庫或日志文件。

2.2.2 寫進程

寫進程負(fù)責(zé)向所有節(jié)點寫數(shù)據(jù)。它可以配置成多進程/單進程模式;多進程模式,指對應(yīng)每個業(yè)務(wù)數(shù)據(jù)庫N都有獨立的“寫”進程;單進程模式,指對應(yīng)多個業(yè)務(wù)數(shù)據(jù)庫只有一個主進程,主進程開啟多個線程提供“寫”服務(wù)。

2.2.3 讀進程

讀進程負(fù)責(zé)向所有節(jié)點讀數(shù)據(jù),它可以配置成多進程/單進程模式。多進程模式指對應(yīng)每個業(yè)務(wù)數(shù)據(jù)庫N都有獨立的“讀”進程,單進程模式指對應(yīng)多個業(yè)務(wù)數(shù)據(jù)庫只有一個主進程,主進程開啟多個線程提供“讀”服務(wù)。

根據(jù)需要,讀進程可以配置成:向所有在線節(jié)點并發(fā)讀數(shù)據(jù),返回最快的結(jié)果集,拋棄其他的結(jié)果集,并中斷其他讀進程;也可以配置成:隨機讀某個節(jié)點的數(shù)據(jù),如果失敗或超時,則再隨機讀余下的在線節(jié)點,直到“讀”成功或失敗;還可以配置成向所有節(jié)點順序讀數(shù)據(jù),過程類似上面“隨機讀”。

以上“讀寫”業(yè)務(wù)數(shù)據(jù)庫的進程,設(shè)計上支持多種數(shù)據(jù)庫訪問接口,針對“表”或“視圖”提供統(tǒng)一格式的、標(biāo)準(zhǔn)的、動態(tài)的SQL數(shù)據(jù)操作接口和方法,完成對數(shù)據(jù)庫中表或視圖的增、刪、改、查和批處理操作。它們可以設(shè)計為數(shù)據(jù)庫中的存儲過程,也可以是C++,Java程序的API或混合體。

2.2.4 數(shù)據(jù)庫在線恢復(fù)進程

該進程負(fù)責(zé)檢查全部或部分節(jié)點數(shù)據(jù)庫(包括所有授權(quán)控制數(shù)據(jù)庫、業(yè)務(wù)數(shù)據(jù)庫和日志數(shù)據(jù)庫)或文件的工作狀態(tài);檢查數(shù)據(jù)庫或文件表中數(shù)據(jù)的一致性;將以上檢查結(jié)果寫入日志數(shù)據(jù)庫(或日志文件)。

當(dāng)某個業(yè)務(wù)數(shù)據(jù)庫中的表寫入失敗時,它負(fù)責(zé)從“日志數(shù)據(jù)庫”的表或日志文件中讀出原始數(shù)據(jù),接著寫入出現(xiàn)問題的業(yè)務(wù)數(shù)據(jù)庫的表中,并檢查結(jié)果?;驈钠渌?jié)點的數(shù)據(jù)庫中讀相關(guān)數(shù)據(jù)并寫入到出現(xiàn)問題的業(yè)務(wù)數(shù)據(jù)庫的表中。

接收外部命令,根據(jù)“時間點”或“事件號”從特定時刻、特定數(shù)據(jù)庫(包括日志數(shù)據(jù)庫)、特定表恢復(fù)數(shù)據(jù)到特定目標(biāo)數(shù)據(jù)庫的表或文件。

2.2.5 日志檢查進程

該進程負(fù)責(zé)讀、寫日志文件,檢查數(shù)據(jù)操作結(jié)果的一致性。如果不一致,則報告給“系統(tǒng)服務(wù)總線”,將問題數(shù)據(jù)庫或數(shù)據(jù)庫中的表、視圖設(shè)置為“離線”狀態(tài)。

3系統(tǒng)實現(xiàn)

3.1系統(tǒng)初始化

啟動配置好的后臺進程即完成系統(tǒng)初始化過程。

3.2 數(shù)據(jù)“寫”流程

數(shù)據(jù)“寫”流程的主要步驟如下:

(1)客戶端通過給定協(xié)議(或混合多種通信協(xié)議)向后臺“系統(tǒng)服務(wù)總線”發(fā)送“寫”請求。

(2)激活“數(shù)據(jù)庫寫進程”,將客戶端的“請求”寫入“日志數(shù)據(jù)庫”(或日志文件),并分配一個唯一的“事件號”。

(3)“系統(tǒng)服務(wù)總線”查詢“授權(quán)/控制數(shù)據(jù)庫”(或/配置文件)得到客戶端請求訪問的數(shù)據(jù)存放的目標(biāo)數(shù)據(jù)庫(或文件)節(jié)點N(或文件存放的節(jié)點N)、端口、用戶、表、文件頭等信息。節(jié)點N可以是多個,即節(jié)點N>=1。

(4)“系統(tǒng)服務(wù)總線”向N個“數(shù)據(jù)庫寫進程”發(fā)送數(shù)據(jù)“寫”訪問請求,并得到各節(jié)點的返回結(jié)果集。

(5)只要有1個節(jié)點寫入成功,“系統(tǒng)服務(wù)總線”就將寫入成功的標(biāo)志發(fā)回客戶端;“數(shù)據(jù)庫寫進程”將各節(jié)點的返回結(jié)果狀態(tài)寫入“日志數(shù)據(jù)庫”(或日志文件)中。

(6)“日志監(jiān)控”查詢“日志數(shù)據(jù)庫”(或日志文件),比較N個節(jié)點的寫入狀態(tài)。如發(fā)現(xiàn)寫錯誤、失敗、超時等狀態(tài),則將該“業(yè)務(wù)數(shù)據(jù)庫”(或文件、表、視圖)標(biāo)志為“非正常聯(lián)機數(shù)據(jù)庫”(或文件、表、視圖不可用)。

(7)激活“數(shù)據(jù)在線恢復(fù)進程”,進程為“非正常聯(lián)機數(shù)據(jù)庫”,則執(zhí)行數(shù)據(jù)庫數(shù)據(jù)“同步”。在線同步恢復(fù)如失敗,則將該“數(shù)據(jù)庫”標(biāo)志為“需要DBA維護”的類別,留待DBA或軟件維護工程師處理。

3.3 數(shù)據(jù)“讀”流程

數(shù)據(jù)“讀”流程的主要步驟如下:
(1)客戶端通過給定協(xié)議(或混合多種通信協(xié)議)向后臺“系統(tǒng)服務(wù)總線”發(fā)送“讀”請求。

(2)激活“寫進程”,將客戶端的“請求”寫入“日志數(shù)據(jù)庫”(或日志文件),并分配一個唯一的“事件號”。

 (3)“系統(tǒng)服務(wù)總線”查詢“授權(quán)/控制數(shù)據(jù)庫”(或/配置文件)得到客戶端請求訪問的數(shù)據(jù)存放的目標(biāo)數(shù)據(jù)庫節(jié)點N(或文件存放的節(jié)點N)、端口、用戶、表等信息。節(jié)點N可以是多點,即節(jié)點N>=1。

(4)“系統(tǒng)服務(wù)總線”查詢“授權(quán)/控制數(shù)據(jù)庫”(或/配置文件)得到可用的、空閑的目標(biāo)數(shù)據(jù)庫節(jié)點N(或文件存放的節(jié)點N)。

(5)激活“讀進程”(或隨機、或順序)向N個節(jié)點的“業(yè)務(wù)數(shù)據(jù)庫”(或文件)發(fā)送數(shù)據(jù)“讀”訪問請求,并得到各節(jié)點的返回結(jié)果集。

(6)“系統(tǒng)服務(wù)總線”將最快返回的結(jié)果集發(fā)回客戶端;拋棄其他結(jié)果集,中斷其他讀進程。
在本系統(tǒng)的設(shè)計和實現(xiàn)中,由于采用了“分布式”數(shù)據(jù)庫或文件系統(tǒng)部署,只要N個節(jié)點中至少有一個節(jié)點的“業(yè)務(wù)數(shù)據(jù)庫”正常工作,因為一個或幾個“業(yè)務(wù)數(shù)據(jù)庫”系統(tǒng)(或節(jié)點硬件)故障所引起的業(yè)務(wù)系統(tǒng)的不可持續(xù)性理論上將可以完全避免,因而提高了系統(tǒng)的“容錯”性。

由于N個數(shù)據(jù)庫同時在線,且節(jié)點是否可用、空閑等狀態(tài)可實時監(jiān)控,這為特定業(yè)務(wù)快速訪問和獨享訪問提供了先決條件。如可以指定某特定“業(yè)務(wù)數(shù)據(jù)庫”僅為某個或幾個特定客戶端服務(wù)提供“讀”訪問。

因為設(shè)計了統(tǒng)一、標(biāo)準(zhǔn)的增、刪、改、查的過程方法或API,前端開發(fā)人員甚至不必寫任何SQL語句就可以完成對數(shù)據(jù)庫中表或視圖的操作,可以大大地縮短編程和調(diào)試時間。

需要指出的是,雖然“系統(tǒng)服務(wù)總線”具有“自我修復(fù)”和“自我復(fù)制”的特點,但因為“節(jié)點”硬件故障或“授權(quán)/控制數(shù)據(jù)庫”(或/配置文件)或“日志數(shù)據(jù)庫”故障而引起的全系統(tǒng)不可用依然存在,因此,建議該節(jié)點采用性能好、可靠性高的中、高端服務(wù)器。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉