系統架構設計師論文--可靠性設計


-- 摘要

      2019年8月,我司承接了某市醫療集團,智慧葯房項目,該項目主要為集團下屬36家社區衛生服務中心提供葯品統一目錄管理、葯品集中采購、庫存管理、處方合理用葯審核、葯品配發、自動化發葯設備驅動提供軟件支撐。在該項目中我擔任了軟件架構設計師一職,主要負責該項目的軟件架構設計工作。
 

      本文以智慧葯房項目為例,主要論述了可靠性技術在項目中的具體應用, 通過將平台服務層進行集群化部署,數據庫分布式主從模式,以及服務器RAID磁盤陣列,對平台服務層、數據庫以及硬件存儲多維度的容錯、容災機制,提高了項目件硬件的可用性,安全性和可擴展性。通過可靠性技術的應用,提供了軟件運行的質量,保障一軟件能夠7*24小時的穩定運行,最終項目成功上線,並獲得了用戶的一致好評


-- 背景(所有論文同一個項目)

      根據深化醫葯衛生體制改革規范葯求,推進葯品集中采購,增加葯品的供應保障能力,嚴格監督管理,保障葯品的用葯安全,所有醫療機構開出的處方,必須通過處方審核后,方可進入划價計費環節,未經審核的處方,不得進行計費和配發。2019年8月,我司承接了某醫療集團智慧葯房項目,該項目為醫療集團下屬36家社區衛生服務中心提供軟件支持,主要分為葯品供應模塊、葯房管理模塊、處方用葯審核模塊、葯品配發模塊、設備協同模塊。葯品供應模塊負責葯品庫存預警,供社區衛生服務中心葯房對葯品進行集中采購,並將葯品發送到省采招平台;葯房管理模塊主要進行一些基礎信息的維護,及關注葯品的庫存管理,葯品批號跟蹤;處方用葯審核模塊,負責對醫生開出的葯品進行合理用葯審核,將不合理的處方審核結果返回給醫生,提醒醫生修改處方;葯口中配發模塊,負責將處方中的葯品進行調配,打印用法用量標簽,確認發葯后扣減相應的庫存;設備協同模塊主要是驅動葯房中的一些自動化發葯設備,將要葯品信息發給設備上位機,根據設備葯品的效期進行排序,通過上位機程序調用下位機,驅動設備出葯。在該項目中我擔任軟件架構設計師職務,主要負責軟件的架構設計及中間件等技術的選型工作。
 
 ----中間正文主體 800~1000字左右

      軟件可靠性設計主要通過冗余、心跳等技術對軟件進行可靠性的設計,確保軟件的穩定運行。冗余可以從硬件、軟件兩個方面着手,硬件可以使用多台服務器做容災處理,大型項目會應用異地部署服務器的方式,防止因服務器故障、斷網、斷電或地震等不可抗拒的自然災害造成服務不可用,給企業和用戶造成損失,軟件層面可以使用多應用部署群集,確保在一個應用出現異常時,可以繼續工作。同時應用負載均衡,CDN等技術進行用戶請求分流,保證用戶訪問性能的同時,對應用進行減壓,數據庫一般可以采用主從復制的方式部署。
--簡介--中間過度作用
    本文以智慧葯房項目為例,將從集群化部署、數據庫主從、軟件冗余部署方面論述了可靠性架構設計在項目中的應用。
--介紹三種的應用
     集群化部署:項目為了防止一台服務器出現故障,導致應用系統不可用,采用了多服務器冗余方式,以N+1的標准選了三台服務器做冗余,並且對服務器磁盤做了RAID5陣列,項目采用前后端分離的方式,前台采用Vue.js,后端平台服務采用的Java語言開發,前端Web應用系統分別在服務器上部署了三個節點,並且通過使用Nginx做反向代理,使得應用不直接對外暴露,提高了安全性,同時配置了集群模式,將用戶請求進行分流,提交了系統的可靠性同時也提高了性能,平台服務層以Docker的方式進行發布,並且通過K8S進行管理,同時引入了SkyWalking對接口鏈路進行監控,並且通過Spring Admin 對服務節點進行監控,一旦鏈路應用節點發生故障,立馬發送郵件給運維人員,讓其及時干預,Java服務采用SpringCloud做微服務架構,通過 Nacos 進行服務注冊與發現,通過網關將服務暴露給前端Web層調用。
      數據庫主從:項目中數據層采用了關系型數據庫MySQL,以及NoSQL 非關系型 MongoDB同進為了減輕數據庫的壓力,引入了Redis緩存。MySQL主要存放一些業務數據,如醫生開出的處方數據,以及葯品目錄,ymtlwyth以及采購訂單,配送入庫單等,這些數據的特點是使用頻率不同,但極其重要,采用了主從復制的方式對MySQL進行了冗余,在Redis中使用了哨兵主從進行三個節點部署,當Master發生故障時,哨兵從新選出一個主節點,Redis主要存放葯品庫存信息,在醫生開處方時會檢查葯房葯品庫存信息,葯房將葯品發現時會扣除相應的庫存,對同一個葯品的數量變化頻率相當高,而且要及時,否則醫生將葯開出來后,患者到葯房取葯時,取不到葯,增加醫患矛盾,,影響醫生開處方的效率及數據一致性及庫存及時性。因此引入了Redis緩存,在審方模塊中18萬種葯品的相互作用關系數據量以迪卡爾積的量級存在,因些采用了適合處理大數據的MongoDB,MongoDB在配置文件中同樣做了主從方式。
      程序容錯設計:程序設計及開發中需要考慮容錯機制,否則出現錯誤后可能導致不可用的情況發生,首選在獲取對象屬性時,要做異常判斷,我們采用了阿里的Java契約插件,可以描述出一些可能出現異常的代碼,實現方式,加入了 try catch 異常處理機制,對於數據訪問層,通過Spring Data中的Redis Template 以及 MongoDB 的 Template 進行主從連接配置,對於MySQL采用 MyCat 進行讀寫分離,在主節點發生故障時,能自動識別新的主節點。微服務開發新業務升級時,不影響現有項目的運行。

 -- 結尾
  項目從2019年8月啟動到2020年10月歷時14個月,圓滿完成,順利完成驗收,並取得了客戶的一致好評,該項目運行一年多,也出現過一些小的問題, 由於醫院使用的是集團內部局域網,與外網隔離,給排查問題及維護增加了困難,一次發葯設備上的上位機不心小被葯房老師刪除后,不會重新安裝操作,上報我司后,我們聯系醫院信息科老師,在信息科的老師協助下,對軟件重新進行了安裝,此次事件,導致了設備停止工作了幾個小時,影響了葯房發葯效率。后來我司安排了1名售后維護該項目,這一年內也新增了一些發葯設備,由於選用了合適的微服務架構,使得設備的接入及服務的擴展變得非常容易,在售后同事的協助下,系統至今運行穩定。該項目的成功,讓我意識到了使用了 可靠性架構設計的作用和價值,堅定了我對 可靠性架構設計應用的信心,合理選擇合適的 可靠性架構設計,能夠大大的提高了軟件設計的復用方法,加快開發的進程,在項目中起到事半功倍的作用。經過這次項目,我也看到了自己身上的不足之處,在未來還會不斷地更新知識,完善本系統的設計,使系統能夠適應國家醫改的變化需要,這是作為軟件從業的我為之努力的動力和方向。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM