王青松 王光輝 朱林
摘 ?要: 軟件可靠性對(duì)于軟件系統(tǒng)來說是非常重要的質(zhì)量屬性。在項(xiàng)目實(shí)施過程中,保證應(yīng)用軟件具備穩(wěn)定運(yùn)行的能力、保障應(yīng)用軟件的可靠性是軟件實(shí)施項(xiàng)目首先需要考慮的因素。在文聯(lián)人事工作平臺(tái)項(xiàng)目建設(shè)過程中通過采用數(shù)據(jù)庫(kù)雙機(jī)備份、改進(jìn)的防衛(wèi)式程序設(shè)計(jì)、相同功能多種設(shè)計(jì)實(shí)現(xiàn)思路、負(fù)載均衡集群的方式對(duì)提高軟件系統(tǒng)的可靠性,對(duì)平臺(tái)上線后平穩(wěn)運(yùn)行起到了非常重要的作用。
關(guān)鍵詞: 軟件可靠性;防衛(wèi)式設(shè)計(jì);雙機(jī)備份;多版本;負(fù)載均衡
中圖分類號(hào): TP3 ? ?文獻(xiàn)標(biāo)識(shí)碼: A ? ?DOI:10.3969/j.issn.1003-6970.2020.06.052
本文著錄格式:王青松,王光輝,朱林. 軟件可靠性設(shè)計(jì)的應(yīng)用[J]. 軟件,2020,41(06):253256
【Abstract】: Software reliability is a very important quality attribute for software system. How to improve reliability ?of application is the first factor when project is developing. Ability of running steadily is essential to computer application. During the construction of the personnel platform of CFLAC, database backup, Improved defensive programming, multiple design and implementation ideas of the same function, load balancing cluster are used, which is important to the reliability of this software system. The platform performs smoothly since it is online.
【Key words】: Software reliability; Defensive programming; Dual computer backup; Multi version; Load balancing
0 ?引言
軟件可靠性(software reliability)是軟件系統(tǒng)在規(guī)定的時(shí)間和既定環(huán)境條件下按照需求要求完成規(guī)定功能的能力,也就是系統(tǒng)無(wú)故障運(yùn)行的概率[1]。規(guī)定的時(shí)間是指軟件上線運(yùn)行后實(shí)際運(yùn)行的時(shí)間;既定的環(huán)境條件是指直接或間接與軟件運(yùn)行相關(guān)環(huán)境及條件;規(guī)定功能是指按照用戶需求提供給定的服務(wù),軟件產(chǎn)品所必須具備的功能。軟件可靠性不但與軟件存在的缺陷和(或)差錯(cuò)有關(guān),而且與系統(tǒng)輸入和系統(tǒng)使用有關(guān)。提高計(jì)算機(jī)應(yīng)用系統(tǒng)可靠性的技術(shù)可以分為避錯(cuò)技術(shù)和容錯(cuò)技術(shù)。避錯(cuò)是預(yù)防和避免系統(tǒng)在運(yùn)行中出錯(cuò),一般的常用的避錯(cuò)技術(shù)主要是測(cè)試,進(jìn)行較充分的測(cè)試,想盡可能的窮盡軟件的錯(cuò)誤,但是錯(cuò)誤和故障是不可能窮盡的,容錯(cuò)就顯得非常重要,常用的容錯(cuò)技術(shù)主要包括結(jié)構(gòu)冗余、信息冗余、時(shí)間冗余、冗余附加技術(shù)等。不同的應(yīng)用系統(tǒng)要根據(jù)自己業(yè)務(wù)及基于的軟硬件的實(shí)際情況采取不同的設(shè)計(jì)方式,盡量提高系統(tǒng)的可靠性,保證運(yùn)行的持續(xù)穩(wěn)定運(yùn)行。
在文聯(lián)人事工作網(wǎng)絡(luò)平臺(tái)項(xiàng)目實(shí)施過程中,為實(shí)現(xiàn)系統(tǒng)的易用性、可擴(kuò)展性、穩(wěn)定性、良好的性能、可靠性等效用指標(biāo),在系統(tǒng)設(shè)計(jì)時(shí),主要使用數(shù)據(jù)庫(kù)雙機(jī)熱備、改進(jìn)防衛(wèi)式程序設(shè)計(jì)、多種設(shè)計(jì)實(shí)現(xiàn)方式、負(fù)載均衡保障系統(tǒng)無(wú)故障穩(wěn)定運(yùn)行。
1 ?軟件可靠性設(shè)計(jì)
1.1 ?恢復(fù)塊設(shè)計(jì)
恢復(fù)塊設(shè)計(jì)是一種動(dòng)態(tài)的故障屏蔽技術(shù),一般采用后向恢復(fù)策略。如圖1所示。
恢復(fù)塊方法提供具有執(zhí)行結(jié)果相同的功能模塊的主塊和若干個(gè)不同的備用塊,一個(gè)塊就是實(shí)現(xiàn)一個(gè)功能的模塊、功能、函數(shù)或者程序段,主塊首先
投入使用,運(yùn)行完成后進(jìn)行驗(yàn)證測(cè)試,如果沒有通過驗(yàn)證測(cè)試,需將系統(tǒng)進(jìn)行恢復(fù)并且由其中一個(gè)備用塊代替主塊運(yùn)行,這一過程可以一直重復(fù)進(jìn)行直到耗盡所有的備用塊,或者其中一個(gè)故障行為超出預(yù)料,從而導(dǎo)致不能恢復(fù)的結(jié)果。設(shè)計(jì)時(shí)需保證主塊及所有備份塊之間的獨(dú)立性,避免類似錯(cuò)誤的產(chǎn)生,使主塊和后備塊之間共性錯(cuò)誤降到最低限度,并且需要確保驗(yàn)證測(cè)試程序的正確性。
1.2 ?N版本程序設(shè)計(jì)
N版本程序設(shè)計(jì)是一種靜態(tài)的故障屏蔽技術(shù),采用前向回復(fù)策略。如圖2所示。
其設(shè)計(jì)思想是使用多種不同的算法或者設(shè)計(jì)思路實(shí)現(xiàn)相同的功能,最終的結(jié)果通過表決器來決定。其中N份程序需要由不同都設(shè)計(jì)者或者開發(fā)者獨(dú)立設(shè)計(jì),使用不相同的方法,盡量使用不相同的設(shè)計(jì)開發(fā)語(yǔ)言、不相同的開發(fā)環(huán)境、不相同的工具來實(shí)現(xiàn)。這樣做的原因是不同人設(shè)計(jì)可以減少不同版本軟件相類似錯(cuò)誤的概率。另外,由于各種不同版本并行執(zhí)行,甚至在不同的計(jì)算機(jī)中執(zhí)行,互相之間如何同步時(shí)需要重點(diǎn)考慮的問題。
1.3 ?防衛(wèi)式程序設(shè)計(jì)
防衛(wèi)式程序設(shè)計(jì)的容錯(cuò)機(jī)制與傳統(tǒng)容錯(cuò)技術(shù)的實(shí)現(xiàn)方法都不太一致。針對(duì)系統(tǒng)中肯存在的錯(cuò)誤或者不一致性,防衛(wèi)式程序設(shè)計(jì)的基本思想是通過在系統(tǒng)代碼中包含錯(cuò)誤檢查代碼、錯(cuò)誤恢復(fù)代碼,這樣可以使一旦發(fā)生錯(cuò)誤,程序能撤銷錯(cuò)誤狀態(tài),恢復(fù)到一個(gè)已知正確的狀態(tài)中去[1]。也可以理解為備份恢復(fù)或者回滾功能,但是程序自己意識(shí)到錯(cuò)誤自動(dòng)恢復(fù),從而提高系統(tǒng)的可靠性和穩(wěn)定性。防衛(wèi)式程序設(shè)計(jì)原理如圖3所示。
2 ?軟件可靠性設(shè)計(jì)應(yīng)用
在文聯(lián)人事工作網(wǎng)絡(luò)平臺(tái)項(xiàng)目的實(shí)施過程中,為實(shí)現(xiàn)約定的易用性、穩(wěn)定性、可靠性、安全性、良好的性能等非功能性需求,結(jié)合既有的軟硬件條件及運(yùn)行環(huán)境,分析采納可靠性設(shè)計(jì)的諸多方法,經(jīng)綜合考慮主要采用了數(shù)據(jù)雙機(jī)備份、改進(jìn)防衛(wèi)式程序設(shè)計(jì)、同功能多種實(shí)現(xiàn)方式、負(fù)載均衡幾種方法提高軟件系統(tǒng)的可靠性。
2.1 ?數(shù)據(jù)庫(kù)雙機(jī)備份
數(shù)據(jù)庫(kù)是系統(tǒng)的核心所在,所有業(yè)務(wù)數(shù)據(jù)都存在數(shù)據(jù)庫(kù)中,業(yè)務(wù)數(shù)據(jù)的遺失或失效將造成不可容忍的系統(tǒng)故障,提高系統(tǒng)可靠性首先應(yīng)該保證業(yè)務(wù)數(shù)據(jù)的穩(wěn)定性和安全性。
在項(xiàng)目的實(shí)施過程中,數(shù)據(jù)庫(kù)中存儲(chǔ)的業(yè)務(wù)數(shù)據(jù)是關(guān)于干部履職信息及學(xué)員培訓(xùn)信息的,對(duì)于提高相關(guān)工作效率,改變傳統(tǒng)工作模式而言異常重要。項(xiàng)目實(shí)施過程中數(shù)據(jù)庫(kù)通過雙機(jī)備份來保證數(shù)據(jù)庫(kù)的穩(wěn)定與安全,數(shù)據(jù)庫(kù)中的業(yè)務(wù)數(shù)據(jù)、數(shù)據(jù)表結(jié)構(gòu)表都按照既定的備份策略進(jìn)行備份,形成數(shù)據(jù)冗余。應(yīng)用示意圖如圖4所示。
當(dāng)其中一臺(tái)數(shù)據(jù)庫(kù)受到何種影響不能正常提供服務(wù)后將自動(dòng)啟用備份數(shù)據(jù)庫(kù)。通過此種方式可以減少人事平臺(tái)因?yàn)閿?shù)據(jù)庫(kù)的原因造成系統(tǒng)不可用的概率和時(shí)間。兩臺(tái)數(shù)據(jù)庫(kù)服務(wù)器之間,通過備份策略互相監(jiān)控狀態(tài),在其中一臺(tái)服務(wù)器不能使用后則切換至可用的一臺(tái),達(dá)到提高數(shù)據(jù)庫(kù)的穩(wěn)定性與可靠性進(jìn)而保障人事平臺(tái)整個(gè)系統(tǒng)的可靠性。
2.2 ?改進(jìn)防衛(wèi)式程序設(shè)計(jì)
為了讓系統(tǒng)穩(wěn)定運(yùn)行,提高應(yīng)用系統(tǒng)本身的可用性至關(guān)重要,如果過軟件故障或者因?yàn)椴豢深A(yù)知的異常而宕機(jī),將會(huì)引起十分嚴(yán)重的后果。在人事平臺(tái)實(shí)施過程的系統(tǒng)整體設(shè)計(jì)時(shí),在系統(tǒng)層面考慮可靠性及穩(wěn)定性,盡量減少或者盡可能避免因?yàn)橄到y(tǒng)本身的原因造成的不穩(wěn)定,系統(tǒng)在總體設(shè)計(jì)中借鑒了防衛(wèi)式程序設(shè)計(jì)的思想,在系統(tǒng)中寫入了系統(tǒng)備份策略、錯(cuò)誤檢查程序、錯(cuò)誤恢復(fù)機(jī)制,當(dāng)系統(tǒng)發(fā)生故障時(shí)可以自動(dòng)恢復(fù)到前一個(gè)正確的版本,同時(shí)記錄發(fā)生的問題進(jìn)行記錄及捕捉。事后可以對(duì)捕獲得異常進(jìn)行分析改進(jìn),并且升級(jí)應(yīng)用軟件,穩(wěn)定運(yùn)行后備份新的版本。系統(tǒng)的備份方式如圖5所示。
秉承持續(xù)改進(jìn)的思想結(jié)合防衛(wèi)式程序設(shè)計(jì)的理念,設(shè)計(jì)實(shí)施本項(xiàng)目,當(dāng)系統(tǒng)更新時(shí),備份整個(gè)系統(tǒng),系統(tǒng)運(yùn)行過程中對(duì)系統(tǒng)進(jìn)行監(jiān)控,當(dāng)發(fā)生故障及時(shí)將系統(tǒng)恢復(fù)為上一個(gè)正確的版本,可以更有效的提高整個(gè)應(yīng)用系統(tǒng)的可靠性。
2.3 ?多種設(shè)計(jì)實(shí)現(xiàn)思路
功能多版本多實(shí)現(xiàn)方式實(shí)現(xiàn)是針對(duì)相同的功能或者模塊設(shè)計(jì)多種實(shí)現(xiàn)方式,不同設(shè)計(jì)思路和不同實(shí)現(xiàn)的方式之期間要存在差異,即存在相異性,從而可提高功能或者模塊的可用性。在人事平臺(tái)的設(shè)計(jì)中,多個(gè)功能模塊都通過此方式進(jìn)行設(shè)計(jì),以培訓(xùn)學(xué)員報(bào)名參加培訓(xùn)為例,學(xué)員可以自己登錄平臺(tái)進(jìn)行報(bào)名,也可以由他人代報(bào)或者幫助他人報(bào)名,還可以由后臺(tái)相關(guān)管理員在后臺(tái)管理端批量幫助學(xué)員進(jìn)行報(bào)名,如圖6所示。
在功能設(shè)計(jì)中還存在很多這種設(shè)計(jì)方式,培訓(xùn)班發(fā)布的問題,既可以通過報(bào)名開始時(shí)間,利用定時(shí)器自動(dòng)啟動(dòng),也可以通過開啟報(bào)名按鈕手動(dòng)啟動(dòng)報(bào)名;培訓(xùn)評(píng)估問題可以在賬戶上也可以通過掃描二維碼實(shí)現(xiàn);關(guān)于履職活動(dòng)填寫工作,可以在個(gè)人前臺(tái)賬號(hào)上填寫錄入,也可以由工作人員(秘書或者活動(dòng)組織者)批量導(dǎo)入或者錄入。相關(guān)功能通過多種設(shè)計(jì)方式不同的實(shí)現(xiàn)方式提高了系統(tǒng)的可靠程度,當(dāng)某個(gè)功能或者模塊因?yàn)橐馔獠荒苁褂脮r(shí),還可以通過其它方式完成工作此種實(shí)現(xiàn)方式不僅可以為用戶提供多入口,同時(shí)又增強(qiáng)了系統(tǒng)的可用靠性。
2.4 ?負(fù)載均衡
人事平臺(tái)作為一個(gè)互聯(lián)網(wǎng)應(yīng)用,同時(shí)在線用戶可能會(huì)成千上萬(wàn),如何讓所有用戶都可以流暢訪問系統(tǒng),是設(shè)計(jì)本項(xiàng)目需要重要考慮的問題。本項(xiàng)目的部署設(shè)計(jì)通過負(fù)載均衡實(shí)現(xiàn)集群,進(jìn)一步提高可用性,并且分擔(dān)了各服務(wù)器的壓力,提高了性能。Nginx實(shí)現(xiàn)負(fù)載均衡,是一種基于反向代理服務(wù)器的負(fù)載均衡,支持高并發(fā),避免單機(jī)訪問量過大而引起的宕機(jī)問題,Nginx在高并發(fā)情況下表現(xiàn)良好,能夠支持高達(dá)50000個(gè)并發(fā)響應(yīng)[3]。
本項(xiàng)目前臺(tái)用戶面向的是全國(guó)范圍內(nèi)所有文藝工作者,同時(shí)在線用戶會(huì)超過10000人,因此部署設(shè)計(jì)通過高性能服務(wù)器通過輪換機(jī)制組成集群,滿足高并發(fā)情況下系統(tǒng)的可用集群中多臺(tái)服務(wù)器通過輪換機(jī)制分擔(dān)訪問壓力,資源分配也比較均衡。此外,多臺(tái)服務(wù)器同時(shí)互為備份,其中一臺(tái)服務(wù)器出現(xiàn)故障,系統(tǒng)依舊可用。提高可用性的同事也提高了性能。負(fù)載均衡的實(shí)現(xiàn)在本項(xiàng)目最終上線運(yùn)行過程中保障可靠性方面起到了非常重要的作用。
3 ?結(jié)束語(yǔ)
人事平臺(tái)在設(shè)計(jì)實(shí)施中通過數(shù)據(jù)庫(kù)雙機(jī)冗余備份、防衛(wèi)式程序設(shè)計(jì)、相同功能多種設(shè)計(jì)方式多種實(shí)現(xiàn)策略、應(yīng)用部署實(shí)現(xiàn)負(fù)載均衡、提高了系統(tǒng)可用性及可靠性,保證系統(tǒng)上線后7*24小時(shí)穩(wěn)定運(yùn)行,提高了相關(guān)部門相關(guān)工作的工作效率,同時(shí)促進(jìn)相關(guān)工作的無(wú)紙化辦公發(fā)展。針對(duì)項(xiàng)目中的不足和考慮不周的地方,需要在以后的工作中加以改進(jìn)和完善。提高軟件系統(tǒng)可靠性的方法多種多樣,如何更好的根據(jù)不同情況選擇不同方法,因地制宜提高系統(tǒng)可靠性是今后應(yīng)該努力的方向。
參考文獻(xiàn)
[1] 楊春暉, 孫偉, 等. 系統(tǒng)架構(gòu)設(shè)計(jì)師教程[M]. 第2版. 北京, 清華大學(xué)出版社. 2012.
[2] https://baike.so.com/doc/5380532-5616806.html
[3] 于樂洋. 基于MPC8280處理平臺(tái)的軟件容錯(cuò)與快速恢復(fù)設(shè)計(jì)[D]. 北京郵電大學(xué), 2016.
[4] 鐘讀杭, 齊治昌, 徐錫山. 基于N版本程序設(shè)計(jì)的Web服務(wù)組合可靠性優(yōu)化[J]. 計(jì)算機(jī)工程與科學(xué), 2008(06): 115-118.
[5] 朱濤. 基于雙主機(jī)的冗余控制系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)[J]. 工業(yè)控制計(jì)算機(jī), 2019, 32(10): 94-95.
[6] 王權(quán). 計(jì)算機(jī)數(shù)據(jù)庫(kù)的備份與恢復(fù)技術(shù)研究[J]. 數(shù)字通信世界, 2019(09): 99.
[7] 吳海明. 基于Linux高可用性負(fù)載均衡集群技術(shù)的研究與應(yīng)用[J]. 科技創(chuàng)新與應(yīng)用, 2018(36): 17-18.