曹斌, 王奕,2*
(1.復旦大學附屬腫瘤醫(yī)院 信息中心, 上海 200032; 2.上海腫瘤疾病人工智能工程技術研究中心, 上海 200032)
醫(yī)院信息系統(tǒng)(Hospital Information System,HIS)既是醫(yī)院最早建設的系統(tǒng),也是最核心的業(yè)務系統(tǒng)。自從其建設以來,便為醫(yī)院的基礎醫(yī)療活動提供準確、快捷的支持,并與醫(yī)院內其他信息系統(tǒng)如電子病歷系統(tǒng)、醫(yī)學影像系統(tǒng)和檢驗系統(tǒng)等互通信息,共同完成各類醫(yī)療活動的記錄,并且對數(shù)據進行統(tǒng)計。我院HIS系統(tǒng)經過多年的應用和改進,積累的患者數(shù)、數(shù)據量等信息都越來越多,傳統(tǒng)的HIS系統(tǒng)架構已經無法滿足現(xiàn)代化醫(yī)院并發(fā)式操作需求[1]。且早期的HIS系統(tǒng),其編程語言、系統(tǒng)框架都已被當前的技術體系遠遠超越。面對現(xiàn)代化醫(yī)院日趨龐大、復雜的需求,通過系統(tǒng)升級來解決,HIS系統(tǒng)已變得越來越吃力。在此背景下,我院嘗試對HIS系統(tǒng)的整體架構進行重構,采用更為先進、合理的微服務架構技術,運用數(shù)據庫緩存以及讀寫分離技術,保證系統(tǒng)正常、穩(wěn)定的運行為前提,整體提高HIS系統(tǒng)的擴展能力,優(yōu)化提升系統(tǒng)的查詢統(tǒng)計功能。
互聯(lián)網發(fā)展以來,先后沖擊了紙質傳媒、電子商務、旅游和教育等各領域[2]。在新技術的推動下,HIS系統(tǒng)的功能也在不斷地豐富與完善,為醫(yī)院的運營與管理帶來了極大便利,不但節(jié)省了勞動力,更提高了管理效率,減少工作中的疏漏和錯誤[3]。然而早期的HIS系統(tǒng)基本采用傳統(tǒng)的“一站式”開發(fā)方式進行研發(fā),在醫(yī)院高精細化管理要求下,擴展系統(tǒng)功能變得困難重重,制約著現(xiàn)代化醫(yī)院的快速發(fā)展。
而隨著“互聯(lián)網+”的高速發(fā)展,微服務架構的開發(fā)模式應運而生,它是一種新的構造應用程序方法[4]。與傳統(tǒng)“一站式”開發(fā)方式相比,微服務架構是將獨立的應用拆分為多個子服務的系統(tǒng)服務架構。各子服務運行在自己的進程中,服務間采用輕量級的通信機制,相互通信,相互配合。各個服務都圍繞著具體業(yè)務進行構建,并且能夠被獨立地部署[5]。與一體式架構相比,微服務架構有著以下優(yōu)勢:微服務架構可降解項目體量,將項目拆解成若干個子項目的集合,降低項目的控制難度[6];代碼的復用率高;微服務體量相對較小,便于開發(fā)和調試[7];各微服務都相對獨立,開發(fā)時更容易理解,同樣可避免開發(fā)工具不堪重負的情況[8];不同的微服務可以使用不同的開發(fā)語言來實現(xiàn)[9];微服務在容錯隔離方面也有不錯的能力,單個微服務出現(xiàn)故障,不會導致整個系統(tǒng)不可用[8]。
程序架構設計的難點在于如何選擇最為合適的技術、方法和模式來完成整套系統(tǒng)開發(fā)的解決方案[10]。根據現(xiàn)代化智慧型醫(yī)院的業(yè)務功能和發(fā)展需求,以及微服務架構的特性,我院新HIS系統(tǒng)整體采用B/S模式的三層架構:即表現(xiàn)層、業(yè)務邏輯層和數(shù)據訪問層。其拓補圖,如圖1所示。
圖1 B/S架構三層架構圖
與使用微服務的初衷一樣,采用B/S模式的三層架構同樣希望系統(tǒng)具備分散關注、松散耦合和邏輯復用的特點。與C/S架構相比,B/S架構還可通過權限控制來實現(xiàn)多客戶不同的訪問目的,加強數(shù)據的交互,且客戶端無需安裝,易部署,程序升級只用關注服務器即可。根據此設計理念,在業(yè)務邏輯層的構建中使用微服務架構技術,使新的HIS系統(tǒng)具備如下能力。
(1) 系統(tǒng)的高可用性。各個業(yè)務邏輯之間,采用負載均衡技術,設置多個節(jié)點,加強系統(tǒng)的負載與容災能力。同樣,對于數(shù)量更多的微服務,通過負載均衡技術使其能夠穩(wěn)定、均衡的運行。
(2) 準確的邏輯執(zhí)行。所有的業(yè)務邏輯均支持微軟分布式傳輸協(xié)調程序(MSDTC),通過MSDTC技術來協(xié)調數(shù)據庫、消息隊列,從而使各個業(yè)務邏輯能夠準確的執(zhí)行完成。
(3) 優(yōu)秀的擴展性能。通過對業(yè)務邏輯重構,將完整的一個個業(yè)務邏輯采用微服務的技術進行最小化拆分,得到的每個微服務使其職能單一化,將這些單一化的微型服務重新組合,實現(xiàn)原有的各個業(yè)務邏輯,也可根據需要重新組合,使系統(tǒng)獲得新的能力。
(4) 高效的處理性能。數(shù)據庫方面使用SqlSugar高性能ORM框架,更好的將面向對象與關系數(shù)據庫進行匹配,同時采用Redis緩存服務,提高數(shù)據庫的讀寫速度。在界面層與邏輯層通信上,支持WCF-TCP/HTTP架構,使得客服端與服務器的通信更為輕松、高效。
(5) 系統(tǒng)易部署:系統(tǒng)可部署為windows service、Internet information system或者是可執(zhí)行文件(exe)的形式。
傳統(tǒng)HIS系統(tǒng)的邏輯業(yè)務,多數(shù)都較為龐大、復雜,動輒就幾千,甚至上萬行代碼,隨著時間的增長,功能的復雜化,對這些邏輯業(yè)務進行修改變得越來越困難。我院此次重建HIS系統(tǒng),采用微服務架構技術,重點對業(yè)務邏輯層進行重構。系統(tǒng)設計時,首先保證新的HIS系統(tǒng)能夠實現(xiàn)目前系統(tǒng)中所有的邏輯業(yè)務,之后以微服務架構的原則為準則,對這些邏輯業(yè)務進行拆分,以拆分后微服務的邏輯功能最小化為標準,將原有的邏輯業(yè)務拆分為各個“原子服務”,然后,對這些 “原子服務”再組合,重新實現(xiàn)邏輯層的各個邏輯業(yè)務。
根據上述設計原則,以收費業(yè)務邏輯為例,具體說明如何運用微服務技術實現(xiàn)邏輯業(yè)務。傳統(tǒng)HIS系統(tǒng)在進行收費操作時,客戶端通過刷卡等操作獲取患者的掛號信息,確認掛號信息后,讀取該掛號信息相關的收費信息,確認無誤完成一次收費操作。在傳統(tǒng)的HIS系統(tǒng)中,收費業(yè)務邏輯為以上完整的業(yè)務功能,不可進行分割。在微服務架構技術下,對原來完整的業(yè)務邏輯進行拆分,得到如下原子服務:獲取患者基本信息、獲取掛號信息、獲取收費信息、更新收費信息和醫(yī)保通信等。通過對這些原子服務組合,重新構建一次收費操作的業(yè)務邏輯,如圖2所示。
圖2 收費業(yè)務邏輯示意圖
將原本一個完整邏輯業(yè)務拆分成若干“原子服務”,這些“原子服務”不僅能在收費的邏輯業(yè)務中使用,也能在其他邏輯業(yè)務中使用,這樣便節(jié)省了很多重復代碼的開發(fā),加強代碼的復用性。同時,新HIS系統(tǒng)中邏輯業(yè)務是由“原子服務”進行組合實現(xiàn)的,在醫(yī)院提出新需求時,不需要重新編寫完整的業(yè)務邏輯來實現(xiàn)這些需求,通過對這些成熟的“原子服務”重新組合,便可快速完成新需求的開發(fā)。通過微服務架構的改造,可在很大程度上避免系統(tǒng)由于框架設計時的缺陷,而導致系統(tǒng)大規(guī)模修改的窘境。
界面層的需求與傳統(tǒng)的HIS系統(tǒng)保持一致,支持多終端、多方式的訪問。例如:電腦、手機APP和網頁等,滿足系統(tǒng)易部署的設計目標。在與業(yè)務邏輯層通信上,使用WCF(Windows Communication Foundation)與RPC(Remote Procedure Call)框架,進一步加強系統(tǒng)多樣化的部署,并且提高系統(tǒng)的開發(fā)效率以及接口的復用性。
在數(shù)據庫的設計上,并未進行大的改變,仍以目前的數(shù)據庫庫表結構為主,根據業(yè)務邏輯層的需要,對數(shù)據庫庫表進行調整。在數(shù)據庫讀寫性能方面,使用SqlSugar框架,使邏輯層生成的數(shù)據能夠快速、準確的存入數(shù)據庫。同時采用Redis數(shù)據結構:支持string(字符串)、list(列表)、set(集合)、zset(sorted set --有序集合)和hash(哈希)5種數(shù)據類型,其亦適用于分布式緩存技術和消息隊列的通信,同時結合數(shù)據庫緩存RAC(Real Application Cluster) Cache技術,建立整套高性能的數(shù)據存儲系統(tǒng)。由于對業(yè)務邏輯整體進行重構,原本HIS系統(tǒng)中一些重要的查詢功能便無法實現(xiàn)了,為了滿足這些重要的查詢功能,通過緩存數(shù)據庫(Redis RAC Cache),建立臨時表,存儲原HIS系統(tǒng)中這些重要的查詢數(shù)據。這些數(shù)據在寫入數(shù)據庫的同時,寫入這些臨時表里,方便實現(xiàn)重要的查詢功能。
數(shù)據庫的安全性與冗余性方面,使用多級數(shù)據庫備份來實現(xiàn)。數(shù)據庫系統(tǒng)由一個主數(shù)據庫和三個備份數(shù)據庫組成。在三個備份庫中,其中一個備份庫與主數(shù)據庫采取瞬時同步的方式,對數(shù)據進行實時同步備份,在主數(shù)據庫遇到故障時可及時切換,加強數(shù)據庫的災備能力;另外兩個備份庫采用異步同步的方式與上述備份庫進行數(shù)據同步,這兩個備份庫對數(shù)據采取只讀模式,主要用于報表統(tǒng)計、歷史數(shù)據查詢等操作,不再負責系統(tǒng)中各功能模塊的查詢應用。
在新的HIS系統(tǒng)中,設置了應用性能監(jiān)測軟件(APM),對HIS系統(tǒng)的整體運行情況進行監(jiān)測,及時反映系統(tǒng)的運行狀況。除了APM之外,新HIS系統(tǒng)的日志功能也做了強化:對系統(tǒng)內的所有操作都進行記錄。傳統(tǒng)的HIS系統(tǒng),并不是對所有操作都進行日志記錄,多數(shù)操作只保存其最后一次,對于中間的過程無法進行追溯。在新HIS系統(tǒng)中,對系統(tǒng)中每一次操作都進行日志記錄,方便問題的查找與修改。為了能夠更清晰的表現(xiàn)業(yè)務的操作,新HIS系統(tǒng)中對于數(shù)據庫的操作只采用正負標記進行“寫”(加)的操作,不使用更新(update)操作。例如,如果進行一次退費操作,則對現(xiàn)有收費記錄進行一次加“-1”的收費操作。新HIS系統(tǒng)的架構,如圖3所示。
圖3 新HIS系統(tǒng)架構圖
系統(tǒng)測試在系統(tǒng)開發(fā)過程中是非常重要的一環(huán),本次新HIS系統(tǒng)測試,以測試驅動開發(fā)(Test-driven Development)模型為理論指導,采用單元測試的方式進行。單元測試中,以各個微服務為最小單位進行。在此基礎上,利用歷史數(shù)據對完整的邏輯業(yè)務進一步測試,對系統(tǒng)業(yè)務邏輯的準確性進行反復驗證。整個開發(fā)測試過程以持續(xù)集成、持續(xù)交付的方式進行,使系統(tǒng)開發(fā)過程中遇到的問題盡早暴露與解決。
在信息化高速發(fā)展的時代,各行各業(yè)都向著自動化、智能化的方向高速發(fā)展,醫(yī)院對信息化的需求與期待也是越來越重。HIS系統(tǒng)作為醫(yī)療信息化的核心系統(tǒng),在醫(yī)院信息化發(fā)展過程中有著舉足輕重的作用。此次運用微服務架構技術,對HIS系統(tǒng)所有的業(yè)務邏輯進行重構,就是改變傳統(tǒng)HIS系統(tǒng)不易修改、擴展性能低的短板。在面對醫(yī)院緊急的、新的需求時,信息中心可根據成熟、穩(wěn)定的微服務群快速地構建出所需要的新功能,使新HIS系統(tǒng)能持續(xù)不斷地支持臨床一線的工作。在數(shù)據統(tǒng)計方面,亦可通過微服務來獲取各類較復雜的數(shù)據,快速創(chuàng)建出醫(yī)院需要的報表。通過系統(tǒng)重建,新HIS系統(tǒng)以更為先進、合理的技術與架構獲得新生,在未來醫(yī)院的發(fā)展中會更有力地促進醫(yī)院智慧化的建設。