吳義芝
摘 要:本文論述了養(yǎng)老管理信息綜合系統(tǒng)中軟件容錯技術(shù)的應(yīng)用,主要討論了各種容錯技術(shù)在系統(tǒng)中的應(yīng)用,最后對整個系統(tǒng)的容錯進(jìn)行了總結(jié)。
關(guān)鍵詞:容錯,集群,主備,冗余
目前我國已經(jīng)進(jìn)入到老齡化社會,老齡人口逐年增長,按照老齡辦提供的數(shù)字,現(xiàn)在中國的老年人口已經(jīng)達(dá)到 2.48 億,與之增加的養(yǎng)老消費人均三千元左右,從整個養(yǎng)老產(chǎn)業(yè)的規(guī)模來看,估算在 2025年要增加到五萬億規(guī)模,市場前景巨大。隨著互聯(lián)網(wǎng)的迅猛發(fā)展,各行各業(yè)都在進(jìn)行著互聯(lián)網(wǎng)+的嘗試。其中,養(yǎng)老領(lǐng)域更迫切需要解決養(yǎng)老專業(yè)化程度低、信息化不足、健康照護(hù)水平滯后等一系列亟待解決的問題。
由于我們公司在醫(yī)療行業(yè)領(lǐng)域有著豐富的成功經(jīng)驗,同時,近些年在養(yǎng)老領(lǐng)域也成功實施過很多成熟的案例。一期投資方出資 3600 萬,委托我司進(jìn)行這款綜合性養(yǎng)老管理平臺的開發(fā)工作。我在該項目中擔(dān)任系統(tǒng)架構(gòu)設(shè)計師,主要負(fù)責(zé)應(yīng)用系統(tǒng)的軟件架構(gòu)設(shè)計和中間件選型。該系統(tǒng)以養(yǎng)老為主線,其中包括養(yǎng)老檔案、照護(hù)計劃、服務(wù)審計、狀況跟蹤、費用管理、決策支持等方面的30多個業(yè)務(wù)功能模塊組成。
經(jīng)過前期對全國幾十家養(yǎng)老機構(gòu)和相關(guān)合作的醫(yī)療單位的調(diào)研分析,結(jié)合原有的經(jīng)驗,對整個系統(tǒng)業(yè)務(wù)進(jìn)行詳細(xì)規(guī)劃和相關(guān)設(shè)備的初步選型,即我們內(nèi)部所說的“兩版三端”的方案,機構(gòu)養(yǎng)老和社區(qū)養(yǎng)老兩個子系統(tǒng),同時能夠在 PC 端,PAD 端,手機端三端進(jìn)行呈現(xiàn)和交互。提高軟件系統(tǒng)可靠性技術(shù)主要分為容錯技術(shù)和避錯技術(shù),容錯技術(shù)的主要方式為冗余,冗余又分為結(jié)構(gòu)冗余、時間冗余、信息冗余,冗余附加。結(jié)構(gòu)冗余又分為靜態(tài)冗余、動態(tài)冗余和混合冗余。軟件容錯技術(shù)主要有 N版本程序設(shè)計,恢復(fù)塊方法,和防衛(wèi)式程序設(shè)計。結(jié)合互聯(lián)網(wǎng)軟件的性質(zhì),我主要采用了集群技術(shù)、數(shù)據(jù)庫主從方式、和程序設(shè)計方面來進(jìn)行軟件的容錯與避錯處理。下面就從以上三方面詳細(xì)討論我所采用的容錯技術(shù)和方法。
1、通過集群技術(shù)來容錯
平臺中的各服務(wù)如果在運行時部署在一臺服務(wù)器上,那么當(dāng)服務(wù)器發(fā)生故障,整個平臺將不能再提供任何服務(wù)。所以一般非常小規(guī)模的應(yīng)用才會采取這樣的部署方式,像互聯(lián)網(wǎng)應(yīng)用這樣的支付平臺來說必須采用多機同時部署的方式,防止單臺服務(wù)器宕機或者服務(wù)進(jìn)程 Crash導(dǎo)致整個平臺不能提供服務(wù)的問題。通過多機同時部署,當(dāng)一臺服務(wù)出現(xiàn)問題時,可以很容易替換一臺新服務(wù)器進(jìn)行重新部署生效,通過服務(wù)客戶端的軟負(fù)載均衡功能,可動態(tài)剔除不可用服務(wù)機器,動態(tài)發(fā)現(xiàn)新加入集群的服務(wù)機器,使平臺在出現(xiàn)故障時可平滑過渡,達(dá)到容錯的目的。另外平臺中各服務(wù)當(dāng)首次獲取到的不易變的靜態(tài)數(shù)據(jù)會將其存入非本地緩存中,例如采用了 rediscluster 技術(shù),可以很好的保證寫入緩存中的數(shù)據(jù)獲取的高可靠性,恰當(dāng)使用緩存不但會提升平臺性能,同時還可以起到容錯的效果,例如當(dāng)某個服務(wù)所依賴的后端存儲發(fā)生了短時的故障或者網(wǎng)絡(luò)抖動,在這個時候大量的并發(fā)請求發(fā)現(xiàn)存儲獲取失敗直接從緩存中獲取將數(shù)據(jù)返回給調(diào)用方,起到了很好的容錯效果。
2、通過數(shù)據(jù)庫主從部署方式來容錯
對于該平臺來說,所依賴的后端數(shù)據(jù)庫存儲的穩(wěn)定性是非常非常重要的,所有的老人檔案、照護(hù)計劃、當(dāng)前狀態(tài)等等數(shù)據(jù)將直接存儲到數(shù)據(jù)庫中。如果數(shù)據(jù)庫在運行過程中頻繁宕機,那么帶來的問題將是不能容忍的,因為會造成老人檔案,護(hù)理步驟出錯等等問題,所以在這里就要求數(shù)據(jù)庫存儲要具有非常高的可靠性,同時具有很強的容錯性,在這里我主要采用了數(shù)據(jù)庫的部署結(jié)構(gòu)為主從式方式,要求部署在不同服務(wù)器上,在不出問題的情況下對于一些時效性要求不是很高的場合從庫可以負(fù)責(zé)承擔(dān)一部分讀流量,當(dāng)主庫發(fā)生讀寫問題時,可快速由其他的從庫升級為主庫,繼續(xù)服務(wù),達(dá)到容錯的效果。在這里我還采用了要求數(shù)據(jù)庫宕機加報警的方式來防止宕機的主從數(shù)據(jù)庫實例過多,導(dǎo)致在并發(fā)高的情況下沒有可用的從庫升級為主庫提供服務(wù),通過這樣的方式也提高了整個平臺的高可靠性。數(shù)據(jù)庫的數(shù)據(jù)文件存儲這里我也要求采用了 RAID 磁盤容錯技術(shù)來防止單塊磁盤損壞導(dǎo)致的數(shù)據(jù)文件丟失問題。
3、通過程序設(shè)計方面進(jìn)行軟件的容錯與避錯。
根據(jù)以往的架構(gòu)經(jīng)驗,那么系統(tǒng)的不可靠大部分是由于程序內(nèi)部的設(shè)計或者網(wǎng)絡(luò)請求參數(shù)的配置或者連接池參數(shù)的配置不當(dāng)所導(dǎo)致的。所以通過程序設(shè)計方面進(jìn)行軟件的容錯是非常重要的。在程序設(shè)計方面的容錯用的最普遍的就是防衛(wèi)式程序設(shè)計,例如養(yǎng)老平臺中的結(jié)算模塊,當(dāng)在支付的過程中調(diào)用賬戶服務(wù)來進(jìn)行賬戶金額扣減的時候,勢必會調(diào)用賬戶服務(wù)傳遞請求對象來處理,如果說賬戶服務(wù)在被調(diào)用的這一刻網(wǎng)絡(luò)抖動或者丟包的情況下,這個時候一鍵支付聚合服務(wù)必然會收到拋出的錯誤信息,如果沒有通過恰當(dāng)?shù)娜蒎e處理,那么這次一鍵支付必然會給用戶顯示支付失敗,不太友好,在這里我采用了 TRYCATCH機制加 3次重試的容錯處理機制,就解決了該次支付因網(wǎng)絡(luò)抖動導(dǎo)致的支付失敗問題。平臺采用的是微服務(wù)的架構(gòu)風(fēng)格,那么在服務(wù)之間的通訊過程中涉及到數(shù)據(jù)的傳遞,這里我采用了在數(shù)據(jù)傳輸協(xié)議的頭部加 CRC碼來做到對錯誤數(shù)據(jù)處理的避錯。
通過項目組全體成員的不懈努力,整個項目開發(fā)歷時 7 個月,系統(tǒng)已經(jīng)順利通過驗收并如期上線。通過采用了以上容錯技術(shù)的方法和措施后,平臺從上線運行到目前為止,各服務(wù)運行狀態(tài)良好,到目前運行穩(wěn)定并得到用戶的一致好評。不足之處有兩個方面,1.各服務(wù)間調(diào)用事物一致性問題的容錯處理。針對該問題,目前只能保證事物的最終一致性,因為根據(jù) CAP 理論,要解決該問題確實存在一定的難度,后面我準(zhǔn)備研究下 TCC事物處理方式尤其適合支付平臺場景,爭取在不損失性能的前提下最大限度解決分布式事物的一致性問題。2.目前所采用的最大努力推送型事物服務(wù)依賴 MQ重復(fù)消息的問題。針對該問題我采用加了一張消息處理表的方式來解決,當(dāng)收到消息的時候,先查詢該條消息是否已經(jīng)處理,如果沒有處理直接進(jìn)行處理并將其進(jìn)行記錄,防止重復(fù)處理導(dǎo)致支付數(shù)據(jù)出錯。我會在今后的架構(gòu)設(shè)計過程中,不斷更新自己的知識,不斷完善自己的架構(gòu)設(shè)計領(lǐng)域,設(shè)計出更好的軟件架構(gòu),更好的支撐業(yè)務(wù)平臺的運行,提高公司的競爭力,為公司為社會盡一份綿薄之力。