趙 軍,陳子晗,高子航
(1.中國電子科技集團(tuán)公司第五十四研究所,河北 石家莊 050081;2.中國科學(xué)技術(shù)大學(xué) 數(shù)學(xué)科學(xué)學(xué)院,安徽 合肥 230026;3.華中科技大學(xué),湖北 武漢 430074)
目前企業(yè)采用SOA架構(gòu)開發(fā)的應(yīng)用系統(tǒng),如合同、項(xiàng)目、物資、質(zhì)量和售后等,均為傳統(tǒng)單體架構(gòu)模式構(gòu)建,即每個(gè)系統(tǒng)的所有功能均為一個(gè)獨(dú)立應(yīng)用,系統(tǒng)是最小的交付和部署單元[1]。系統(tǒng)間信息的傳遞與共享采用企業(yè)服務(wù)總線(ESB)實(shí)現(xiàn),系統(tǒng)中業(yè)務(wù)流程的改變、功能的拓展,均需對(duì)原系統(tǒng)及接口進(jìn)行程序改造并部署[1]。隨著企業(yè)應(yīng)用系統(tǒng)數(shù)量、規(guī)模和復(fù)雜度的不斷增長,傳統(tǒng)開發(fā)模式在系統(tǒng)的開發(fā)、拓展、部署和維護(hù)等方面均面臨新的挑戰(zhàn)。
近幾年,國內(nèi)外越來越多的企業(yè)將系統(tǒng)從傳統(tǒng)單體架構(gòu)遷移到MSA,如國外的Netflix,Amazon,eBay,IBM Bluemix等,國內(nèi)也有許多成功的實(shí)踐案例,如阿里巴巴開源的MSA Dubbo、京東的MSA JSF等[1]。目前,基于MSA構(gòu)建系統(tǒng)應(yīng)用已成為一種新選擇[2]。
前Netflix首席架構(gòu)師Adrian Cockroft將微服務(wù)定義為細(xì)粒度的SOA[2],核心是將傳統(tǒng)單體架構(gòu)應(yīng)用劃分成多個(gè)獨(dú)立服務(wù),服務(wù)之間采用輕量級(jí)通信進(jìn)行相互協(xié)作和調(diào)用。該架構(gòu)具有快速開發(fā)、部署獨(dú)立、故障隔離以及技術(shù)多元化等特點(diǎn),能縮短開發(fā)周期、快速交付應(yīng)用[2]。
文獻(xiàn)[1-8]給出了應(yīng)用架構(gòu)的演變過程,各應(yīng)用架構(gòu)的優(yōu)缺點(diǎn)、MSA的定義及實(shí)現(xiàn)原理,文獻(xiàn)[2-15]給出了MSA的優(yōu)缺點(diǎn)及應(yīng)用實(shí)踐,文獻(xiàn)[5-20]給出了MSA設(shè)計(jì)及編碼實(shí)現(xiàn)方式。
本文在一體化科研管理平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)中,對(duì)應(yīng)用架構(gòu)進(jìn)行了對(duì)比、分析、研究,給出了采用MSA改造合同管理系統(tǒng)、項(xiàng)目管理系統(tǒng)的應(yīng)用實(shí)踐。
微服務(wù)是近幾年出現(xiàn)的用于處理復(fù)雜應(yīng)用的系統(tǒng)架構(gòu)方法論,是SOA思想的一種實(shí)現(xiàn),其核心理念在于,將復(fù)雜應(yīng)用進(jìn)行服務(wù)化切分,即把單一應(yīng)用系統(tǒng)以獨(dú)立業(yè)務(wù)單元的形式拆分為多個(gè)服務(wù),每個(gè)服務(wù)可選擇適合的技術(shù)實(shí)現(xiàn)特定業(yè)務(wù)功能,并以獨(dú)立的進(jìn)程部署、運(yùn)行。服務(wù)之間功能邊界清晰,采用REST/JSON等輕量級(jí)的通信機(jī)制相互溝通,相互配合實(shí)現(xiàn)完整應(yīng)用[2]。
該架構(gòu)旨在通過將功能分解到多個(gè)自治單元服務(wù)中以實(shí)現(xiàn)對(duì)復(fù)雜應(yīng)用的快速開發(fā),其本質(zhì)是由一組可獨(dú)立交付的微服務(wù)業(yè)務(wù)單元構(gòu)成的分布式系統(tǒng)[2]。
主要特點(diǎn)如下[3]:
① 復(fù)雜度可控:微服務(wù)將復(fù)雜的應(yīng)用系統(tǒng)按業(yè)務(wù)功能分解為功能單一、易于管理的多個(gè)服務(wù),系統(tǒng)的復(fù)雜度取決于服務(wù)的劃分;
② 架構(gòu)靈活:對(duì)大型復(fù)雜應(yīng)用,可將多個(gè)微服務(wù)采用負(fù)載均衡的分布式架構(gòu)部署,最大程度地滿足用戶性能要求;
③ 技術(shù)多元化:每個(gè)微服務(wù)可根據(jù)業(yè)務(wù)功能特點(diǎn)及行業(yè)發(fā)展趨勢(shì)選擇適合的技術(shù)開發(fā),使服務(wù)的開發(fā)和維護(hù)便捷、高效;
④ 功能易擴(kuò)展:每個(gè)微服務(wù)功能單一,可獨(dú)立擴(kuò)展、變更服務(wù)下的業(yè)務(wù)功能,而不影響其他微服務(wù);
⑤ 獨(dú)立自治:每個(gè)微服務(wù)可獨(dú)立封裝業(yè)務(wù)邏輯,以獨(dú)立進(jìn)程運(yùn)行,故可單獨(dú)開發(fā)、測(cè)試、部署和維護(hù)。
SOA是一種粗粒度、松耦合的服務(wù)架構(gòu)[1],應(yīng)用核心是業(yè)務(wù)邏輯,以服務(wù)封裝業(yè)務(wù)流程,采用中間件集中式總線,即ESB對(duì)每個(gè)業(yè)務(wù)流程實(shí)施控制、跟蹤、改進(jìn),并進(jìn)行跨平臺(tái)的多應(yīng)用系統(tǒng)間集成,ESB具有數(shù)據(jù)轉(zhuǎn)換、負(fù)載均衡、服務(wù)管理和服務(wù)監(jiān)控等諸多功能,有效解決了應(yīng)用系統(tǒng)的異構(gòu)和復(fù)用問題,但其結(jié)構(gòu)復(fù)雜,開發(fā)周期長,系統(tǒng)升級(jí)維護(hù)成本高,不利于業(yè)務(wù)功能的擴(kuò)展和流程的變更[2]。
相比之下,MSA采用細(xì)粒度的服務(wù),沒有結(jié)構(gòu)復(fù)雜的ESB,它將大型、復(fù)雜的應(yīng)用構(gòu)建為一組相互配合的服務(wù),每個(gè)服務(wù)業(yè)務(wù)單一、功能明確,服務(wù)間采用輕量級(jí)通信進(jìn)行接口調(diào)用,服務(wù)開發(fā)測(cè)試與部署相互獨(dú)立,使系統(tǒng)具有良好的擴(kuò)展性[5]。
SOA更傾向于是一種體系和指導(dǎo)思想,不是具體的實(shí)現(xiàn)方法。而MSA本質(zhì)上可以說是面向服務(wù)應(yīng)用級(jí)別的實(shí)現(xiàn)方式。
MSA與SOA在許多方面不同,主要區(qū)別如表1所示。
表1 SOA與MSA比較
指標(biāo)SOAMSA 適用系統(tǒng)靜態(tài)、企業(yè)級(jí)大型應(yīng)用快速迭代、快速交付應(yīng)用服務(wù)粒度服務(wù)粒度大、功能較多 服務(wù)粒度細(xì)、功能單一架構(gòu)模式集中式架構(gòu)分布式架構(gòu)通信機(jī)制SOAP,ESB等服務(wù)總線,重量級(jí)基于HTTP的RESTful、輕量級(jí)實(shí)現(xiàn)方式J2EE/EJB/WebServiceDocker/RESTful部署方式統(tǒng)一的平臺(tái)獨(dú)立進(jìn)程、可不同平臺(tái)
企業(yè)在科研管理領(lǐng)域已建成了合同、項(xiàng)目等系統(tǒng),對(duì)合同收付款、項(xiàng)目執(zhí)行等相關(guān)業(yè)務(wù)過程進(jìn)行了有效管理,但系統(tǒng)建設(shè)之初,均基于某一業(yè)務(wù)部門內(nèi)部的管理需求,隨著應(yīng)用的深入,現(xiàn)有的系統(tǒng)在運(yùn)行中暴露出以下問題:
① 僅對(duì)合同的基本信息及收付款情況進(jìn)行登記,全流程、系統(tǒng)化的業(yè)務(wù)梳理不夠,相關(guān)部門需求覆蓋不全,缺乏有效的合同管控手段及風(fēng)險(xiǎn)預(yù)警能力;
② 收款業(yè)務(wù)與項(xiàng)目系統(tǒng)存在業(yè)務(wù)交叉、合同信息多源頭錄入等問題,致使合同信息不準(zhǔn)確;
③ 收款計(jì)劃與項(xiàng)目執(zhí)行計(jì)劃缺乏關(guān)聯(lián),使合同收款節(jié)點(diǎn)狀態(tài)不能準(zhǔn)確掌控;
④ 付款計(jì)劃與采購業(yè)務(wù)缺乏一體化管控手段,依靠人工跟蹤,工作量大、效率低下,準(zhǔn)確性差;
⑤ 合同管理與財(cái)務(wù)支付缺乏有效集成,無法獲取合同的結(jié)算信息;
⑥ 收款、付款毫無關(guān)聯(lián),無法做到準(zhǔn)確的資金預(yù)測(cè),導(dǎo)致合同履約過程中難以進(jìn)行統(tǒng)一監(jiān)督、跟蹤;
⑦ 缺乏往來單位收款付款全過程數(shù)據(jù)的統(tǒng)一管理,無法滿足各級(jí)領(lǐng)導(dǎo)對(duì)合同多維分析需要。
為解決上述問題,滿足企業(yè)不斷發(fā)展的業(yè)務(wù)需要及當(dāng)前形勢(shì)對(duì)科研管理精細(xì)化的要求,迫切需要利用先進(jìn)信息技術(shù)手段,對(duì)現(xiàn)有合同、項(xiàng)目系統(tǒng)進(jìn)行功能擴(kuò)展和改造,實(shí)現(xiàn)合同收付款計(jì)劃與業(yè)務(wù)執(zhí)行的一體化管控,促進(jìn)信息系統(tǒng)業(yè)務(wù)的連續(xù)性。
一體化科研管理平臺(tái),涉及合同、項(xiàng)目、采購、質(zhì)量和財(cái)務(wù)等多個(gè)業(yè)務(wù)領(lǐng)域,實(shí)現(xiàn)原理如圖1所示,其核心思想是打破現(xiàn)有多個(gè)業(yè)務(wù)系統(tǒng)間的界限,重構(gòu)系統(tǒng)功能,將目前各領(lǐng)域的業(yè)務(wù)系統(tǒng)進(jìn)行補(bǔ)充、分解、重構(gòu)成獨(dú)立的業(yè)務(wù)功能模塊,進(jìn)一步構(gòu)建一體化科研業(yè)務(wù)模型,以向用戶提供連續(xù)的跨領(lǐng)域的管理平臺(tái),促進(jìn)信息系統(tǒng)之間業(yè)務(wù)流程的連續(xù)性;使用戶對(duì)同一事項(xiàng)或任務(wù)的處理無需在不同系統(tǒng)或領(lǐng)域模塊間切換。
具體方式為:將企業(yè)現(xiàn)有合同管理、項(xiàng)目管理、采購管理、質(zhì)量管理、財(cái)務(wù)管理和成本管理等多個(gè)單體應(yīng)用系統(tǒng)的業(yè)務(wù)功能、流程進(jìn)行梳理,補(bǔ)充、分解、重構(gòu)現(xiàn)有功能,依據(jù)業(yè)務(wù)功能及業(yè)務(wù)之間的關(guān)聯(lián)關(guān)系程度構(gòu)建一體化科研業(yè)務(wù)模型,如合同信息管理、合同收款管理、項(xiàng)目立項(xiàng)管理等多個(gè)功能模塊,采用MSA,將每個(gè)功能模塊微服務(wù)化,如合同服務(wù)、項(xiàng)目服務(wù)和采購服務(wù)等,從而為使用人員提供良好的用戶體驗(yàn)。
圖1 一體化科研管理平臺(tái)工作原理
一體化科研管理平臺(tái)采用多層架構(gòu)進(jìn)行設(shè)計(jì),如圖2所示,分別為應(yīng)用層、服務(wù)層、數(shù)據(jù)層、監(jiān)控層和安全層。其中,應(yīng)用層“以用戶為中心”,為用戶提供個(gè)性化功能服務(wù),主要關(guān)注用戶體驗(yàn)與業(yè)務(wù)功能;服務(wù)層是MSA的核心,采用服務(wù)化方式,通過“去中心化”的服務(wù)組合調(diào)用與重組來滿足不同用戶的功能需求;監(jiān)控層、安全層對(duì)整個(gè)系統(tǒng)進(jìn)行統(tǒng)一的運(yùn)維和安全管理。
圖2 一體化科研管理平臺(tái)總體架構(gòu)設(shè)計(jì)
API服務(wù)網(wǎng)關(guān):一體化科研管理平臺(tái)的統(tǒng)一訪問入口,具有負(fù)載均衡、服務(wù)路由和請(qǐng)求過濾等功能,它對(duì)一體化科研管理平臺(tái)內(nèi)部的所有服務(wù)進(jìn)行了封裝,對(duì)外部公共的API與內(nèi)部服務(wù)進(jìn)行了隔離,有效保障了平臺(tái)的安全性。
服務(wù)層:依據(jù)服務(wù)的作用又分為基礎(chǔ)平臺(tái)微服務(wù)、業(yè)務(wù)共享微服務(wù)和定制微服務(wù)?;A(chǔ)平臺(tái)微服務(wù)如元數(shù)據(jù)管理微服務(wù)、工作流引擎微服務(wù)等為其他業(yè)務(wù)服務(wù)提供技術(shù)支撐;共享業(yè)務(wù)微服務(wù)對(duì)共性業(yè)務(wù)服務(wù)進(jìn)行抽取,為其他業(yè)務(wù)提供服務(wù);定制微服務(wù)實(shí)現(xiàn)特定領(lǐng)域功能。
數(shù)據(jù)層:通過數(shù)據(jù)總線為服務(wù)層應(yīng)用提供數(shù)據(jù)訪問接口。
基于MSA的一體化科研管理平臺(tái)依據(jù)服務(wù)的性質(zhì)和作用將服務(wù)分為3大類:基礎(chǔ)平臺(tái)微服務(wù)、業(yè)務(wù)共享微服務(wù)和業(yè)務(wù)定制微服務(wù),每類下又包含若干微服務(wù),如表2所示。其中,與業(yè)務(wù)相關(guān)的微服務(wù)劃分一方面依據(jù)業(yè)務(wù)功能特點(diǎn)及業(yè)務(wù)之間的關(guān)系,另一方面跟開發(fā)所需技術(shù)相關(guān),同一業(yè)務(wù)實(shí)現(xiàn)技術(shù)不同將被劃分為不同的服務(wù)。
在一體化科研管理平臺(tái)的合同系統(tǒng)、項(xiàng)目系統(tǒng)的微服務(wù)改造中,將項(xiàng)目任命、項(xiàng)目計(jì)劃等作為業(yè)務(wù)共享微服務(wù),為合同信息管理、合同收款計(jì)劃提供服務(wù);而將只與自身業(yè)務(wù)相關(guān)的功能,如合同信息管理作為業(yè)務(wù)定制微服務(wù)。
表2 一體化科研管理平臺(tái)微服務(wù)列表
服務(wù)類型微服務(wù)名稱基礎(chǔ)平臺(tái)微服務(wù)元數(shù)據(jù)管理微服務(wù)工作流引擎微服務(wù)報(bào)表工具微服務(wù)備份管理微服務(wù)權(quán)限管理微服務(wù)業(yè)務(wù)共享微服務(wù)項(xiàng)目立項(xiàng)微服務(wù)項(xiàng)目任命微服務(wù)項(xiàng)目計(jì)劃微服務(wù)項(xiàng)目監(jiān)控微服務(wù)業(yè)務(wù)定制微服務(wù)合同信息管理微服務(wù)合同收款管理微服務(wù)收款任務(wù)管理微服務(wù)撥款管理微服務(wù)項(xiàng)目變更微服務(wù)……
一體化科研管理平臺(tái)開發(fā)采用以下關(guān)鍵技術(shù):
① 基于Spring Boot技術(shù):采用Spring Cloud為本系統(tǒng)的微服務(wù)技術(shù)應(yīng)用框架。具體技術(shù)是使用Eureka作為服務(wù)的注冊(cè)與發(fā)現(xiàn)中心,使用Ribbon實(shí)現(xiàn)客戶端負(fù)載均衡,使用Zuul實(shí)現(xiàn)智能網(wǎng)關(guān)、動(dòng)態(tài)路由,對(duì)外提供RESR API,使用Hystrix服務(wù)斷路器進(jìn)行服務(wù)保護(hù)等,Spring Cloudk框架既考慮Web應(yīng)用,也考慮今后手機(jī)APP應(yīng)用。
② 服務(wù)調(diào)用:采用基于AMQP協(xié)議的開源消息中間件RabbitMQ進(jìn)行服務(wù)間的異步調(diào)用,降低服務(wù)間的耦合度。
③ 服務(wù)監(jiān)控:使用Zipkin進(jìn)行服務(wù)鏈路的調(diào)用監(jiān)控,利用Kibana對(duì)運(yùn)維數(shù)據(jù)進(jìn)行分析并提供可視化展示。
④ 安全防護(hù):采用基于云平臺(tái)的安全措施進(jìn)行安全防護(hù)。
⑤ 服務(wù)部署:采用Docker虛擬化技術(shù)進(jìn)行自動(dòng)化部署。
微服務(wù)開發(fā)主要步驟如下:
① 創(chuàng)建Spring Cloud 配置服務(wù)器:首先創(chuàng)建項(xiàng)目,激活配置服務(wù)器,配置訪問路徑,然后對(duì)該項(xiàng)目下的所有服務(wù)實(shí)施配置管理。
② 微服務(wù)注冊(cè):使用Eureka作為客戶端的連接組件,作為注冊(cè)中心,為微服務(wù)提供注冊(cè)服務(wù)。
③ 微服務(wù)發(fā)現(xiàn)與應(yīng)用:通過添加@EnableDicoveryClient注解,使微服務(wù)啟動(dòng)時(shí)能自動(dòng)注冊(cè)至注冊(cè)中心。
④ 配置斷路器:使微服務(wù)啟動(dòng)后依賴于注冊(cè)中心,對(duì)微服務(wù)實(shí)施保護(hù)。
⑤ 配置前端HTML頁面:使用AngularJS技術(shù),將業(yè)務(wù)數(shù)據(jù)模型綁定到頁面變量,為用戶提供Web頁面訪問。
⑥ 微服務(wù)測(cè)試。
⑦ 微服務(wù)部署運(yùn)行。
通過將MSA應(yīng)用于一體化科研管理平臺(tái)的合同系統(tǒng)、項(xiàng)目系統(tǒng)改造中,將大而復(fù)雜的一體化科研管控問題分解為相對(duì)獨(dú)立的合同管理、項(xiàng)目管理等問題,使用一組小服務(wù)來開發(fā)單個(gè)復(fù)雜應(yīng)用,在企業(yè)的實(shí)際應(yīng)用中效果良好,達(dá)到預(yù)期目標(biāo),開發(fā)周期由原先預(yù)計(jì)的6個(gè)月,縮短為4.5個(gè)月,開發(fā)效率提高25%。實(shí)踐證明,采用MSA,在業(yè)務(wù)需求漸清晰的情況下,可實(shí)現(xiàn)業(yè)務(wù)功能快速迭代及敏捷開發(fā)。傳統(tǒng)開發(fā)方式與采用微服務(wù)架構(gòu)開發(fā)方式的比較如表3所示。
表3 2種開發(fā)方式開發(fā)周期對(duì)比 天
針對(duì)企業(yè)目前收款合同與項(xiàng)目執(zhí)行的業(yè)務(wù)現(xiàn)狀,在一體化科研管理平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)中,引入了MSA,通過對(duì)傳統(tǒng)單體架構(gòu)的合同管理系統(tǒng)與項(xiàng)目管理系統(tǒng)實(shí)施微服務(wù)改造,實(shí)現(xiàn)了收款合同、項(xiàng)目執(zhí)行的微服務(wù)化,促進(jìn)了信息系統(tǒng)業(yè)務(wù)流程的連續(xù)性,滿足了企業(yè)收款計(jì)劃與項(xiàng)目執(zhí)行計(jì)劃一體化管控需要。目前,系統(tǒng)已上線運(yùn)行,實(shí)踐證明,采用微服務(wù)改造后,可快速應(yīng)對(duì)企業(yè)組織及管理變化帶來的業(yè)務(wù)調(diào)整及需求變化,提高了一體化科研管理平臺(tái)的適用性和擴(kuò)展性,對(duì)后續(xù)其他系統(tǒng)的功能擴(kuò)展以及重構(gòu)提供了重要的指導(dǎo)意義。
微服務(wù)平臺(tái)建設(shè)是個(gè)不斷迭代完善的過程,在后續(xù)系統(tǒng)建設(shè)中,一方面要優(yōu)化和補(bǔ)充基礎(chǔ)平臺(tái)微服務(wù)功能,如完善調(diào)用服務(wù),除監(jiān)控服務(wù)運(yùn)行狀態(tài)外,還要對(duì)服務(wù)的安全性、日志和流量控制等方面進(jìn)行管理,以確保服務(wù)的高可靠性;另一方面,要結(jié)合業(yè)務(wù)需求不斷抽取、沉淀共享業(yè)務(wù)微服務(wù),使之為更多的定制業(yè)務(wù)提供服務(wù)。另外,隨著后續(xù)一體化科研管理平臺(tái)中質(zhì)量、采購等系統(tǒng)的不斷改造,微服務(wù)數(shù)量會(huì)逐漸增加,服務(wù)的運(yùn)維工作會(huì)變得十分繁重,還要考慮采取輕量級(jí)Docker容器技術(shù)進(jìn)行自動(dòng)化部署。