施識帆,張昕,曹凱迪,王忠民
南京醫(yī)科大學(xué)第一附屬醫(yī)院 信息處,江蘇 南京 210029
隨著信息化技術(shù)的不斷發(fā)展,醫(yī)院對信息化的依賴程度與日俱增。因此,鑒于醫(yī)院服務(wù)模式的特殊性,醫(yī)院中的各個業(yè)務(wù)信息系統(tǒng)需保持高度的穩(wěn)定性與安全性。另外,隨著新醫(yī)改的不斷深入,醫(yī)院的規(guī)模不斷擴大,醫(yī)院集團化的發(fā)展趨勢日益顯著。如何在滿足穩(wěn)定性、安全性的同時,應(yīng)用有限的資源建設(shè)滿足高并發(fā)需求、方便橫向擴展的信息系統(tǒng),成為每一個醫(yī)院信息管理者的難題。幸運的是在金融、國電等領(lǐng)域已有一些先行經(jīng)驗可供借鑒,那就是采用負載均衡技術(shù)。本文將主要介紹該技術(shù)的背景及其在我院的實際應(yīng)用情況。
負載均衡技術(shù)建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,提供了一種廉價、有效、透明的方法,來擴展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。簡單的講,就是將工作負載進行平衡、分攤到多個服務(wù)器主機或網(wǎng)絡(luò)設(shè)備上進行協(xié)同工作,共同完成工作任務(wù)[1-3]。它主要用于避免出現(xiàn)單點故障,提高服務(wù)器資源利用率,提高服務(wù)器響應(yīng)速度,解決網(wǎng)絡(luò)擁塞問題,為用戶提供更加穩(wěn)定可靠的訪問質(zhì)量。
負載均衡技術(shù)在實現(xiàn)上有兩種方案可供考慮:軟件負載均衡和硬件負載均衡。通常來說,軟件負載均衡通過在服務(wù)器上安裝軟件來實現(xiàn)[4-6],成本低廉,使用靈活,一般情況下,適用于訪問量小且不要求全天候運行的系統(tǒng);硬件負載均衡是獨立于服務(wù)器操作系統(tǒng)和外部網(wǎng)絡(luò)的硬件設(shè)備,在功能和性能上要優(yōu)于前者,適用于負載量大且要求全天候不間斷運行的系統(tǒng)[7]。
負載均衡器在網(wǎng)絡(luò)中的部署方式很多,主要的有串聯(lián)模式和并聯(lián)模式[7-8]兩種。串聯(lián)模式負載均衡器位于上下層網(wǎng)絡(luò)設(shè)備之間,網(wǎng)絡(luò)拓撲結(jié)構(gòu)和應(yīng)用業(yè)務(wù)的實現(xiàn)對負載均衡設(shè)備依賴性較強;并聯(lián)模式負載均衡器以旁路的方式部署在現(xiàn)行的網(wǎng)絡(luò)環(huán)境中,可以方便、快速地部署到網(wǎng)絡(luò)環(huán)境中實現(xiàn)其負載均衡功能,但接口的流量壓力較大,要避免成為網(wǎng)絡(luò)瓶頸[9]。
另外,負載均衡器可以通過設(shè)定算法策略,合理地將前端請求調(diào)度給后端的服務(wù)器,盡量將負載做到均衡[10]。算法策略大致可以分為以下幾類:靜態(tài)算法[11-15]、動態(tài)算法和自適應(yīng)算法[16-18]。針對不同的應(yīng)用場景使用不同的算法策略,也是一項值得深入的研究。我院在實施負載均衡項目時,綜合考慮了以上不同選擇的優(yōu)劣,針對實際情況選擇了最適合我院的方案,完成了項目的部署和應(yīng)用。
我院實施負載均衡項目的初衷是為了解決住院電子病歷系統(tǒng)實施過程中出現(xiàn)的一些問題。在我院住院電子病歷系統(tǒng)的上線初期,應(yīng)用服務(wù)器只使用了一臺。到了系統(tǒng)上線完成時,服務(wù)器已擴展為四臺,分別對應(yīng)了本部內(nèi)科、本部外科、本部其他科室和集團分院。這里存在幾個問題:① 某臺服務(wù)器停機維護或宕機時,對應(yīng)部門或院區(qū)的電子病歷系統(tǒng)服務(wù)就不得不停止;② 客戶端維護困難,需要針對不同部門設(shè)定其對應(yīng)的服務(wù)器IP地址;③ 會有某臺服務(wù)器CPU壓力極高,而其他幾臺空閑的情況出現(xiàn)。
隨著上線科室和使用部門越來越多,服務(wù)器規(guī)模越來越大,上述問題特別是第③點服務(wù)器負載不均衡的問題日益突出,維護人員經(jīng)常需要將連接到繁忙服務(wù)器上的客戶端遷到空閑服務(wù)器上,來保證其服務(wù)可用。在遷來遷去的過程中,客戶端和服務(wù)器的對應(yīng)關(guān)系就更加混亂了。為了充分利用服務(wù)器資源,從根本上解決上述問題,同時為日后其他業(yè)務(wù)系統(tǒng)服務(wù)器架構(gòu)設(shè)計提供經(jīng)驗,負載均衡項目的實施正式開始。
軟、硬件負載均衡各有優(yōu)劣,經(jīng)過前期調(diào)研,該項目最終還是選擇了硬件負載均衡方案。這個選擇主要基于以下幾點考慮:① 我院的規(guī)模較大,系統(tǒng)數(shù)和用戶數(shù)較多,相應(yīng)的負載量較大,硬件負載均衡有比較好的性能和穩(wěn)定性;② 硬件負載均衡的策略算法較多,功能較豐富,比如高級服務(wù)器健康檢查和防火墻功能。這些算法和功能,有些軟件方案無法滿足;③ 雖然部分軟件負載均衡開源而且免費,但是學(xué)習(xí)、管理和遷移成本較高;④ 功能強大的軟件負載均衡消耗系統(tǒng)資源較多,而且操作系統(tǒng)本身的漏洞也會帶來新的安全問題[2]。所以,盡管硬件負載均衡前期投入的成本很高,但從長遠來看,從維護的角度來看,依然是非常劃算的。
我院目前的負載均衡架構(gòu)如圖1所示??傮w架構(gòu)使用了兩組負載均衡,每組負載均衡由兩臺設(shè)備組成雙機熱備,備機自動同步主機配置,當主機故障時,自動主備切換,保證不在負載均衡設(shè)備上出現(xiàn)單點故障。對于業(yè)務(wù)系統(tǒng)也按功能和重要程度進行了分組,部分系統(tǒng)如集成平臺相關(guān)的系統(tǒng)劃為A組,與負載均衡A對接;其余系統(tǒng)如電子病歷系統(tǒng)劃為B組,與負載均衡B對接。在極端情況下,如負載均衡A兩臺設(shè)備均故障,那么可以將A組系統(tǒng)臨時接入負載均衡B,保證應(yīng)用不中斷。為達到該目的,在設(shè)計時,我院采用的負載均衡設(shè)備保留了極高的冗余性能。
圖1 我院負載均衡項目總體架構(gòu)圖
事實證明,即使是小概率的極端情況也有發(fā)生的時候。在某個周末,A組設(shè)備主機故障,主備切換過程中發(fā)生設(shè)備宕機,重啟設(shè)備后發(fā)現(xiàn)兩臺設(shè)備均無法正常使用。幸運的是A組設(shè)備的配置文件有備份,于是我們在B組中重建了所有任務(wù),中斷的業(yè)務(wù)得到恢復(fù)。正是由于使用了兩組負載均衡設(shè)備的設(shè)計,故障又恰巧發(fā)生在周末,重要業(yè)務(wù)才沒有中斷太長時間。
這也給信息系統(tǒng)相關(guān)維護人員一個警示,使用負載均衡設(shè)備本意是為解決單點故障、保障系統(tǒng)可用性,千萬不要讓其成為整個系統(tǒng)中的弱點和死穴。
在部署方式上,我院采用了并聯(lián)模式來部署負載均衡設(shè)備。綜合來說,這種模式增加了網(wǎng)絡(luò)的靈活性,提高了網(wǎng)絡(luò)整體的可靠性,是對現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)、應(yīng)用業(yè)務(wù)及服務(wù)器配置更改最少的一種部署方式。
在部署完成之后,住院電子病歷系統(tǒng)曾遇到一個小問題,那就是服務(wù)器端無法接收客戶端的真實源地址,在日志中記錄的IP全部來自負載均衡設(shè)備。我們的解決的辦法也很簡單,就是通過改造住院電子病歷系統(tǒng),把客戶端地址放在HTTP頭信息里傳過來,服務(wù)器端解析后提取即可。
我院根據(jù)實際情況和不同系統(tǒng)的特點,使用了不同的負載均衡策略。
對于影像數(shù)據(jù)中心平臺、Web Service接口服務(wù)等,由于每次訪問都是獨立的,對于客戶端來說訪問A服務(wù)器或者B服務(wù)器并沒有什么區(qū)別,而且每次訪問的連接時間很短,因此可以采用加權(quán)輪詢調(diào)度算法,根據(jù)每臺服務(wù)器性能的高低,配置對應(yīng)的權(quán)重;或者采用最快響應(yīng)算法,把負載調(diào)度給相對空閑的服務(wù)器。
對于電子病歷等業(yè)務(wù)系統(tǒng),因為連接時間較長,同時服務(wù)器上會保存會話信息和一些緩存信息。如果在不同服務(wù)器上切換,會導(dǎo)致系統(tǒng)登出和數(shù)據(jù)保存失敗,因此采用最小連接調(diào)度算法,同時采取會話保持機制,以確保在會話期間不會被調(diào)度到其他應(yīng)用服務(wù)器上。在實施門診電子病歷的過程中,偶爾會出現(xiàn)用戶自動登出的問題,適當增加會話保持的時間就可以有效減少此類問題。但如果會話保持的時間太長的話,負載均衡本身又會失去意義,所以配置優(yōu)化工作也是在實踐摸索中不斷前行的。
另外,配置服務(wù)器數(shù)量時要考慮宕機時的冗余,盡量保證每臺服務(wù)器的負載在中低水平。在某臺服務(wù)器故障時,剩余服務(wù)器能接手額外增加的負載,避免發(fā)生“A機宕機→負載均衡→B機過載→B機宕機”這樣的連鎖反應(yīng)。
我院硬件負載均衡經(jīng)過5年多的使用,除了上線時部署的住院電子病歷系統(tǒng)以外,還增加了門急診電子病歷系統(tǒng)、各類接口服務(wù)器等。目前設(shè)備上部署的資源池27個,對應(yīng)的資源池成員64個,對應(yīng)的節(jié)點46個。
平時工作期間的每秒數(shù)據(jù)吞吐量在100~200 M Bits之間,有時數(shù)據(jù)峰值可達400 M Bits/s(圖2),活動連接數(shù)也在500到1000左右,最大連接數(shù)超過2000(圖3)。從圖中也可以看出,醫(yī)院的工作負荷在周一最重,周六較輕,周日最輕,其余工作日持平。
圖2 數(shù)據(jù)吞吐量
圖3 活動連接數(shù)
從設(shè)備上部署的服務(wù)器數(shù)量來看,和Web Service接口服務(wù)相關(guān)的服務(wù)器大約占60%,其余40%用于各個業(yè)務(wù)系統(tǒng),如臨床數(shù)據(jù)中心、影像數(shù)據(jù)中心、MQ平臺、門急診電子病歷系統(tǒng)、住院電子病歷系統(tǒng)等。
從數(shù)據(jù)吞吐量的角度(圖4),影像數(shù)據(jù)中心占絕對主力,超過總數(shù)據(jù)量的五分之四;如果從活動連接數(shù)的角度看(圖5),則住院電子病歷系統(tǒng)和門急診電子病歷系統(tǒng)合計接近總連接數(shù)的四分之三。
在這樣的負載壓力下,硬件負載均衡的CPU占用率始終在20%左右波動且波動幅度較?。▓D6),同時內(nèi)存的是使用率也保持在極低的程度,這表明實際負載相對于設(shè)備的可負載能力還保持在較低水平,硬件性能還有極大的冗余,即使訪問量出現(xiàn)可預(yù)期或者不可預(yù)期的突然增加,也可以保證系統(tǒng)穩(wěn)定運行的瓶頸不會出現(xiàn)在硬件負載均衡設(shè)備上。
圖4 各業(yè)務(wù)系統(tǒng)數(shù)據(jù)吞吐量餅圖
圖5 各業(yè)務(wù)系統(tǒng)活動連接數(shù)餅圖
圖6 CPU占用率
負載均衡技術(shù)隨著信息化的發(fā)展而產(chǎn)生,它的出現(xiàn)提高了信息系統(tǒng)的橫向可擴展性,使得系統(tǒng)在高并發(fā)時的可用性和安全性得到保障。我院通過實施負載均衡項目,滿足了業(yè)務(wù)的冗余要求,為醫(yī)院365天×24小時持續(xù)服務(wù)奠定了基礎(chǔ)。隨著云計算技術(shù)和大數(shù)據(jù)時代的到來,安全性和可靠性的要求也越來越高,在這種背景下,用對用好負載均衡,把技術(shù)轉(zhuǎn)化為生產(chǎn)力,也將變得非常重要。