鄭明釗,張建強(qiáng)
(中國(guó)移動(dòng)通信集團(tuán)設(shè)計(jì)院有限公司山東分公司,山東 濟(jì)南 250101)
基于微服務(wù)的大平臺(tái)系統(tǒng)架構(gòu)演進(jìn)探討
鄭明釗,張建強(qiáng)
(中國(guó)移動(dòng)通信集團(tuán)設(shè)計(jì)院有限公司山東分公司,山東 濟(jì)南 250101)
當(dāng)前很多企業(yè)和公司的生產(chǎn)平臺(tái)大都使用老舊的單塊架構(gòu)(Monolithic)模式,不易擴(kuò)展,且升級(jí)過程復(fù)雜,存在維護(hù)成本高、持續(xù)交付周期長(zhǎng)、靈活性差等多種問題。微服務(wù)(Microservice)的架構(gòu)模式將生產(chǎn)平臺(tái)拆分成一個(gè)一個(gè)非常細(xì)小的微服務(wù),每個(gè)微服務(wù)都單獨(dú)部署,將一組微服務(wù)進(jìn)行組合從而實(shí)現(xiàn)一個(gè)復(fù)雜的功能。微服務(wù)具有實(shí)現(xiàn)簡(jiǎn)單、業(yè)務(wù)專一、相互獨(dú)立、耦合度低、開發(fā)和維護(hù)成本低等優(yōu)點(diǎn)。另外,Spring Boot和Docker容器技術(shù)的發(fā)展,使得微服務(wù)的具體實(shí)現(xiàn)和部署變得非常方便。
單塊架構(gòu);微服務(wù);Spring Boot;容器
在過去相當(dāng)長(zhǎng)的一段時(shí)間內(nèi)傳統(tǒng)的單塊式(Monolithic)[1]系統(tǒng)架構(gòu)思維及技術(shù)一直統(tǒng)占據(jù)著主流的地位。單塊架構(gòu)具有如開發(fā)方便、容易部署、易于水平擴(kuò)展以及方便測(cè)試等許多優(yōu)點(diǎn)。但是隨著互聯(lián)網(wǎng)行業(yè)的不斷發(fā)展,各個(gè)公司的業(yè)務(wù)需求不斷增長(zhǎng),以及用戶量的激增,單塊架構(gòu)模式已經(jīng)慢慢的被互聯(lián)網(wǎng)的發(fā)展速度拋在了后面,面臨著巨大的挑戰(zhàn)。在這種趨勢(shì)下,單塊模式系統(tǒng)暴露出了持續(xù)交付周期增長(zhǎng)、新人培養(yǎng)時(shí)間增長(zhǎng)、技術(shù)選型成本高、可伸縮性差、靈活性降低,以及測(cè)試成本、構(gòu)建成本和維護(hù)成長(zhǎng)增加的不利局面。
當(dāng)前有很多公司或者機(jī)構(gòu)都還保留著一些使用單塊模式的開發(fā)架構(gòu),同樣出現(xiàn)了維護(hù)成本高、持續(xù)交付周期長(zhǎng)、靈活性差等一系列的問題。另外,有些公司在進(jìn)行不同的項(xiàng)目時(shí)會(huì)進(jìn)行重復(fù)開發(fā)相同的功能,這樣無疑增加了開發(fā)負(fù)擔(dān),而且還降低了工作效率。
在此背景下,微服務(wù)(Microservice)的誕生很好的解決了單塊模式的很多不足之處。微服務(wù)架構(gòu)模式提倡將應(yīng)用內(nèi)的子功能劃分成一組小的服務(wù),組合不同的服務(wù)就可以實(shí)現(xiàn)一個(gè)復(fù)雜的功能服務(wù)。
另外微服務(wù)的技術(shù)發(fā)展已經(jīng)有很多成熟的案例,使用容器等工具進(jìn)行開發(fā)的方式也有很多應(yīng)用。為了改進(jìn)過去老舊的生產(chǎn)平臺(tái)系統(tǒng),達(dá)到去中心化、快速迭代和持續(xù)交付的目的,無疑使用微服務(wù)的架構(gòu)模式是最為合適的。
所謂微服務(wù)[2],就是將應(yīng)用程序內(nèi)的功能盡可能的細(xì)進(jìn)行劃分,并將每個(gè)細(xì)小的功能作為一個(gè)獨(dú)立的服務(wù)。每個(gè)微小的服務(wù)間通常使用 HTTP API的方式進(jìn)行通信,而且他們都專注于具體的業(yè)務(wù)功能,擁有強(qiáng)壯的模塊邊界,可以獨(dú)立部署。每個(gè)服務(wù)進(jìn)行協(xié)調(diào)與配合,最終為用戶提供相應(yīng)的功能需求。
復(fù)雜度可控:微服務(wù)讓應(yīng)用被分解為多個(gè)可管理的分支或服務(wù),通過微服務(wù)架構(gòu)模式,讓復(fù)雜的功能,通過模塊化的方式呈現(xiàn)出來,讓單個(gè)服務(wù)更容易開發(fā)和維護(hù);
靈活可擴(kuò)展:微服務(wù)架構(gòu)模式使得每個(gè)服務(wù)獨(dú)立擴(kuò)展,每個(gè)服務(wù)可以進(jìn)行單獨(dú)的增減功能,使得整體變得非常靈活;
獨(dú)立部署:微服務(wù)具備獨(dú)立的運(yùn)行進(jìn)程,所以每個(gè)微服務(wù)也可以獨(dú)立部署。使用相同的部署環(huán)境可以實(shí)現(xiàn)批量快速部署微服務(wù)。
SOA(服務(wù)導(dǎo)向式架構(gòu))[3]在過去已經(jīng)存在了很長(zhǎng)時(shí)間,他是一種粗粒度、松耦合服務(wù)架構(gòu),服務(wù)之間通過簡(jiǎn)單、精確定義接口進(jìn)行通訊,不涉及底層編程接口和通訊模型?!拔⒎?wù)(micro service)”架構(gòu)是最近出現(xiàn)的新概念,目的是將大型的、復(fù)雜的、長(zhǎng)期運(yùn)行的系統(tǒng)構(gòu)建為一組相互配合的服務(wù),每個(gè)服務(wù)都有單一職責(zé),他們間都采用輕量級(jí)通信,開發(fā)測(cè)試與部署相互獨(dú)立,且具有良好的擴(kuò)展性等特點(diǎn)。
微服務(wù)與SOA存在多方面的不同,二者的主要區(qū)別如下表1所示。
表1 微服務(wù)架構(gòu)與SOA架構(gòu)比較Tab.1 Comparison of microservices architecture and SOA architecture
綜合上面所示,我們可以認(rèn)為微服務(wù)就是SOA的一個(gè)子集,相較而言使用微服務(wù)的架構(gòu)更加符合當(dāng)前互聯(lián)網(wǎng)發(fā)展趨勢(shì)。
微服務(wù)架構(gòu)是一種去中心化的架構(gòu),在互聯(lián)網(wǎng)時(shí)代,企業(yè)的核心就是效率。傳統(tǒng)企業(yè)服務(wù)總線是中心化的架構(gòu),這會(huì)導(dǎo)致效率低下、穩(wěn)定性差。而微服務(wù)技術(shù)體系提供給我們帶來是負(fù)載更小,故障影響的范圍也更小,能夠大幅降低去中心化應(yīng)用系統(tǒng)的運(yùn)營(yíng)成本。
本節(jié)將針對(duì)一些公司企業(yè)的內(nèi)部平臺(tái)存在的問題進(jìn)行分析,并提出使用微服務(wù)架構(gòu)模式來實(shí)現(xiàn)平臺(tái)的改造建設(shè)方案。
當(dāng)前很多公司和企業(yè)的平臺(tái)大都遵循傳統(tǒng)的SOA架構(gòu)實(shí)現(xiàn),傳統(tǒng)的系統(tǒng)架構(gòu)將所有的功能模塊進(jìn)行羅列,通過接口層將對(duì)外的功能進(jìn)行劃分,再對(duì)外進(jìn)行開放。這樣在業(yè)務(wù)處理和技術(shù)實(shí)現(xiàn)方面都存在多種問題,其主要表現(xiàn)在如下幾點(diǎn):
(1)平臺(tái)缺乏統(tǒng)一業(yè)務(wù)處理流程,不同平臺(tái)各有各自的處理方式,難以統(tǒng)一;
(2)平臺(tái)內(nèi)部多次實(shí)現(xiàn)了相同的功能,進(jìn)行重復(fù)開發(fā);
(3)平臺(tái)升級(jí)需要重新構(gòu)建、編譯,打包部署,耗時(shí)耗力耗財(cái);
(4)開發(fā)SaaS[4]互聯(lián)網(wǎng)功能的產(chǎn)品迫在眉睫,需要滿足快速開發(fā)、靈活升級(jí)、高性能、高可用、高穩(wěn)定、簡(jiǎn)化運(yùn)維等更高的需求;
(5)大容量訪問下無法提供可靠性服務(wù)。
經(jīng)過上述對(duì)一些公司的信息化平臺(tái)的現(xiàn)狀分析,可以得出當(dāng)前很多公司的信息化生產(chǎn)平臺(tái)存在著很多嚴(yán)重問題,為了能夠解決這些問題,他們迫切需要改進(jìn)其生產(chǎn)平臺(tái)系統(tǒng)架構(gòu)建立一個(gè)統(tǒng)一的大平臺(tái)服務(wù)體系。
2.2.1 平臺(tái)構(gòu)建原則
構(gòu)建大平臺(tái)應(yīng)當(dāng)遵循微服務(wù)的設(shè)計(jì)原則,如下圖1所示。
1、部署方式:每個(gè)主機(jī)可部署單個(gè)服務(wù)或者多個(gè)服務(wù),視所部屬的主機(jī)性能所定;
2、數(shù)據(jù)存儲(chǔ):每個(gè)微服務(wù)間應(yīng)當(dāng)盡量做到數(shù)據(jù)隔離,相互獨(dú)立;
3、對(duì)外通信:使用API GateWay來對(duì)外通信,API GateWay可以起到負(fù)載均衡、用戶驗(yàn)證和安全保護(hù)等作用;
4、通信方式:可以使用HTTP Restful[5]消息方式或者,遠(yuǎn)程調(diào)用方式;
圖1 微服務(wù)架構(gòu)設(shè)計(jì)原則Fig.1 Design principles of microservice architecture
5、服務(wù)發(fā)現(xiàn)方式:客戶端直接發(fā)現(xiàn)方式和服務(wù)端發(fā)現(xiàn)方式。兩種方式各有優(yōu)點(diǎn),客戶端方式省去了中間的一些操作,更加簡(jiǎn)單方便,但是安全方面可能會(huì)存在問題。而服務(wù)端發(fā)現(xiàn)方式由服務(wù)端的一個(gè)中轉(zhuǎn)站進(jìn)行,這種方式可以進(jìn)行統(tǒng)一管控,方便管理。
2.2.2 微服務(wù)架構(gòu)設(shè)計(jì)方案
結(jié)合上述分析的一些公司生產(chǎn)平臺(tái)現(xiàn)狀態(tài)以及存在的不足,使用微服務(wù)的架構(gòu)思想可以有效的解決這些問題,主要體現(xiàn)在:
1、系統(tǒng)管控簡(jiǎn)單,每個(gè)服務(wù)只需負(fù)責(zé)好自己即可;
2、易維護(hù)性,過去若系統(tǒng)需要增刪功能需要對(duì)系統(tǒng)進(jìn)行重新構(gòu)建和部署,而使用微服務(wù)架構(gòu)可以實(shí)現(xiàn)服務(wù)的“熱插拔”,只有對(duì)單個(gè)服務(wù)進(jìn)行操作即可完成需求;
3、易擴(kuò)展性,方便快捷的部署方式使得微服務(wù)在進(jìn)行擴(kuò)展時(shí),只需要將相同的服務(wù)進(jìn)行注冊(cè)即可完成部署。另外,在開發(fā)新功能時(shí),完成新功能的服務(wù)后,同樣也可以非??焖俚倪M(jìn)行服務(wù)部署。
2.2.2.1 生產(chǎn)平臺(tái)改造設(shè)計(jì)方案
根據(jù)微服務(wù)的架構(gòu)思想來改造生產(chǎn)平臺(tái),其方案改造可以遵循圖2的方法:
圖2 微服務(wù)架構(gòu)改造老生產(chǎn)平臺(tái)步驟Fig.2 The Step of reform the old production platform with microservice architecture
根據(jù)上圖中的方法,下面詳細(xì)說明每一步的工作內(nèi)容:
1、分析生產(chǎn)平臺(tái)所包含的功能模塊,將具有共性的部分抽取出來,將各個(gè)功能模塊盡可能小的再細(xì)分成小的功能點(diǎn);
2、功能剝離:將分析得到的各個(gè)功能點(diǎn)進(jìn)行提取,將獨(dú)立的模塊進(jìn)行提取;
3、數(shù)據(jù)解耦:剝離出業(yè)務(wù)數(shù)據(jù),盡量做到每個(gè)微服務(wù)間業(yè)務(wù)數(shù)據(jù)相互獨(dú)立、相互隔離,不產(chǎn)生影響;
4、確定微服務(wù)功能點(diǎn):分析確定所有需要實(shí)現(xiàn)的功能點(diǎn),確定每個(gè)服務(wù)的業(yè)務(wù)流程和開發(fā)技術(shù)選型;
5、系統(tǒng)設(shè)計(jì):根據(jù)微服務(wù)的技術(shù)特點(diǎn)和大平臺(tái)的業(yè)務(wù)需求進(jìn)行概要設(shè)計(jì)和詳細(xì)設(shè)計(jì);
6、行代碼的快速開發(fā)與測(cè)試;
7、使用容器部署:容器是用來封裝微服務(wù)所部屬使用的資源環(huán)境的,相同的容器可以直接進(jìn)行簡(jiǎn)單部屬。
2.2.2.2 系統(tǒng)架構(gòu)設(shè)計(jì)
根據(jù)上述設(shè)計(jì)原則以及改進(jìn)方案,設(shè)計(jì)出如圖
3的新系統(tǒng)的邏輯架構(gòu):
由圖可見每個(gè)微服務(wù)需要單獨(dú)部署并進(jìn)行注冊(cè),服務(wù)路由負(fù)責(zé)注冊(cè)服務(wù)和發(fā)現(xiàn)服務(wù),其物理實(shí)現(xiàn)可以通過高速緩存系統(tǒng)實(shí)現(xiàn)。API GateWay負(fù)責(zé)訪問的負(fù)載均衡[6]、身份認(rèn)證和安全管控等,通過API GateWay可以實(shí)現(xiàn)服務(wù)的調(diào)用。在實(shí)際部署中,每個(gè)服務(wù)可能是對(duì)應(yīng)著一組服務(wù)集群,這樣可以保證服務(wù)的訪問效率。部署一個(gè)服務(wù)時(shí),可以將其部署到容器中,這樣可以保持相同環(huán)境一次部署多個(gè)服務(wù)。每個(gè)服務(wù)間通過 Rest協(xié)議通信,每個(gè)服務(wù)也可以通過消息中心模塊獲取數(shù)據(jù)。消息中心一般使用大數(shù)據(jù)的分布式架構(gòu)實(shí)現(xiàn)消息的自動(dòng)輸送。對(duì)于維護(hù)模塊需要實(shí)現(xiàn)的功能是自動(dòng)化的運(yùn)維和日志的監(jiān)控等。
圖3 系統(tǒng)邏輯架構(gòu)圖Fig.3 System logic architecture diagram
Docker容器:Docker[7]是一款強(qiáng)大的開源的應(yīng)用容器,編程人員可以封裝應(yīng)用以及相關(guān)的開發(fā)環(huán)境到一個(gè)可移植的容器中,然后發(fā)布到其他機(jī)器或者系統(tǒng)上。Docker也可以實(shí)現(xiàn)虛擬化,容器是使用沙箱機(jī)制,相互之間不會(huì)有任何接口。
其實(shí)現(xiàn)原理如下圖4所示,應(yīng)用程序如同正方形內(nèi)的三角形、圓形和五邊形,而正方形就是Docker,最外層的長(zhǎng)方形就是我們的系統(tǒng),我們將應(yīng)用程序放在Docker里面,然后將一個(gè)或多個(gè)正方形塊整體放到長(zhǎng)放行內(nèi),可以實(shí)現(xiàn)快速而簡(jiǎn)單的服務(wù)部署。
圖4 Docker容器封裝不同服務(wù)Fig.4 Docker container encapsulating different services
Nginx[8]:在本系統(tǒng)中Nginx作為負(fù)載均衡服務(wù)器,可以進(jìn)行 HTTP代理對(duì)外進(jìn)行服務(wù),不論是系統(tǒng)資源開銷還是CPU使用效率都是非常不錯(cuò)的。通過Nginx的配置可以進(jìn)行對(duì)外部訪問進(jìn)行分流和負(fù)載均衡。
Restful API:近年來隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,各種類型的 Client層出不窮,RESTful可以通過一套統(tǒng)一的接口為不同的客戶端提供統(tǒng)一的服務(wù)接口。如下圖所示,不同的終端可以通過一個(gè)標(biāo)準(zhǔn)的Restful API來訪問數(shù)據(jù)庫(kù)從而獲取到相同的數(shù)據(jù)。
圖5 Restful API統(tǒng)一不同終端接入Fig.5 Docker container encapsulating different services
Spring Boot:Spring Boot[9]其初始的設(shè)計(jì)目的是用來簡(jiǎn)化Spring應(yīng)用的初始搭建以及開發(fā)過程,但是經(jīng)過不斷的發(fā)展,如今已經(jīng)應(yīng)用于開發(fā)Java微服務(wù)。它通過封裝底層框架的復(fù)雜配置,從而使的開發(fā)者可以非常容易的進(jìn)行微服務(wù)的開發(fā)。Spring Boot提供了一些非常強(qiáng)大的通用功能,如RESTful API[10]接口功能,所以它在一定程度上極大的提高了工作人員的效率。Spring Boot目前廣泛應(yīng)用于微服務(wù),可以讓他們非常簡(jiǎn)潔的開發(fā)某個(gè)龐大系統(tǒng)中的某個(gè)單獨(dú)的服務(wù)。
使用微服務(wù)來實(shí)現(xiàn)的統(tǒng)一服務(wù)大平臺(tái),具有多方面的價(jià)值,其發(fā)展前景非常好,主要體現(xiàn)在如下幾點(diǎn):
1、節(jié)省了運(yùn)維成本:許多微服務(wù)單獨(dú)部署,在進(jìn)行維護(hù)時(shí),只需對(duì)單個(gè)服務(wù)進(jìn)行修改即可;
2、統(tǒng)一的大平臺(tái)節(jié)省了后續(xù)功能擴(kuò)展的開發(fā)成本;
3、平臺(tái)推廣能力增強(qiáng),外部系統(tǒng)若想使用某個(gè)功能,只需要將該服務(wù)的接口提供給對(duì)方即可,無需額外開發(fā)程序;
4、大數(shù)據(jù)、云計(jì)算已經(jīng)廣泛應(yīng)用,通過微服務(wù)的架構(gòu)思想可以輕松實(shí)現(xiàn)SaaS層次的云服務(wù)。
本文提出了使用微服務(wù)的架構(gòu)思想來統(tǒng)一構(gòu)建大生產(chǎn)平臺(tái)的一種架構(gòu)方案,該方案不但在理論上進(jìn)行了介紹,而且還在具體的架構(gòu)實(shí)現(xiàn)進(jìn)行了分析,具有非常高的可行性。如果真的應(yīng)用到實(shí)際的企業(yè)工作環(huán)境中將會(huì)大大節(jié)約我們的開發(fā)成本,而且還會(huì)提高我們的工作效率。
[1] 張晶, 王琰潔 黃小鋒. 一種微服務(wù)框架的實(shí)現(xiàn)[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2017, 26(04): 82-86.
[2] 郭棟, 王偉, 曾國(guó)蓀. 一種基于微服務(wù)架構(gòu)的新型云件PaaS平臺(tái)[J]. 信息網(wǎng)絡(luò)安全, 2015, (11): 15-20.
[3] 凌曉東. SOA綜述[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2007, (10):122-124+199.
[4] 陳鵬, 薛恒新. 面向中小企業(yè)信息化的SaaS應(yīng)用研究[J].中國(guó)制造業(yè)信息化, 2008, (01): 10-13.
[5] 孫楊. 基于REST風(fēng)格構(gòu)建Web服務(wù)的研究與應(yīng)用[D]. 電子科技大學(xué), 2009.
[6] 周瑩蓮, 劉甫. 服務(wù)器負(fù)載均衡技術(shù)研究[J]. 計(jì)算機(jī)與數(shù)字工程, 2010, 38(04): 11-14+35.
[7] 張建, 謝天鈞. 基于Docker的平臺(tái)即服務(wù)架構(gòu)研究[J]. 信息技術(shù)與信息化, 2014, (10): 131-134.
[8] 林麗麗. 使用高性能Web服務(wù)器Nginx實(shí)現(xiàn)開源負(fù)載均衡[J]. 大眾科技, 2010, (07): 37-38+27.
[9] 王永和, 張勁松, 鄧安明, 周智勛. Spring Boot研究和應(yīng)用[J]. 信息通信, 2016, (10): 91-94.
[10] 劉興邦. 基于RESTful和Android的途家網(wǎng)房源管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京交通大學(xué), 2015.
Discussion on the Evolution of Big Platform System Architecture Based on Microservice
ZHENG Ming-zhao, ZHANG Jian-qiang
(China Mobile Group Design Institute Co., LTD Shandong, Jinan 250101, China)
As of now, the production platforms of many companies are using the old monolithic mode that is difficult to expand, with complex upgrade process, high maintenance cost, long period of continuous delivery as well as poor flexibility. The architectural pattern of microservice divided the production platforms into individual services with tiny size, each of which will be separately deployed before being grouped together for realizing a complicated function. Actually, the advantages of micro-services include simplicity, specificity, mutual independence,low degree of coupling as well as low maintenance cost. Meanwhile, the progress of container technologies such as Spring Boot and Docker enabled the implementation and deployment of micro-services to be done in a convenient manner.
Monolithic; Microservice; Spring boot; Container
TP302
A
10.3969/j.issn.1003-6970.2017.12.031
本文著錄格式:鄭明釗,張建強(qiáng). 基于微服務(wù)的大平臺(tái)系統(tǒng)架構(gòu)演進(jìn)探討[J]. 軟件,2017,38(12):165-169
鄭明釗(1989-),男,碩士,中國(guó)移動(dòng)通信集團(tuán)設(shè)計(jì)院有限公司山東分公司,研發(fā)工程師,主要研究云計(jì)算、大數(shù)據(jù);張建強(qiáng)(1974-),男,本科,中國(guó)移動(dòng)通信集團(tuán)設(shè)計(jì)院有限公司山東分公司,研發(fā)工程師,主要研究虛擬化、大數(shù)據(jù)、云計(jì)算。