微服務在最近幾年逐漸成為非常火紅的技術新名詞。因為台灣有很多的大型企業,特別是商業銀行,面對使用者規模不斷的增長,業務需求變得日趨複雜,開發團隊的規模也跟著迅速膨脹,一般的單體應用程式早已無法滿足公司發展的需求,需要進行現代化數位轉型。
無獨有偶的是,台灣的醫療機構也正在進行HIS優化再造或改造的數位轉型。但我發現,很少有醫院會將微服務列為轉型的首選系統架構。有鑑於此,我在CIO雜誌發表一系列微服務架構的相關文章,希望能透過拋磚引玉,推廣醫院導入微服務重構現代化HIS架構,確保HIS服務的高可用性。
[ 下載 2020-21 CIO大調查報告,掌握最新IT採購趨勢 ]
微服務的好處包括容易開發、理解和維護,還可以獨立部署及獨立擴展,有非常高的靈活性。但是要建構高品質的微服務,必須要遵循幾個可被量化的原則,分別為穩定性、可靠性、可擴充性、容錯與應對任何災難的能力、高效能、監控及文件化等,才可以開發出一個真正高品質的HIS微服務。
HIS高品質服務要穩定又可靠
首先,HIS的高品質服務要穩定又可靠。它要有一個標準的開發生命週期,以敏捷開發方式的概念為例,程式碼必須要經過完整的單元測試、整合測試、端到端的測試,有辦法上線、測試、打包、建構和部署,這些都必須要用自動化的方式進行,也就是現在很熱門的 CI/CD(Continuous Integration/Continuous Deployment 或 Continuous Delivery)。
HIS同時要有標準的部署管道,部署可能要分很多階段,比如說階段部署(staging)或逐步部署(canary)。
逐步部署的英文會用金絲雀為名,是因為早期的礦工在挖礦時,如果礦場裡面煤氣太多,一不小心進去後就會身亡,所以礦工在進去礦場之前,會先放一隻金絲雀進去,如果金絲雀進去以後沒有回來,可能就是煤中毒,礦工就知道不可以進去礦場,如果放出去又飛回來,就代表礦場是安全的。
[ 加入 CIO Taiwan 官方 LINE 與 FB ,與全球CIO同步獲取精華見解 ]
所以系統在上線時,我們也可以用這樣的技巧,將寫完的程式先放到某一個單位試用,看看程式放進去有沒有問題,如果沒有問題,代表這支程式的功能是穩定的。逐步部署沒問題以後,再大量的慢慢擴展到各個使用者,直到正式的上線階段。
再來就是你的用戶端必須是已知的,同時對相依服務必須要進行故障規劃,也就是故障時要有備份、替代、回復以及快取等計畫。最後是必須要具有穩定又可靠的路由和服務發現的機制。
HIS高品質服務是可擴充性且高效能
接下來高品質服務的原則是針對可擴充性且高效能的準則。首先必須要有明確定義質跟量增長時的擴充計畫;必須要有效且充分的使用現有硬體資源;找出資源的瓶頸跟需求;再來就是以自動化擴充的方式來處理工作,譬如說現在有10個實例(Instance)在服務1000個人,假設已經擴充到2000個人的時候,就要能夠自動擴展到20個實例來服務客戶處理工作,這也是微服務的好處。
[CIO都在讀: 導入微服務重構現代化HIS架構 ]
其次就是相依性的服務會跟著增長,譬如說你原本的組成是A程式,但你可能要呼叫外部其他的服務,就得要有相對性的增長,才有辦法處理整個的服務;要隨著客戶端的擴充而擴充;服務一旦有故障時,會將工作自動重新導向到正常的工作服務,這也是為什麼要選擇微服務的重要關鍵指標。
最後是必須要去找可擴充性和高效能的程式語言來撰寫,有很多程式語言已經過時不符時宜,可能就要拋棄,重新用新的、可擴充性及高效能的程式來撰寫,才能夠用高效能的方式處理工作如處理和儲存資料。
HIS的高品質服務能容錯與應對任何災難
因為我們沒辦法保證服務永遠可以不中斷,就像現在我們面對COVID-19,沒辦法避免不撞到,所以要有容納的能力,也就是要有容錯免疫的機制,再來是一旦有問題時,要怎麼去面對。
所以我們必須要去盤點,怎麼避免單點故障,就算是單點故障,也不會影響整個微服務的生態;所以要辨別出所有可能故障的狀況,還有整個災難情境,包括硬體、通訊、相依性服務,甚至內部程式的故障,都必須要盤點出來。
[CIO都在讀: 將IT回歸到組織內部以提昇敏捷性 ]
再來就是必須要有完整的程式測試、壓力測試和混亂測試,確保微服務的彈性;故障檢測跟補救措施除了要做到自動化外,還要訂定服務發生中斷或者異常時的標準作業流程,一旦發生異常或中斷,需要執行哪些緊急應變措施。
HIS高品質服務受到適當的監控
HIS高品質服務必須要做到適當的監控,尤其是在主機、基礎建設、以及微服務層的關鍵數據,都必須要受到監控及記錄日誌,能夠查到在過去某個時間點的某些服務狀況;要有儀錶板能夠顯示所有的關鍵數據,而且可以讓大家可以一目了然的瞭解,如果要更深入瞭解資料內容,也可以下鑽去瞭解。
相關的警示必須要可以設定參數調控,每一個關鍵數據的閥值也都可以定義;必須要有專責的資訊人員,負責監控跟處理意外或停機的相關事宜;異常事件還有停機處理,都必須要以明確的補救、緩和與解決指令等的標準作業流程。
HIS高品質服務要有文件與教育訓練
最後,HIS高品質服務必須要有相關的文件跟教育訓練。不只是要有詳盡的文件,一旦微服務修改的時候,文件必須要同步更新。但若沒有定期檢視文件是不是有更新到最新版,正是業界常常被詬病的現象,文件剛開始都很齊全,但在不斷的更改時,往往會因為忙碌而沒有更改,最後回過頭來看,才發現怎麼跟線上的都不一樣。
文件的內容必須包括微服務的描述、架構圖、聯絡人員資訊、連結重要資訊、新人與程式的開發指南、服務的請求資訊、端點的資訊,還有相依的服務資訊、操作手冊,以及常見問答等。
開發人員跟團隊還有組織,都必須要能夠充分的瞭解微服務的品質和內容;要有一套維護的基本原則與標準,並且符合高品質的相關要求;服務團隊還要能夠進行架構審核跟高品質的稽核程序。
[ 大師開講─台大資管曹承礎教授:企業數位化 CIO的關鍵領導力 ]
結語
我們現在有了一套可以應用在每個微服務上的標準原則,每一個標準原則都有自己的特定要求,在任何滿足了這些要求的微服務,都可以在線上環境順利的處理業務流量,確保HIS的高度可用性。
高品質的原則標準有了,那麼我們要如何在真實的微服務生態系統裡去實現它們呢?從理論到實踐總是有一定難度的。但高品質標準的威力在於可行性與細節程度,它們必須能套用在整個微服務的生態系中,又能提供紮實的實作策略細節。可能很多開發人員會抗拒此標準,他們會爭辯說,採用微服務不就是為了速度、自由和效率嗎?那為什麼還要制訂這些標準?
確實,微服務架構為開發團隊帶來了自由和效率,但這也是高品質標準發揮作用的地方。所以,如何做到HIS高品質服務的標準原則,這些準則必須要遵循,否則就算微服務有多好用,也會有一些問題出現。就像傳統HIS架構要達到高品質服務時,為何會有事倍功半的問題?下期將會進一步詳述傳統HIS架構現存的相關問題。
口述/孫培然 彙整/CIO編輯室