劉為
摘 要 本文介紹了主要軟件服務(wù)的設(shè)計架構(gòu),分析了新興的微服務(wù)架構(gòu),并對其實現(xiàn)的先決條件——容器化技術(shù)進行了研究。文章還分析了兩種微服務(wù)架構(gòu)在云服務(wù)中的實現(xiàn)形式。
關(guān)鍵詞 服務(wù)架構(gòu) 微服務(wù) 容器 CaaS BaaS
中圖分類號:TP309 文獻標(biāo)識碼:A DOI:10.16400/j.cnki.kjdkx.2017.01.013
1網(wǎng)絡(luò)服務(wù)架構(gòu)
現(xiàn)在社會的各行各業(yè)均無法離開網(wǎng)絡(luò)服務(wù)系統(tǒng),例如學(xué)校有學(xué)生管理系統(tǒng)、教務(wù)系統(tǒng)等;企業(yè)有人事系統(tǒng)、財務(wù)系統(tǒng)、客戶關(guān)系管理系統(tǒng)等;手機上運行的各種APP以及游戲,都要與后臺服務(wù)器相連接,接受后臺系統(tǒng)的服務(wù)。
軟件系統(tǒng)的服務(wù)主要是為軟件的功能提供支持,以及為其它的服務(wù)提供接口。隨著網(wǎng)絡(luò)的普及,軟件的服務(wù)與軟件本身往往是分離的,服務(wù)由網(wǎng)絡(luò)上的服務(wù)器提供(后臺),而軟件運行在本地或瀏覽器上(前端),后臺服務(wù)是軟件開發(fā)中最關(guān)鍵的部分。
1.1單體服務(wù)架構(gòu)
上世紀90年代以前的軟件服務(wù)多為單體架構(gòu),所有的功能采用集成化、過程化的開發(fā),之后被編譯為一個文件并放置于容器中運行,這種架構(gòu)易于開發(fā)、部署和測試,但其主要問題包括:(1)代碼集成在一起,幾乎無法協(xié)同開發(fā)。(2)代碼功能高度耦合,后期維護、功能擴展困難。后期系統(tǒng)業(yè)務(wù)變更或服務(wù)整合會導(dǎo)致整個系統(tǒng)需要重構(gòu),大幅提高IT實施的成本。(3)小修改就可能導(dǎo)致重構(gòu)整個項目,迭代時間大幅提升。(4)穩(wěn)定性差,由于系統(tǒng)高度集中在一起,任何一個小的問題可能導(dǎo)致整個系統(tǒng)癱瘓。
1.2 SOA架構(gòu)
隨著軟件的模塊化概念開始流行,一種被稱為面向服務(wù)的架構(gòu)(SOA,Service Oriented Architecture)在2000年后被軟件企業(yè)廣泛應(yīng)用。SOA架構(gòu)基于服務(wù)(即基于模塊化的組件),服務(wù)提供接口,服務(wù)間可通過XML進行信息交換。SOA基本架構(gòu)包含ESB(Enterprise Service Bus),Web服務(wù)、XML和SOAP。SOA的最大特征就是松耦合,結(jié)合分層次的開發(fā)理念,解決了協(xié)同開發(fā)、測試等問題,也更易于后期擴充功能。但SOA本身只是一個架構(gòu),并非實施標(biāo)準(zhǔn),所以在生產(chǎn)環(huán)境中應(yīng)用SOA存在一些問題:
(1)需要共享ESB,松耦合服務(wù)實際邊界非常模糊,修改某一模塊會導(dǎo)致需要修改其它模塊,從而導(dǎo)致代碼維護困難,系統(tǒng)迭代速度大幅降低。(2)系統(tǒng)后期擴充將導(dǎo)致系統(tǒng)臃腫、性能下降;某些功能擴充甚至需要部分重構(gòu)ESB及其它服務(wù)。(3)系統(tǒng)開發(fā)長期被一種開發(fā)技術(shù)綁定,開發(fā)人員、技術(shù)、架構(gòu)變更的靈活度大幅下降。
2微服務(wù)架構(gòu)
微服務(wù)架構(gòu)并非一個全新概念,它更像是SOA架構(gòu)的一種實現(xiàn)。微服務(wù)架構(gòu)依然是面向服務(wù),但是其將松耦合做到了極致。該架構(gòu)是去中性化的,其中沒有ESB,每一個服務(wù)可以單獨開發(fā)、測試、運行和部署,甚至能夠有自己的數(shù)據(jù)庫。服務(wù)間的通信與開發(fā)語言無關(guān),一般采用基于HTTPs 的RESTful API(Representational State Transfer API)。微服務(wù)的出現(xiàn)順應(yīng)了敏捷開發(fā)的浪潮,先開發(fā)先上線,后開發(fā)再擴充,能對系統(tǒng)進行快速迭代。微服務(wù)架構(gòu)有以下特點:
(1)服務(wù)?。好恳粋€服務(wù)代碼量少、復(fù)雜度低,僅專注某一項功能。(2)能夠獨立運行:每個服務(wù)可以運行在獨立的進程中。(3)與語言無關(guān)的通信機制:例如XML、JOSN、REST API等。(4)松耦合:開發(fā)、部署和運行均處于獨立狀態(tài),幾乎無外部依賴。(5)去中心化:沒有ESB,可完全分布式部署。(6)數(shù)據(jù)獨立:微服務(wù)可以有自己的數(shù)據(jù)庫,其它服務(wù)只能通過接口獲得該服務(wù)的數(shù)據(jù)。
2.1 微服務(wù)架構(gòu)的優(yōu)勢
根據(jù)微服務(wù)以上的特性,實施過程中有如下優(yōu)勢:
(1)依照服務(wù)來劃分開發(fā)團隊:每一個服務(wù)對應(yīng)一個完整團隊(包含后臺、前端、數(shù)據(jù)庫、中間件等),從開發(fā)、測試、上線及后期維護均由該團隊負責(zé),一個跨職能的團隊能夠完全掌控自己的微服務(wù)。
(2)服務(wù)的異構(gòu)性:能夠針對不同業(yè)務(wù)選擇合適的開發(fā)方案、開發(fā)語言、框架及部署環(huán)境,無須像單體或是SOA架構(gòu)一樣,選擇統(tǒng)一的技術(shù)方案。在傳統(tǒng)架構(gòu)中,初期技術(shù)方案一旦選定,很長時間內(nèi),整個系統(tǒng)就會在所選技術(shù)框架內(nèi)進行開發(fā),到了后期想要嘗試新的技術(shù),則有很大可能要重構(gòu)系統(tǒng),不但開發(fā)難度大,而且項目越大,失敗風(fēng)險越高。而微服務(wù)架構(gòu)采用的是獨立的擴展方式,不但無須重構(gòu)原系統(tǒng),還可以極小風(fēng)險測試新的服務(wù),一旦新服務(wù)達不到預(yù)期,則可直接終止,這也僅僅是停止使用一個服務(wù)而已,對整個系統(tǒng)影響極小。
(3)獨立測試、部署及容錯能力:可以對微服務(wù)進行單獨的測試和部署,無須對整個系統(tǒng)進行測試、編譯和從新部署,降低了系統(tǒng)運行風(fēng)險。當(dāng)一個微服務(wù)出現(xiàn)運行故障時,不會影響系統(tǒng)中其它的服務(wù),避免了系統(tǒng)全面停擺。
(4)強擴展性和可控的系統(tǒng)復(fù)雜度:每個微服務(wù)通過定義良好的接口實現(xiàn)服務(wù)間邊界,專注于某一種功能,從而能夠根據(jù)系統(tǒng)需求,實現(xiàn)細粒度的自由擴展。同時,由于單個微服務(wù)復(fù)雜度低,即使出現(xiàn)多個服務(wù)堆疊的情況,也能夠較容易掌控整個系統(tǒng)的復(fù)雜度。
2.2 微服務(wù)架構(gòu)的不足
(1)部署較以往架構(gòu)更加復(fù)雜:系統(tǒng)由眾多微服務(wù)搭建,每個微服務(wù)需要單獨部署,從而增加部署的復(fù)雜度,容器技術(shù)能夠解決這一問題。
(2)性能問題:由于微服務(wù)注重獨立性,互相通信時只能通過標(biāo)準(zhǔn)接口,可能產(chǎn)生延遲或調(diào)用出錯。例如一個服務(wù)需要訪問另一個服務(wù)的數(shù)據(jù),只能通過服務(wù)間接口來進行數(shù)據(jù)傳輸,如果是頻繁訪問,則可能帶來較大的延遲。
(3)數(shù)據(jù)一致性問題:作為分布式部署的微服務(wù),在保持數(shù)據(jù)一致性方面需要比傳統(tǒng)架構(gòu)更加困難。
3微服務(wù)的云平臺
由于云平臺的廣泛使用,很多網(wǎng)絡(luò)服務(wù)的后臺會部署在云端?;赑aaS(Platform as a Service)的云平臺非常適合微服務(wù)后臺的構(gòu)建,容器技術(shù)則是云端微服務(wù)的基礎(chǔ)。
3.1 容器技術(shù)
微服務(wù)系統(tǒng)采用類似于搭積木的構(gòu)建方式,開發(fā)一個服務(wù)就可上線一個服務(wù),這就意味著每次部署新的服務(wù),不能影響其它已存在的系統(tǒng)。更重要的是,同一個系統(tǒng)的微服務(wù)可能采用了不同的開發(fā)技術(shù)、數(shù)據(jù)庫等,與原來存在的服務(wù)所使用的技術(shù)完全不兼容,如果需要加入新的服務(wù),還需要為其搭建不同運行環(huán)境。為了解決這些問題,容器技術(shù)成為了最好的選擇。容器的廣泛應(yīng)用并非因為微服務(wù)架構(gòu),但其卻成為了微服務(wù)架構(gòu)實踐的先決條件。
容器是Linux系統(tǒng)下用以實現(xiàn)在單一主機提供多個隔離的Linux系統(tǒng)環(huán)境的虛擬化技術(shù)。與虛擬機不同,容器無須運行虛擬操作系統(tǒng),而是共享本地主機的操作系統(tǒng)來實現(xiàn)虛擬環(huán)境。容器技術(shù)最先在2013年由Docker公司應(yīng)用于自家的PaaS云服務(wù)平臺,并迅速被廣大開發(fā)者所認可,越來越多的開發(fā)者開始將網(wǎng)絡(luò)服務(wù)部署在容器中。對于容器技術(shù)而言,現(xiàn)在處在起步上升階段,還面臨著一些問題,例如容器系統(tǒng)的容錯性:當(dāng)宿主機出現(xiàn)故障,如何能讓容器在其它機器上迅速運行起來;以及容器的擴容性:一個宿主機能夠容納的容器是有限,如何進行后期分布式擴容等,這一切集中在于系統(tǒng)需要一個好的容器編排工具管理容器。
3.2 CaaS
CaaS(Container as a Service)云服務(wù)是一種完全基于容器的PaaS系統(tǒng)。平臺內(nèi)有容器鏡像池,包含了各種各樣的鏡像,鏡像實際是封裝好的包含各種軟件所組成的運行環(huán)境。鏡像可以由平臺提供,也可以由個人發(fā)布共享,平臺用戶也可以自己創(chuàng)建鏡像,并且不用擔(dān)心平臺無法運行鏡像。
CaaS云服務(wù)特別適合微服務(wù)的部署,因為每一個微服務(wù)可以單獨部署在一個容器中,整個系統(tǒng)由容器搭建而成,包含不同技術(shù)架構(gòu)的容器之間嚴格隔離。當(dāng)開發(fā)者部署某一服務(wù)時,只需選擇(或自己搭建)鏡像,并將服務(wù)部署在其中,即可讓其在云臺上運行。
3.3 BaaS
BaaS(Backend as a Service)是一種能夠直接提供微服務(wù)的云平臺,其實際是SaaS(Software as a Service)架構(gòu),一般服務(wù)對象是移動應(yīng)用開發(fā)者。平臺內(nèi)提供了移動應(yīng)用常見的后臺服務(wù),包含存儲、即時通訊、數(shù)據(jù)統(tǒng)計和分析、消息推送、應(yīng)用內(nèi)搜索、用戶反饋、第三方登陸、分享等移動應(yīng)用中通用的功能。移動開發(fā)者在選用平臺功能后,能夠大幅降低開發(fā)難度和時間。BaaS平臺實際也是基于微服務(wù),因為其功能可以在后期不斷擴充。
4結(jié)語
微服務(wù)是近3年出現(xiàn)的新技術(shù),就現(xiàn)在的關(guān)注度而言,極有可能成為未來構(gòu)建系統(tǒng)服務(wù)的主流架構(gòu);相應(yīng)的,容器技術(shù)有可能取代虛擬機,成為服務(wù)器上最重要的虛擬化技術(shù)。
基金項目:1、武漢市教育局教學(xué)研究項目《基于移動設(shè)備的游戲設(shè)計課程體系研究》(編號2015090)
2、本研究獲得武漢市屬高校數(shù)字城市專業(yè)重點實訓(xùn)基地資助
參考文獻
[1] 鄧杰文,曹彩鳳.微服務(wù)若干關(guān)鍵問題研究[J].五邑大學(xué)學(xué)報(自然科學(xué)版),2016.30(2).
[2] 郭棟,王偉,曾國蓀.一種基于微服務(wù)架構(gòu)的新型云件PaaS平臺[J].信息網(wǎng)絡(luò)安全,2015(11):15-20.
[3] 鞠春利,劉印鋒.基于Docker的私有PaaS系統(tǒng)構(gòu)建[J].輕工科技,2014(10):80-80.
[4] 劉思堯,李強,李斌.基于Docker技術(shù)的容器隔離性研究[J].軟件,2015.36(4):110-113.
[5] 陳春霞.基于容器的微服務(wù)架構(gòu)的淺析[J].信息系統(tǒng)工程,2016(3):95-96.