葉遠(yuǎn)清
(廣州市第十二人民醫(yī)院 廣東省廣州市 510620)
現(xiàn)代化智慧醫(yī)院需要部署眾多信息系統(tǒng),為充分利用物理服務(wù)器資源,通常采用虛擬化平臺(tái)創(chuàng)建虛擬機(jī)進(jìn)行部署,但商業(yè)的虛擬化平臺(tái)費(fèi)用高昂,一種替代方案是采用開源虛擬化平臺(tái)OpenStack。OpenStack 的基礎(chǔ)核心服務(wù)如虛擬機(jī)管理、虛擬網(wǎng)絡(luò)構(gòu)建、塊存儲(chǔ)管理等都很成熟穩(wěn)定,但平臺(tái)自帶的控制面板服務(wù)Horizon 功能過于簡陋,其Web 操作界面并不能滿足生產(chǎn)環(huán)境的使用要求,如缺乏靈活的權(quán)限配置、缺乏訂單計(jì)價(jià)體系、監(jiān)控體系不完整等[1]。為了解決以上問題,本文基于OpenStack 設(shè)計(jì)了一套云管平臺(tái),通過OpenStack 的RESTfulAPI 接口,將底層云化管理的工作依托于OpenStack 實(shí)現(xiàn),而上層的業(yè)務(wù)相關(guān)操作控制臺(tái)則重新搭建。
OpenStack 是由美國國家航天局NASA 和Rackspace 共同發(fā)起的開源云計(jì)算軟件,由OpenStack 社區(qū)共同維護(hù),提供IaaS(InfrastructureasaService)層服務(wù),常用于企業(yè)搭建私有云平臺(tái)。通過OpenStack,可以對計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)等基礎(chǔ)設(shè)施物理資源進(jìn)行虛擬化管理[2],并以服務(wù)的形式提供給用戶或者PaaS(Platform as a Service)層服務(wù)使用。
經(jīng)過開源社區(qū)多年發(fā)展,OpenStack 軟件日趨完善,目前已經(jīng)發(fā)布22 個(gè)穩(wěn)定版本,核心服務(wù)都已非常穩(wěn)定。各核心服務(wù)的邏輯關(guān)系[3]如圖1所示。
Nova:計(jì)算虛擬化管理服務(wù),管理虛擬機(jī)的整個(gè)生命周期;Neutron:網(wǎng)絡(luò)虛擬化管理服務(wù),為其它服務(wù)提供網(wǎng)絡(luò)連接;Cinder:塊存儲(chǔ)管理服務(wù),為虛擬機(jī)提供塊存儲(chǔ);Swift:對象存儲(chǔ)管理服務(wù),為其它服務(wù)提供對象存儲(chǔ)管理,如為Glance 提供鏡像存儲(chǔ)服務(wù),為Cinder 提供卷備份管理服務(wù);Keystone:認(rèn)證管理服務(wù),為平臺(tái)提供身份認(rèn)證和訪問策略;Ceilometer:測量管理服務(wù),為計(jì)費(fèi)和監(jiān)控以及其它服務(wù)提供數(shù)據(jù)支撐;Glance:鏡像管理服務(wù),提供虛機(jī)鏡像上傳、檢索、管理服務(wù);Horizon:控制面板服務(wù),為其它服務(wù)提供Web 界面管理,簡化用戶操作。
經(jīng)過對需求的收集和甄別,確定整個(gè)云管系統(tǒng)需要如下子系統(tǒng):
圖1:OpenStack 核心服務(wù)邏輯關(guān)系
權(quán)限子系統(tǒng):靈活地對用戶、角色賦權(quán),管控資源訪問;用戶子系統(tǒng):按部門、角色管理用戶;計(jì)費(fèi)子系統(tǒng):對各用戶和部門的資源使用計(jì)費(fèi);價(jià)格子系統(tǒng):對資源標(biāo)定價(jià)格,對訂單做總價(jià)核算;訂單子系統(tǒng):對資源創(chuàng)建形成訂單,加入審批流程;搜索子系統(tǒng):對資源、訂單、日志、監(jiān)控信息檢索和分類;安全子系統(tǒng):接入安全產(chǎn)品,如WAF、防火墻、日志審計(jì)等;設(shè)備子系統(tǒng):方便地添加物理服務(wù)器,擴(kuò)容平臺(tái)計(jì)算節(jié)點(diǎn);VPN 子系統(tǒng):提供VPN 接入服務(wù);鏡像子系統(tǒng):管理系統(tǒng)鏡像;監(jiān)控子系統(tǒng):管理各種監(jiān)控信息;日志子系統(tǒng):收集分析各類服務(wù)日志。
在用戶層面,提供瀏覽器和手機(jī)APP 兩種使用方式,同時(shí)管理員和租戶分別使用管理端控制臺(tái)和租戶端控制臺(tái)。整個(gè)云管系統(tǒng)設(shè)計(jì)如圖2所示。
鑒于整個(gè)系統(tǒng)較復(fù)雜,功能繁多,本系統(tǒng)采用分層與微服務(wù)相結(jié)合的架構(gòu)[4],設(shè)計(jì)如圖3。
圖2:云管平臺(tái)系統(tǒng)設(shè)計(jì)
圖3:云管平臺(tái)架構(gòu)設(shè)計(jì)
整個(gè)系統(tǒng)分為界面表示層、接口匯聚層、應(yīng)用業(yè)務(wù)層、數(shù)據(jù)層和云化層。
界面表示層是用戶入口,處理界面展示和操作相關(guān)功能,采用VUE 框架實(shí)現(xiàn);接口匯聚層是網(wǎng)關(guān),統(tǒng)一管理與前端的API 接口。應(yīng)用業(yè)務(wù)層實(shí)現(xiàn)具體的業(yè)務(wù)邏輯,包含各個(gè)子業(yè)務(wù)的具體實(shí)現(xiàn),架構(gòu)設(shè)計(jì)上采用微服務(wù)架構(gòu),基于SpringCloud 微服務(wù)框架,各微服務(wù)通過基于http 協(xié)議的RPC(Remote Procedure Call 遠(yuǎn)程過程調(diào)用)進(jìn)行交互。
應(yīng)用業(yè)務(wù)層包括多個(gè)微服務(wù),每個(gè)微服務(wù)實(shí)現(xiàn)一個(gè)對應(yīng)的子系統(tǒng),如:Account Service 實(shí)現(xiàn)用戶子系統(tǒng),Order Service 實(shí)現(xiàn)訂單子系統(tǒng),Search Service 實(shí)現(xiàn)搜索子系統(tǒng),Monitor Service 實(shí)現(xiàn)監(jiān)控子系統(tǒng),Device Service 實(shí)現(xiàn)設(shè)備子系統(tǒng),Security Service 實(shí)現(xiàn)安全子系統(tǒng)等等。
其中特別的是Cloud Service,該微服務(wù)位于其它Service 與OpenStack 平臺(tái)之間,作為其它Service 與OpenStack 的溝通橋梁。Cloud Service 微服務(wù)通過RESTfulAPI 接口與OpenStack 交互。為了明確云管平臺(tái)與OpenStack 的技術(shù)邊界,方便后續(xù)開發(fā)維護(hù),只有Cloud Service 才與OpenStack 交互,其它微服務(wù)通過Cloud Service 與OpenStack 交互。通過這種隔離設(shè)計(jì),在系統(tǒng)內(nèi)構(gòu)建一層云化抽象層,只需調(diào)整Cloud Service 即可應(yīng)對OpenStack 的接口變動(dòng)。
應(yīng)用數(shù)據(jù)層負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)和管理,采用Mysql 負(fù)責(zé)持久化存儲(chǔ),Redis 負(fù)責(zé)緩存管理,ElasticSearch 則處理需要檢索的各類數(shù)據(jù),如日志、監(jiān)控?cái)?shù)據(jù)、資源明細(xì)等等。應(yīng)用數(shù)據(jù)層只負(fù)責(zé)應(yīng)用業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)和處理,不包括OpenStack 平臺(tái)的數(shù)據(jù)。
云化層是獨(dú)立部署的OpenStack 平臺(tái),為整個(gè)系統(tǒng)提供計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)等資源的虛擬化管理,相關(guān)功能都通過豐富的RESTfulAPI 接口提供給CloudService 調(diào)用。
本云管平臺(tái)在系統(tǒng)功能層面添加了賬戶、訂單、計(jì)價(jià)、權(quán)限、搜索、安全等功能,已能滿足大部分生產(chǎn)環(huán)境需求。在架構(gòu)設(shè)計(jì)上采用了分層+微服務(wù)的模式,帶來如下好處:
(1)界面表示層與接口匯聚層分離:界面表示層獨(dú)立開發(fā)、部署、測試,降低了開發(fā)期團(tuán)隊(duì)內(nèi)的溝通成本,與接口匯聚層通過API 交互,在瀏覽器和手機(jī)端共用一套API 接口,減少開發(fā)工作量,也便于后期維護(hù);
(2)應(yīng)用業(yè)務(wù)層與云化層分離:隔離了OpenStack 技術(shù)棧的復(fù)雜性。后續(xù)OpenStack 平臺(tái)做版本升級,云管平臺(tái)只需要根據(jù)OpenStack 新版本的接口變動(dòng),對CloudService 做適配修改即可;
(3)各微服務(wù)功能明確,任務(wù)單一,降低構(gòu)建整體系統(tǒng)的復(fù)雜性;
(4)采用微服務(wù)的開發(fā)模式,開發(fā)團(tuán)隊(duì)管理上可圍繞業(yè)務(wù)功能組建小開發(fā)團(tuán)隊(duì),更加符合企業(yè)的分工和組織結(jié)構(gòu);小開發(fā)團(tuán)隊(duì)更加關(guān)注自己的成果,方便管理;
(5)微服務(wù)橫向擴(kuò)展方便,微服務(wù)實(shí)例是無狀態(tài)的,狀態(tài)信息保存在應(yīng)用數(shù)據(jù)層,靈活地增減微服務(wù)實(shí)例即可擴(kuò)展/縮小系統(tǒng)的處理能力,彈性應(yīng)對實(shí)際使用環(huán)境;
(6)微服務(wù)結(jié)合docker,方便容器化[5],結(jié)合K8S 平臺(tái),統(tǒng)一編排,更加方便運(yùn)維。
采用分層+微服務(wù)架構(gòu),小版本更新不影響業(yè)務(wù)連續(xù)性,只需要啟動(dòng)新版本微服務(wù),再關(guān)閉老版本微服務(wù)即可。隨著系統(tǒng)實(shí)施,功能增多,微服務(wù)間調(diào)用關(guān)系越來越復(fù)雜,如何讓調(diào)用關(guān)系更可控合理,是下來要優(yōu)化考慮之處。