樊雷
摘要:傳統(tǒng)企業(yè)級(jí)系統(tǒng)服務(wù)采用一體化架構(gòu)設(shè)計(jì),系統(tǒng)龐大,結(jié)構(gòu)復(fù)雜,運(yùn)維和開發(fā)耦合度高,應(yīng)用環(huán)境難以拆分,對(duì)底層硬件、開發(fā)語言、數(shù)據(jù)庫和應(yīng)用版本依賴緊密,不具備應(yīng)用環(huán)境和業(yè)務(wù)功能的彈性伸縮能力。該文通過分析傳統(tǒng)服務(wù)架構(gòu)和微服務(wù)架構(gòu),提出了一種結(jié)合Docker容器和微服務(wù)技術(shù)的架構(gòu),在此架構(gòu)下對(duì)企業(yè)級(jí)微服務(wù)應(yīng)用進(jìn)行容器化改進(jìn),采用容器封裝服務(wù)注冊(cè)和熔斷、消息總線、負(fù)載均衡、日志安全監(jiān)控、業(yè)務(wù)微服務(wù)、存儲(chǔ)容錯(cuò)等企業(yè)級(jí)應(yīng)用,有效提高了系統(tǒng)應(yīng)用環(huán)境和業(yè)務(wù)功能的彈性伸縮能力。
關(guān)鍵詞:微服務(wù);Docker;企業(yè)級(jí)服務(wù)
中圖分類號(hào):TP39? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ? 文章編號(hào):1009-3044(2018)34-0025-02
1 傳統(tǒng)服務(wù)架構(gòu)和微服務(wù)架構(gòu)
企業(yè)級(jí)傳統(tǒng)服務(wù)架構(gòu)一般采用一體化架構(gòu)(Monolithic Architecture),即用戶通過瀏覽器端的UI和API接口使用各種系統(tǒng)服務(wù),如訂單服務(wù)、產(chǎn)品服務(wù)、物流服務(wù)、用戶服務(wù)、監(jiān)控服務(wù)、日志服務(wù)、存儲(chǔ)服務(wù)、備份服務(wù)等;系統(tǒng)后端采用一體化部署,其中系統(tǒng)業(yè)務(wù)邏輯功能通常采用MVC三層架構(gòu),系統(tǒng)整體采用單目錄結(jié)構(gòu)。以PHP大型電商應(yīng)用為例,其技術(shù)實(shí)現(xiàn)架構(gòu)采用負(fù)載均衡代理服務(wù)器(Nginx)、緩存服務(wù)器(Redis)、WEB服務(wù)器(Apache)和數(shù)據(jù)庫服務(wù)器(Mysql)等提供服務(wù)的可用性和可靠性保障。為提高伸縮和可用性,在負(fù)載均衡器下面往往需要運(yùn)行該應(yīng)用的多個(gè)實(shí)例提供相應(yīng)服務(wù)。架構(gòu)缺點(diǎn):運(yùn)維部署不靈活、穩(wěn)定性和功能擴(kuò)展性有所欠缺、軟硬件耦合度緊密。
微服務(wù)是近年來新興的一種輕量級(jí)服務(wù)架構(gòu),采用基于Http的輕量級(jí)REST技術(shù),實(shí)現(xiàn)大型應(yīng)用服務(wù)碎片化拆分,可以有效實(shí)現(xiàn)服務(wù)自動(dòng)化運(yùn)維和部署以及微團(tuán)隊(duì)服務(wù)開發(fā)。碎片化的微服務(wù)可以采用獨(dú)立編程語言(Python、Go、PHP等)實(shí)現(xiàn)、不同數(shù)據(jù)存儲(chǔ)技術(shù)和集中式API管理,實(shí)現(xiàn)了人、系統(tǒng)、環(huán)境、開發(fā)、運(yùn)維之間緊密依賴關(guān)系的解耦。微服務(wù)通??梢杂行M足一個(gè)特定業(yè)務(wù)功能點(diǎn)需求,由小團(tuán)隊(duì)獨(dú)立開發(fā),不再強(qiáng)調(diào)大團(tuán)隊(duì)整體協(xié)作開發(fā)(團(tuán)隊(duì)人數(shù)和溝通成本成正比),從大而全轉(zhuǎn)向小而精。架構(gòu)優(yōu)點(diǎn):分布式可移植、敏捷迭代版本、應(yīng)用環(huán)境可變多樣。
2 基于Docker的微服務(wù)企業(yè)級(jí)架構(gòu)設(shè)計(jì)
Docker是一種目前流行的開源容器引擎,實(shí)現(xiàn)了系統(tǒng)服務(wù)容器化封裝和應(yīng)用彈性伸縮。容器間通過沙箱機(jī)制實(shí)現(xiàn)進(jìn)程隔離,在云計(jì)算PaaS層可以實(shí)現(xiàn)秒級(jí)部署服務(wù)應(yīng)用,優(yōu)于IaaS層虛擬機(jī)分鐘級(jí)部署速度。優(yōu)點(diǎn):應(yīng)用隔離、輕量級(jí)、秒級(jí)部署速度、運(yùn)維成本低。
Docker和微服務(wù)分別關(guān)注系統(tǒng)運(yùn)維和業(yè)務(wù)實(shí)現(xiàn)兩個(gè)不同方向,有效的補(bǔ)充了彼此間的短板。Docker通過虛擬化技術(shù)實(shí)現(xiàn)技術(shù)應(yīng)用環(huán)境拆分,可分為業(yè)務(wù)邏輯容器、數(shù)據(jù)庫容器、儲(chǔ)存容器、隊(duì)列容器等若干個(gè)標(biāo)準(zhǔn)化容器,采用積木機(jī)制組合容器,提供容器間通信功能,可以為微服務(wù)提供實(shí)現(xiàn)基礎(chǔ)。采用容器承載服務(wù),可以有效構(gòu)建出大型復(fù)雜的微服務(wù)架構(gòu),圖4是基于Docker的企業(yè)級(jí)微服務(wù)架構(gòu)的設(shè)計(jì)。
3 基于Docker的微服務(wù)架構(gòu)的優(yōu)點(diǎn)
Docker結(jié)合微服務(wù)的企業(yè)級(jí)服務(wù)架構(gòu)突出優(yōu)勢(shì)有以下幾點(diǎn):
1)封裝和分布式:容器可以在分布式環(huán)境中實(shí)現(xiàn)內(nèi)存級(jí)微服務(wù)應(yīng)用封裝和隔離,無縫對(duì)接底層云計(jì)算IaaS平臺(tái)。
2)輕量級(jí):Docker 可以在同一臺(tái)主機(jī)上運(yùn)行更多的服務(wù)和應(yīng)用,不會(huì)產(chǎn)生性能損失和額外的容量。
3)鏡像版本化和可復(fù)用:Docker采用tag機(jī)制可以版本化微服務(wù)環(huán)境,適配開發(fā)、測(cè)試、部署等多種環(huán)境需求,鏡像可打包迭代實(shí)現(xiàn)本地或云端版本化復(fù)用。
4)基礎(chǔ)設(shè)施可替換:底層可采用私有虛擬機(jī)、公有云或物理機(jī)等多種架構(gòu)。
5)敏捷迭代:微服務(wù)的迭代版本可快速通過Docker進(jìn)行多環(huán)境自動(dòng)化部署。
4 結(jié)束語
隨著云計(jì)算、大數(shù)據(jù)等產(chǎn)業(yè)發(fā)展,Docker和微服務(wù)在企業(yè)級(jí)系統(tǒng)應(yīng)用中得到了飛速發(fā)展。它們是云時(shí)代下IT開發(fā)和運(yùn)維的必然產(chǎn)物,有效地提高了企業(yè)開發(fā)和運(yùn)維效率,無縫對(duì)接現(xiàn)有軟硬件資源、人力資源,降低了企業(yè)IT運(yùn)營成本。但是隨著系統(tǒng)碎片化,業(yè)務(wù)功能的拆分強(qiáng)化了DevOps技術(shù)壁壘,系統(tǒng)分布部署后問題追蹤難度增加,微服務(wù)數(shù)量增加后管理工作量和復(fù)雜性大大增加,另外Docker和微服務(wù)技術(shù)均屬于新興技術(shù)仍存在一定的瑕疵,在企業(yè)級(jí)服務(wù)大規(guī)模應(yīng)用中存在一定的技術(shù)風(fēng)險(xiǎn)。
參考文獻(xiàn):
[1] 肖堅(jiān). 基于Docker的應(yīng)用服務(wù)云平臺(tái)的設(shè)計(jì)和實(shí)現(xiàn)[D]. 廣州: 華南理工大學(xué), 2017: 17-20.
[2] 王方旭. 基于Spring Cloud和Docker的微服務(wù)架構(gòu)設(shè)計(jì)[J]. 中國信息化, 2018(3): 53-55.
[3] 羅貴木. 基于微服務(wù)化的Web后臺(tái)系統(tǒng)架構(gòu)優(yōu)化及實(shí)現(xiàn)[D]. 北京: 北京郵電大學(xué), 2017: 23-25.
[4] 馬雄. 基于微服務(wù)架構(gòu)的系統(tǒng)設(shè)計(jì)與開發(fā)[D]. 南京: 南京郵電大學(xué), 2017: 40-42.
[5] 馬恒. 適用于微服務(wù)架構(gòu)的企業(yè)應(yīng)用部署平臺(tái)研究[D]. 鄭州: 鄭州大學(xué), 2018: 26-28.
【通聯(lián)編輯:謝媛媛】