張正欣
(北京工業(yè)大學(xué) 北京 100024)
隨著云計(jì)算[1]的迅速發(fā)展,現(xiàn)代的軟件構(gòu)成方式出現(xiàn)了很大變化,應(yīng)用軟件作為一個(gè)概念,已經(jīng)早已不是指單機(jī)運(yùn)行的龐大程序包了。相反的,由云計(jì)算提供的,以SOA[2]組件為基礎(chǔ)構(gòu)成的應(yīng)用軟件越來越多出現(xiàn)在各個(gè)應(yīng)用領(lǐng)域。在電子醫(yī)療領(lǐng)域,面向普通用戶,兼容以往不同的醫(yī)療數(shù)據(jù),全國(guó)聯(lián)網(wǎng)的醫(yī)療信息系統(tǒng)也成為了可能。
作為一個(gè)需要24小時(shí)不間斷運(yùn)轉(zhuǎn),在線用戶可能在不同時(shí)間段出現(xiàn)巨大變化的信息系統(tǒng)而言,挑戰(zhàn)也是非常大的。要想實(shí)現(xiàn)這樣的公用系統(tǒng),一個(gè)關(guān)鍵問題需要克服:那就是現(xiàn)有的系統(tǒng)服務(wù)器處理能力往往有限,網(wǎng)絡(luò)上傳帶寬也非常有限,而系統(tǒng)訪問量很不均衡,往往在一個(gè)短時(shí)間段內(nèi),系統(tǒng)訪問可能會(huì)有爆發(fā)式增長(zhǎng),而在其他時(shí)間段則利用率較低。短時(shí)間大訪問量是難于應(yīng)對(duì)的,傳統(tǒng)系統(tǒng)需要為應(yīng)付此一段時(shí)間的訪問量,裝備巨大處理能力的計(jì)算機(jī)系統(tǒng),申請(qǐng)大的網(wǎng)絡(luò)帶寬,但是在大量的時(shí)間里,這些硬軟件資源都沒有充分使用。資源就是成本,最終都會(huì)計(jì)入用戶的賬單,那大型服務(wù)系統(tǒng)應(yīng)該如何設(shè)計(jì),實(shí)現(xiàn)起來才能最大限度的便宜、可靠,讓大量的用戶用的起。
首先分析面臨的第一個(gè)問題,面向服務(wù)系統(tǒng)的優(yōu)勢(shì)在于可以自由部署服務(wù)組件,作為一個(gè)單獨(dú)運(yùn)作的單元,服務(wù)組件與系統(tǒng)的聯(lián)系僅限于其通訊接口所規(guī)定的數(shù)據(jù)和操作內(nèi)容?;谶@樣的特性,一方面,讓我們可以通過將服務(wù)組件寄宿到外部提供的服務(wù)器上運(yùn)轉(zhuǎn),使用外部服務(wù)器的運(yùn)行資源和網(wǎng)絡(luò)資源,但在邏輯上歸屬于內(nèi)部系統(tǒng)。這樣實(shí)現(xiàn)減少系統(tǒng)網(wǎng)絡(luò)資源和運(yùn)行資源占用的目的,在服務(wù)器和網(wǎng)絡(luò)帶寬都有限的條件下,大型系統(tǒng)可以通過這樣的方法方便的延伸處理能力。另一方面,對(duì)于系統(tǒng)的經(jīng)濟(jì)性而言,在沒有外部大量訪問的情況下,使用本地資源可以非常經(jīng)濟(jì)的為客戶提供服務(wù),但在短時(shí)間的大訪問量面前,可以用租用的方式,將服務(wù)組件,放置到外部云計(jì)算系統(tǒng)上運(yùn)行,租用外部運(yùn)算資源和網(wǎng)絡(luò)帶寬,由此本地計(jì)算機(jī)的處理能力僅限于提供大多數(shù)情況,本地的網(wǎng)路帶寬限于支持對(duì)外部可能部署的服務(wù)組件進(jìn)行通訊的容量。這樣可以合理的,大量的節(jié)約固定資產(chǎn)投資。從而,整個(gè)系統(tǒng)也就是一個(gè)普通用戶用戶用戶得起的面向公眾的信息系統(tǒng)了。
醫(yī)療信息服務(wù)系統(tǒng)的軟件構(gòu)架方式如圖1所示,整個(gè)軟件架構(gòu)分為服三個(gè)主要層次,分別是核心服務(wù)層,基礎(chǔ)服務(wù)層,以及應(yīng)用程序?qū)?。服?wù)層次從下向上,服務(wù)的粒度逐漸增大。下層是上層業(yè)務(wù)、應(yīng)用實(shí)現(xiàn)的基礎(chǔ)。
圖1 醫(yī)療信息服務(wù)系統(tǒng)組成圖Fig.1 Healthcare information service system organization
服務(wù)管理器的設(shè)計(jì)見圖2,因?yàn)橄到y(tǒng)分別使用WCF實(shí)現(xiàn)業(yè)務(wù)服務(wù),WPF實(shí)現(xiàn)界面服務(wù),所有基礎(chǔ)組件的基本運(yùn)行環(huán)境是IIS7[3]服務(wù)器。系統(tǒng)需要知道的服務(wù)信息包括:服務(wù)的運(yùn)行客戶端IP地址或可解析的URL地址,在該地址上運(yùn)行的端口號(hào);服務(wù)的操作以及數(shù)據(jù)接口;服務(wù)的綁定方式;以上信息是服務(wù)在運(yùn)行間的動(dòng)態(tài)信息,除此以外,系統(tǒng)需要以文件的形式保存現(xiàn)有的服務(wù),并記錄文件存儲(chǔ)地址,這是服務(wù)的靜態(tài)信息。
服務(wù)靜態(tài)信息[4]保證服務(wù)管理器可以方便的管理不同版本的服務(wù),實(shí)現(xiàn)服務(wù)的可持續(xù)演進(jìn)能力。單個(gè)服務(wù)保存多個(gè)不同版本,以適應(yīng)運(yùn)行測(cè)試等不同要求。服務(wù)由于與服務(wù)運(yùn)行環(huán)境關(guān)聯(lián)不大,使得整體系統(tǒng)具有高度可靠性,并能隨著應(yīng)用服務(wù)器的升級(jí)、更新實(shí)現(xiàn)自身的升級(jí)。不同服務(wù)沒有共用數(shù)據(jù)區(qū),使得服務(wù)數(shù)據(jù)獨(dú)立性好,出現(xiàn)運(yùn)行問題不會(huì)影響整體系統(tǒng)的運(yùn)作。
動(dòng)態(tài)信息在服務(wù)運(yùn)行時(shí)需要?jiǎng)討B(tài)維護(hù)。同時(shí),系統(tǒng)的服務(wù)器分為內(nèi)部和外部?jī)刹糠郑獠繑U(kuò)展服務(wù)器除對(duì)系統(tǒng)提交動(dòng)態(tài)服務(wù)組件運(yùn)行信息外,自身需要的信息包括:云服務(wù)提供商地址,用戶名,密碼,以及用于支付花費(fèi)的信息等。
服務(wù)的運(yùn)行機(jī)制[5]是服務(wù)管理器管理維護(hù)服務(wù)的基礎(chǔ)原則,是整體服務(wù)系統(tǒng)實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)張、收縮的基本運(yùn)行規(guī)則。醫(yī)療信息服務(wù)系統(tǒng)的服務(wù)管理運(yùn)行機(jī)制包括:
1)內(nèi)部服務(wù)器處理器占用不高時(shí),在系統(tǒng)添加新服務(wù)時(shí),添加到內(nèi)部服務(wù)器上。
2)在整體系統(tǒng)服務(wù)增加超過終止數(shù)量,內(nèi)部服務(wù)器處理器占用達(dá)到一定程度時(shí)(如75%),開始啟動(dòng)外部擴(kuò)張服務(wù)器實(shí)例,并將服務(wù)文件傳輸?shù)酵獠糠?wù)器,打開服務(wù)。
3)當(dāng)系統(tǒng)整體新增服務(wù)相對(duì)終止的服務(wù)較少,系統(tǒng)處在回縮狀態(tài)時(shí),如一外部服務(wù)器占用資源降低到一定程度(如25%),不將新服務(wù)添加到該服務(wù)器,并將其上服務(wù)在其他服務(wù)器預(yù)先運(yùn)作加載,再逐次改變這些服務(wù)注冊(cè)于UDDI的參數(shù),將服務(wù)逐漸轉(zhuǎn)出。待服務(wù)器上沒有系統(tǒng)服務(wù)時(shí),關(guān)閉該服務(wù)器。
圖2 服務(wù)管理器類圖Fig.2 Service management class diagram
詳細(xì)設(shè)計(jì)中,服務(wù)管理系統(tǒng)的主要部分分為服務(wù)管理端(Service Manager)、服務(wù)運(yùn)行代理(Service Agent)、以及服務(wù)文件信息、服務(wù)運(yùn)行信息四部分。
服務(wù)代理端是實(shí)現(xiàn)了支持內(nèi)部服務(wù)器 (Inside Server)和外部服務(wù)器(Outside Server)的標(biāo)準(zhǔn)接口,功能包括加載、停止服務(wù),讀取服務(wù)器上運(yùn)行的服務(wù)列表,讀取服務(wù)器上可以分配的端口號(hào),外部服務(wù)器的管理功能還包括:外部云計(jì)算服務(wù)提供者信息,服務(wù)的訪問基地址,用戶名,密碼,云計(jì)算的付賬信息等,并可查詢運(yùn)行服務(wù)器的費(fèi)用列表。函數(shù)包括為使用對(duì)方的計(jì)算資源付賬操作。
服務(wù)文件信息,是當(dāng)服務(wù)組件以文件的形式保存的時(shí)候,需要保存的信息,包括服務(wù)文件的編號(hào),文件名,創(chuàng)建者(所有者),是否屬于公用組件,保存密碼,保存文件的位置。系統(tǒng)通過服務(wù)文件管理模塊查找,并將服務(wù)文件加載到運(yùn)行的服務(wù)器中。
服務(wù)運(yùn)行信息,是服務(wù)發(fā)布并運(yùn)行后,系統(tǒng)需要記錄的信息,包括服務(wù)的編號(hào),加載的服務(wù)器編號(hào),服務(wù)組件運(yùn)行的動(dòng)態(tài)編號(hào)。利用服務(wù)編號(hào),可以比對(duì)得到服務(wù)的接口等信息。
系統(tǒng)本身通過服務(wù)管理組件可以批量寄宿服務(wù),可以適用于業(yè)務(wù)流程中大量的服務(wù)寄宿操作。
服務(wù)寄宿完成后,服務(wù)管理器將服務(wù)的信息公布到UDDI上,讓使用者可以查找需要的服務(wù)。
在前一部分基礎(chǔ)上,如何實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)展,如何計(jì)算系統(tǒng)的合適容量就成了核心問題。
要解決此問題,首先需要測(cè)試系統(tǒng)服務(wù)組件的使用參數(shù),包括運(yùn)行時(shí)間,網(wǎng)絡(luò)占用帶寬等。同時(shí),根據(jù)服務(wù)組件的特性,決定哪些組件優(yōu)先向外擴(kuò)張比較合理。那么,我們需要將整個(gè)應(yīng)用程序的大致框架進(jìn)行一個(gè)梳理,選出那些在同最終用戶交互上,較為占用同通訊資源。處理器時(shí)間,但同時(shí)和系統(tǒng)間數(shù)據(jù)通訊量不大的,較為獨(dú)立的程序部分,應(yīng)該予以優(yōu)先獨(dú)立出去,放在租用的平臺(tái)上運(yùn)轉(zhuǎn),以提高系統(tǒng)效率。如圖3是應(yīng)用程序的智能客戶端基本模型,包括界面組件、通訊代理組件兩部分組成。
圖3 醫(yī)療服務(wù)智能客戶端Fig.3 Healthcare service wisdom client
醫(yī)療服務(wù)的智能客戶端[5]由頁(yè)首、頁(yè)尾、導(dǎo)航框以及內(nèi)容窗口組成,結(jié)合通訊代理端而成。內(nèi)容窗口需要提供一般用戶應(yīng)用操作,這樣的操作基本分為兩類,單向操作和雙向操作。單向操作,可以用于用戶到服務(wù)器數(shù)據(jù)段,執(zhí)行輸入數(shù)據(jù)服務(wù);雙向操作,包括雙向視頻操作和雙向文字操作,提供對(duì)使用交互服務(wù)的兩個(gè)典型用戶視頻對(duì)話、文字對(duì)話的服務(wù)。這樣的操作數(shù)據(jù)連接量會(huì)很大,但又不必一定需要放到系統(tǒng)中進(jìn)行,占用系統(tǒng)網(wǎng)絡(luò)帶寬的。界面的其他操作,包括導(dǎo)航框、頁(yè)頭、頁(yè)尾也較少需要與系統(tǒng)的數(shù)據(jù)連接。
在系統(tǒng)的數(shù)據(jù)部分,是需要連接到服務(wù)器端的,包括數(shù)據(jù)的建立、修改、保存等操作都需要數(shù)據(jù)庫(kù)的連接。
通過分析,我們可以看到,此系統(tǒng)的數(shù)據(jù)交互,雙向交互服務(wù)大多可以不放在系統(tǒng)內(nèi)寄宿,可以優(yōu)先轉(zhuǎn)而放在網(wǎng)絡(luò)中云計(jì)算平臺(tái)上,較為節(jié)省系統(tǒng)資源;GUI服務(wù)組件,如頁(yè)頭、頁(yè)尾、導(dǎo)航框由于與系統(tǒng)通訊數(shù)據(jù)量有限,且計(jì)算量不大,可以在系統(tǒng)內(nèi)部負(fù)載達(dá)到一定程度時(shí)轉(zhuǎn)移到外部服務(wù)器上運(yùn)行;單向文字服務(wù),以及數(shù)據(jù)服務(wù)牽涉與系統(tǒng)較多的交互操作,在系統(tǒng)資源許可的條件下,應(yīng)較多保留在系統(tǒng)內(nèi)部運(yùn)行。
這樣,醫(yī)療信息系統(tǒng)完成了在不影響使用體驗(yàn)的前提下,利用網(wǎng)絡(luò)上的云計(jì)算資源,實(shí)現(xiàn)了系統(tǒng)的動(dòng)態(tài)擴(kuò)張,保證了在短時(shí)間,大訪問量的條件下,系統(tǒng)依然有效、經(jīng)濟(jì)。經(jīng)一段時(shí)間的運(yùn)行試驗(yàn),此實(shí)現(xiàn)方案能夠比較有效的保證系統(tǒng)可擴(kuò)展、可配置目標(biāo)的達(dá)成。
[1]Armbrust M,F(xiàn)ox A,Griffith R,et al.A view of cloud computing[J].Communications of the ACM,2010,53(4):50-58.
[2]Erl T.Soa:principles of service design[M].Upper Saddle River:Prentice Hall,2008.
[3]Kaufman A.Frequency and transient responses of electromagnetic fieldscreated by currentsin confined conductors[J].Geophysics,1978,43(5):1002-1010.
[4]Erl T.Soa:principles of service design[M].Upper Saddle River:Prentice Hall,2008.
[5]Newcomer E,Lomow G.Understanding SOA with web services(independent technology guides) [M]. Addison-Wesley Professional,2004.
[6]邵一川,申德榮,趙宏偉,等.基于Ajax技術(shù)的智能客戶端流引擎[J].計(jì)算機(jī)工程,2009,35(12):275-278.
SHAO Yi-chuan,SHENG De-rong,ZHAO Hong-wei,et al.Ajax-based wisdom client workflow engine[J].Computer Engineering,2009,35(12):275-278.