張鵬飛 王永強(qiáng)
摘要:理論上任何業(yè)務(wù)系統(tǒng)如果長期存在的話,隨著此系統(tǒng)業(yè)務(wù)變更、功能增加必然會(huì)不斷演變,在一個(gè)更大的分布式環(huán)境中,這種改變尤其明顯,那么就需要架構(gòu)分析設(shè)計(jì)時(shí)更多的考慮系統(tǒng)所處的生態(tài)環(huán)境建設(shè),這樣才能使得整個(gè)系統(tǒng)不斷進(jìn)化。隨著虛擬化技術(shù)的發(fā)展以及docker容器實(shí)踐逐漸完善,微服務(wù)架構(gòu)的設(shè)計(jì)思想逐漸浮出水面.形成分布式 環(huán)境下新的最重要的設(shè)計(jì)思想。
關(guān)鍵詞:軟件工程;微服務(wù);持續(xù)交付
一、從分布式單體架構(gòu)到微服務(wù)架構(gòu)遷移
(一)分布式單體架構(gòu)
分布式單體架構(gòu)指的是在分布式環(huán)境下直接部署運(yùn)行一個(gè)整體開發(fā)的應(yīng)用,由整體應(yīng)用來提供系統(tǒng)所需的服務(wù),它在技術(shù)上通常采用分層實(shí)現(xiàn),大致分為表現(xiàn)層、應(yīng)用層、數(shù)據(jù)層,它有天然的優(yōu) 勢:它是模塊獨(dú)立無關(guān)的,各層之冋是技術(shù)分離的;它有統(tǒng)一的技術(shù)棧和開發(fā)標(biāo)準(zhǔn);它通常在一個(gè)進(jìn)程中運(yùn)行,模塊相互之間協(xié)同消耗極小。
(二)微服務(wù)架構(gòu)定義
微服務(wù)架構(gòu)是一種新的軟件體系設(shè)計(jì)模 式,它并沒有形成統(tǒng)一、嚴(yán)格的定義,但是基于其 分布式環(huán)境應(yīng)用的場景,卻擁有一些共同的特征: 比如開發(fā)敏捷性、持續(xù)交付、可伸縮性、最終--致性等。微服務(wù)架構(gòu)建議將大型復(fù)雜的單體架構(gòu)應(yīng)用劃分為一組微小的服務(wù),每個(gè)微服務(wù)根據(jù)其負(fù)責(zé)的具體業(yè)務(wù)職責(zé)提煉為單一的業(yè)務(wù)功能;每個(gè)服 務(wù)可以很容易地部署并發(fā)布到生產(chǎn)環(huán)境里隔離和獨(dú) 立的進(jìn)程內(nèi)部,它可以很容易地?cái)U(kuò)展和變更;對于一個(gè)具體的服務(wù)來說可以采用任何適用的語言和工 具來快速實(shí)現(xiàn);服務(wù)之間基于基礎(chǔ)設(shè)施互相協(xié)同工作, 1.3遷移需解決問題
(1)如何處理服務(wù)狀態(tài)
在分布式環(huán)境下盡可能的設(shè)計(jì)無狀態(tài)的微服務(wù) 更容易實(shí)現(xiàn)可伸縮性,但是在很多應(yīng)用場景(用戶相關(guān)數(shù)據(jù)讀寫)有狀態(tài)是不可避免的.所以必須把 有狀態(tài)服務(wù)的狀態(tài)相關(guān)信息提取出來使得有狀態(tài)服 務(wù)達(dá)到無狀態(tài)服務(wù)同樣的性能和擴(kuò)展能力。目前有 兩種實(shí)現(xiàn)方式:一種是采用分布式緩存集群存儲(chǔ)狀 態(tài),一種是采用nosql數(shù)據(jù)庫集群來存儲(chǔ)狀態(tài)。
(2)服務(wù)之間通信機(jī)制由于每個(gè)微服務(wù)都是在獨(dú)立、隔離的進(jìn)程內(nèi)部 運(yùn)行,所以這些微服務(wù)之間的調(diào)用行為屬于進(jìn)程冋 通信。
(3)服務(wù)可持續(xù)交付
實(shí)現(xiàn)微服務(wù)架構(gòu)的保障就是能夠嚴(yán)格執(zhí)行服務(wù) 的可持續(xù)交付,服務(wù)可持續(xù)交付指的是每個(gè)服務(wù) 交付的流程具備持續(xù)性,也就是說一個(gè)微服務(wù)應(yīng)用 從開發(fā)完畢到部署發(fā)布中間的過程是一個(gè)可持續(xù)的 過程,并且這個(gè)微服務(wù)應(yīng)用可能存在多個(gè)版本不同 運(yùn)行狀態(tài)的服務(wù)實(shí)例,它們需要集成到現(xiàn)有的運(yùn)行環(huán)境中穏定提供服務(wù)。服務(wù)可持續(xù)交付常常包括幾個(gè)方面:開發(fā)、單元測試、構(gòu)建、部署、集成、集 成測試、發(fā)布,從基礎(chǔ)設(shè)施環(huán)境來看又包含幾個(gè)部分,代碼版本管理、構(gòu)建管理、部署管理、集成管 理、測試管理、發(fā)布管理、運(yùn)維監(jiān)控管理。
二、微服務(wù)架構(gòu)基礎(chǔ)設(shè)施設(shè)計(jì)與分析
(一)微服務(wù)架構(gòu)基礎(chǔ)設(shè)施設(shè)計(jì)依據(jù)
(1)分布式系統(tǒng)核心問題
1) 性能和可伸縮性
在分布式環(huán)境下,微服務(wù)架構(gòu)使得業(yè)務(wù)邏輯可 以拆分為粒度較小的服務(wù),這些服務(wù)能夠運(yùn)行在獨(dú) 立、隔離的環(huán)境,易于部署、可擴(kuò)展性強(qiáng),因此這 些微服務(wù)的處理請求能力可伸縮性強(qiáng),性能優(yōu)勢明顯。
2) 數(shù)據(jù)一致性和高可用性
在分布式環(huán)境下,從硬件到主機(jī)操作系統(tǒng)到軟 件總有一部分存在故障狀態(tài),需要保證這個(gè)系統(tǒng)的 高可用性就需要盡可能的減少系統(tǒng)資源開銷的同時(shí) 排除單點(diǎn)故障或者容忍錯(cuò)誤;然而在故障恢復(fù)或者 多點(diǎn)備份或者執(zhí)行多服務(wù)事務(wù)的同時(shí)也需要保證數(shù) 據(jù)的一致性,基于性能優(yōu)先的考慮這種數(shù)據(jù)一致性 是數(shù)據(jù)最終一致性。
(2)DevOps基本原則
DevOps指的是從軟件交付的全局岀發(fā)在開發(fā) 和運(yùn)維架起交流和協(xié)作的橋梁,并且自動(dòng)化配置管 理軟件的文化變革運(yùn)動(dòng),DevOps的重要組成部分就 是持續(xù)交付,其基本原則是使軟件交付的流程自動(dòng) 化且可持續(xù),并盡可能簡潔。
(二)微服務(wù)架構(gòu)基礎(chǔ)設(shè)施總體設(shè)計(jì)
通過分析在分布式環(huán)境下從單體架構(gòu)遷移到微服務(wù)架構(gòu)需要解決的問題以及微服務(wù)架構(gòu)基礎(chǔ)設(shè)施的設(shè)計(jì)依據(jù).得到微服務(wù)架構(gòu)基礎(chǔ)設(shè)施總體設(shè)計(jì)。其中,開發(fā)完畢的微服務(wù)應(yīng)用經(jīng)由持續(xù)交付平 臺(tái)部署、驗(yàn)證、發(fā)布到分布式環(huán)境中,同時(shí)把這個(gè) 微服務(wù)注冊到服務(wù)注冊中心,用戶或外部服務(wù)通過 服務(wù)網(wǎng)關(guān)訪問此分布式環(huán)境節(jié)點(diǎn)中的API服務(wù),服 務(wù)網(wǎng)關(guān)通過服務(wù)注冊中心發(fā)現(xiàn)服務(wù).其他一些基礎(chǔ) 設(shè)施提供對這些微服務(wù)的運(yùn)行監(jiān)控管理。
(三)微服務(wù)架構(gòu)基礎(chǔ)設(shè)施關(guān)鍵組件
(1)持續(xù)交付平臺(tái)
實(shí)現(xiàn)一個(gè)可持續(xù)交付網(wǎng)平臺(tái)的目的是把基于分布式環(huán)境分析設(shè)計(jì)的微服務(wù)應(yīng)用快速靈活、可重復(fù) 且持續(xù)的、自動(dòng)化的集成部署到分布式環(huán)境中穩(wěn)定 運(yùn)行,并且這些微服務(wù)是可編程配置、易于維護(hù)、 變更、擴(kuò)展的,其可以運(yùn)行于一個(gè)獨(dú)立、隔離的容 器里表現(xiàn)為一個(gè)進(jìn)程。
(2)服務(wù)注冊與發(fā)現(xiàn)組件
服務(wù)注冊與發(fā)現(xiàn)是微服務(wù)架構(gòu)中的核心組件,分布式環(huán)境中服務(wù)的實(shí)例會(huì)根據(jù)運(yùn)行環(huán)境變化依據(jù) 默認(rèn)規(guī)則或策略動(dòng)態(tài)變化,這時(shí)要實(shí)現(xiàn)服務(wù)注冊與 發(fā)現(xiàn)變得異常復(fù)雜。
(3)服務(wù)網(wǎng)關(guān)
服務(wù)網(wǎng)關(guān)冏是一個(gè)統(tǒng)一調(diào)用邏輯人口,封裝了分布式環(huán)境中某個(gè)節(jié)點(diǎn)內(nèi)部的服務(wù)信息。
三、微服務(wù)架構(gòu)基礎(chǔ)設(shè)施在運(yùn)維管理中的應(yīng)用
隨著信息化的發(fā)展,各類應(yīng)用系統(tǒng)層出不窮、運(yùn)維人員管理數(shù)量極其龐大的微服務(wù)變得十分復(fù)雜,因此在分布式環(huán)境下應(yīng)用的可持續(xù)交付能力變得極其重要。采用持續(xù)交付平臺(tái)可以支持微服務(wù)自動(dòng)化的便捷部署到分布式環(huán)境中并經(jīng)過驗(yàn)證后發(fā)布。采用服務(wù)注冊中心可以支持微服務(wù)的發(fā)現(xiàn)與定位,為微服務(wù)的集成、組合提供支持。通過在分布式環(huán)境下提供各種基礎(chǔ)設(shè)施使得整個(gè)運(yùn)維管理更加高效、科學(xué)、合理,并且極大的降低了運(yùn)維成本和復(fù)雜性。
四、結(jié)論
本文通過分析分布式環(huán)境下微服務(wù)架構(gòu)相對于 單體架構(gòu)的優(yōu)勢以及其遷移需解決問題提出微服務(wù) 基礎(chǔ)設(shè)施總體設(shè)計(jì),分析了基礎(chǔ)設(shè)施關(guān)鍵組件的功 能,舉例了其在運(yùn)維管理中的應(yīng)用。當(dāng)然微服務(wù)架 構(gòu)的實(shí)踐還存在很多待深入研究的問題·比如其在 機(jī)器學(xué)習(xí)、大數(shù)據(jù)挖掘等分布式計(jì)算場景的應(yīng)用, 這些還需要今后在實(shí)踐中不斷探索、學(xué)習(xí)。
參考文獻(xiàn):
[1]熊敏,林榮恒.鄒華.云計(jì)算環(huán)境卜·的自適應(yīng)資源監(jiān)測模 型設(shè)計(jì)卩].新型工業(yè)化,2012, 2(11): 25-3L