李忠民+++齊占新
摘 要:微服務(wù)架構(gòu)已經(jīng)在實踐中被普遍應(yīng)用,國網(wǎng)也在努力實踐“一平臺一系統(tǒng)多場景微應(yīng)用”的設(shè)計理念,但是在微服務(wù)架構(gòu)的實施過程中,作者感覺業(yè)界在微服務(wù)架構(gòu)論述上把業(yè)務(wù)架構(gòu)和技術(shù)架構(gòu)糅合在一起,概念不是很清晰;同時在實踐過程中作者對微服務(wù)的粒度劃分標(biāo)準(zhǔn)有自己一些認(rèn)識,文章圍繞上述兩點展開討論,談?wù)勛约旱挠^點。
關(guān)鍵詞:微服務(wù)架構(gòu);微應(yīng)用化;微服務(wù)化;微服務(wù)粒度
每個新的技術(shù)概念的提出都是為了解決應(yīng)用實踐中面臨的問題,同時新的技術(shù)概念往往引起應(yīng)用實踐模式的轉(zhuǎn)變,這一點在架構(gòu)設(shè)計領(lǐng)域表現(xiàn)的尤為突出。二者有點像經(jīng)濟(jì)基礎(chǔ)和上層建筑的關(guān)系,經(jīng)濟(jì)基礎(chǔ)決定上層建筑,上層建筑反過來又顯著地影響著經(jīng)濟(jì)基礎(chǔ);同樣,業(yè)務(wù)架構(gòu)決定技術(shù)架構(gòu),技術(shù)架構(gòu)反過來又顯著影響著業(yè)務(wù)架構(gòu),微服務(wù)架構(gòu)的提出和實施,不可避免會要求業(yè)務(wù)架構(gòu)做出相應(yīng)演進(jìn)。
作者從國網(wǎng)“一平臺一系統(tǒng)多場景微應(yīng)用”的實施過程中,逐漸認(rèn)識到微服務(wù)架構(gòu)的實施實際上分為如下兩個部分:業(yè)務(wù)架構(gòu)的微應(yīng)用化;技術(shù)架構(gòu)的微服務(wù)化。
下面首先提出微應(yīng)用、微服務(wù)的概念,從而引出業(yè)務(wù)架構(gòu)的微應(yīng)用化和技術(shù)架構(gòu)的微服務(wù)化觀點。
1 微服務(wù)架構(gòu)
總結(jié)微服務(wù)架構(gòu)的提出者M(jìn)artin對微服務(wù)架構(gòu)的定義,微服務(wù)架構(gòu)有如下特征:由多個分布式服務(wù)組成,多個獨立的服務(wù),共同組成系統(tǒng);每個服務(wù)單獨部署,運(yùn)行在獨立的進(jìn)程(容器)里;服務(wù)可以獨立設(shè)計、開發(fā)、部署,可以采用不同的技術(shù)路線;分布式的管理。
微服務(wù)架構(gòu)模式有許多優(yōu)點:拆分單一的復(fù)雜性的單體應(yīng)用為可管理的模塊或服務(wù)。單個的服務(wù)可以更快的開發(fā),更簡單的理解和維護(hù)。每個服務(wù)可以由單獨的團(tuán)隊獨立開發(fā),開發(fā)者可以自由地選擇合理的技術(shù),只要服務(wù)遵守 API 約定即可。每一個微服務(wù)能被獨立部署,讓持續(xù)部署成為可能。
可見微服務(wù)架構(gòu)是一個技術(shù)概念,是從技術(shù)架構(gòu)角度來提出的一種新架構(gòu)模式,是一種新的設(shè)計、開發(fā)、實施、運(yùn)維的實踐方法,從企業(yè)架構(gòu)(EA)角度分析,應(yīng)該劃分到技術(shù)架構(gòu)的范疇。
2 微服務(wù)
微服務(wù)是一個高內(nèi)聚低耦合IT的實體,有明確的邊界,屬于技術(shù)架構(gòu)的范疇,可獨立設(shè)計、開發(fā)、測試、部署、運(yùn)維管理,一般具有自己的表現(xiàn)層、業(yè)務(wù)層甚至數(shù)據(jù)庫層,一般每個服務(wù)實例運(yùn)行在一個容器中。
3 微應(yīng)用
微應(yīng)用是一個高內(nèi)聚低耦合的業(yè)務(wù)實體,有明確的業(yè)務(wù)邊界,微應(yīng)用應(yīng)該是一個完整的、自洽的業(yè)務(wù)模塊,屬于業(yè)務(wù)架構(gòu)的范疇。
微應(yīng)用是從應(yīng)用場景中抽象總結(jié)出來的一些獨立業(yè)務(wù)模塊,模塊之間很少相互的業(yè)務(wù)聯(lián)系,即使有也通過工作流等機(jī)制進(jìn)行。
從領(lǐng)域模型的角度來看,微應(yīng)用應(yīng)該是居于業(yè)務(wù)對象和聚合體之上的一個概念,也就是說其粒度要比聚合體更加粗一些,比業(yè)務(wù)用例也更加粗一些,是相對獨立的一個業(yè)務(wù)模塊。
從用戶角度看微應(yīng)用能夠提供用戶要求的某一組服務(wù),為企業(yè)創(chuàng)造一個明確的經(jīng)營價值,達(dá)成用戶的一個某個在經(jīng)營層面可見的目標(biāo)。
而作為對照,業(yè)務(wù)用例一般完成某個特定的功能,比如下單、客戶資料修改等,由于粒度過小不能提供一個經(jīng)營層面可見的價值。
4 微應(yīng)用和微服務(wù)的關(guān)系
微應(yīng)用和微服務(wù)都是相對獨立的單元,都具有高內(nèi)聚低耦合的特征,都有一個明確的邊界。但是二者是不同領(lǐng)域中的概念,從本質(zhì)上來說是兩個獨立的概念。
微應(yīng)用是一個業(yè)務(wù)概念,是有獨立功能,能夠滿足用戶一個完整業(yè)務(wù)需求的功能,能夠?qū)崿F(xiàn)一個經(jīng)營層面可見的目標(biāo)。微服務(wù)是一個IT實體,是能夠獨立開發(fā)、測試、部署、運(yùn)行的模塊,一般依托容器運(yùn)行。
微應(yīng)用和微服務(wù)沒有一一對應(yīng)的關(guān)系,有一個比較貼切的比喻:二者之間的關(guān)系就像領(lǐng)域模型中的業(yè)務(wù)實體和java對象之間的關(guān)系。往往一個微服務(wù)實現(xiàn)了幾個微應(yīng)用,也存在一個微應(yīng)用跨越幾個微服務(wù)的情景。
5 微應(yīng)用和微服務(wù)的劃分標(biāo)準(zhǔn)
引入微服務(wù)架構(gòu)的初衷是降低系統(tǒng)開發(fā)和實施過程中的復(fù)雜性,使得過程可控,因此從實用主義的角度,從系統(tǒng)生命周期中與系統(tǒng)關(guān)系最密切的幾類人員,即分析人員、設(shè)計人員、開發(fā)人員、運(yùn)維人員角度來說明微應(yīng)用和微服務(wù)的劃分原則,是比較有實用價值的。此種劃分方式比純粹學(xué)術(shù)上的研究要有指導(dǎo)意義的多,舉例來說業(yè)界曾有觀點:微服務(wù)應(yīng)該細(xì)化到每個菜單作為一個微服務(wù)的程度,這個觀點明顯是脫離實際,為微而微,望文生義,極大地增加了運(yùn)維成本和管理成本,是非常教條的。
下面按照以上原則說明微應(yīng)用和微服務(wù)的劃分標(biāo)準(zhǔn)
5.1 微應(yīng)用的粒度
微應(yīng)用是處于子系統(tǒng)和業(yè)務(wù)用例之間的一個模塊級別,其雖然名稱中有“微”,但是不能過于小,否則徒增復(fù)雜性,對于架構(gòu)的優(yōu)化改進(jìn)沒有任何助力。
可以把能否提供一個“企業(yè)經(jīng)營管理層面可見的價值”作為識別微應(yīng)用的主要標(biāo)準(zhǔn)。同樣是對業(yè)務(wù)進(jìn)行模塊劃分,具體經(jīng)辦的業(yè)務(wù)人員和經(jīng)營管理人員的視角不同,粒度不同,業(yè)務(wù)人員從“做什么”入手,因此他們劃分出的單元往往是業(yè)務(wù)用例級別的,而經(jīng)營管理人員往往從“有什么用”角度入手,他們劃分出的業(yè)務(wù)模塊往往是粒度比業(yè)務(wù)用例稍大。
視角的不同,引起劃分標(biāo)準(zhǔn)和劃分結(jié)果的不同,前文已經(jīng)說了,微應(yīng)用應(yīng)該是比業(yè)務(wù)用例稍大的粒度,以經(jīng)營管理者的視角對業(yè)務(wù)進(jìn)行劃分,是微應(yīng)用的比較合理的劃分方法。
識別什么是微應(yīng)用,還與應(yīng)用系統(tǒng)的設(shè)計目標(biāo)和定位有關(guān),比如同樣是人力資源管理系統(tǒng),如果系統(tǒng)的重點在于員工檔案管理,則員工培訓(xùn)業(yè)務(wù)可以看做一個微應(yīng)用,但是對于以培訓(xùn)為重心的人資系統(tǒng),則把培訓(xùn)業(yè)務(wù)分解為多個微應(yīng)用更加合適。
5.2 微服務(wù)的粒度
劃分微服務(wù)的標(biāo)準(zhǔn)則有如下幾點:
從設(shè)計角度:微服務(wù)應(yīng)該是高內(nèi)聚低耦合的,有明晰的界面,與外界盡量少的交互。
從開發(fā)角度,微服務(wù)應(yīng)該是一個小的團(tuán)隊、在短時間內(nèi)可以完成的,保持溝通的高效和管理的低成本。
從運(yùn)維的角度:微服務(wù)的粒度不能太小,種類不能太多,否則會使得系統(tǒng)復(fù)雜性和管理成本急劇上升,有違微服務(wù)架構(gòu)的初衷。
6 業(yè)務(wù)架構(gòu)的微應(yīng)用化和技術(shù)架構(gòu)的微服務(wù)化
按照架構(gòu)設(shè)計的有關(guān)實踐,系統(tǒng)架構(gòu)分為業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、技術(shù)架構(gòu)、數(shù)據(jù)架構(gòu)、安全架構(gòu)等幾部分。
如前文所述,微應(yīng)用是屬于業(yè)務(wù)架構(gòu)范疇的概念,微服務(wù)是屬于技術(shù)架構(gòu)范疇的概念。故在微服務(wù)架構(gòu)的實施過程中,實際上存在業(yè)務(wù)架構(gòu)的微應(yīng)用化和技術(shù)架構(gòu)的微服務(wù)化兩個方面的工作,而業(yè)界往往把二者混淆。
6.1 業(yè)務(wù)架構(gòu)的微應(yīng)用化
首先利用傳統(tǒng)的分析方法對企業(yè)全局范圍內(nèi)的業(yè)務(wù)進(jìn)行梳理,開發(fā)業(yè)務(wù)架構(gòu),然后再進(jìn)行重構(gòu)與整合,對業(yè)務(wù)進(jìn)行拆分,從中識別出微應(yīng)用,達(dá)到業(yè)務(wù)架構(gòu)的微應(yīng)用化。
微應(yīng)用化的主要工作是產(chǎn)生微應(yīng)用清單,定義微應(yīng)用的業(yè)務(wù)功能和業(yè)務(wù)邊界,規(guī)范跨越兩個或者多個微應(yīng)用的業(yè)務(wù),對于跨微應(yīng)用的業(yè)務(wù)盡量利用工作流等機(jī)制實現(xiàn)銜接,從業(yè)務(wù)層面避免技術(shù)實現(xiàn)時的分布式事務(wù)產(chǎn)生的可能性,降低實現(xiàn)和實施的復(fù)雜性。
6.2 技術(shù)架構(gòu)的微服務(wù)化
微服務(wù)化的根本原則就是降低設(shè)計、開發(fā)、測試、實施、運(yùn)維過程中的復(fù)雜性和成本,在微服務(wù)化實施過程中會遇到很多問題,其中最具爭議的就是微服務(wù)的粒度問題,只要遵循這個基本原則,則尺度就比較好把握。
微服務(wù)化架構(gòu)的實施涉及到設(shè)計、開發(fā)、部署、運(yùn)維等各個方面。
6.2.1 設(shè)計過程
微服務(wù)可以分為兩類:應(yīng)用層微服務(wù):實現(xiàn)了業(yè)務(wù)邏輯,可以認(rèn)為這部分微服務(wù)是微應(yīng)用的實現(xiàn),但沒有必要和微應(yīng)用一一對應(yīng)。
基礎(chǔ)層微服務(wù):實現(xiàn)了公共設(shè)施和公共模塊。
設(shè)計過程是在業(yè)務(wù)微應(yīng)用化的基礎(chǔ)上展開的,但是微應(yīng)用和微服務(wù)不必要一一對應(yīng),微服務(wù)的設(shè)計過程就是需要對業(yè)務(wù)進(jìn)行拆分和分層:拆分:參照微應(yīng)用進(jìn)行拆分,構(gòu)建應(yīng)用層微服務(wù)集群。分層:梳理和抽取核心應(yīng)用、公共應(yīng)用,作為獨立的服務(wù)下沉到核心和公共能力層。
當(dāng)然設(shè)計過程中還要解決很多其他問題,如服務(wù)注冊、服務(wù)注冊、服務(wù)間通訊機(jī)制等問題。
6.2.2 開發(fā)過程
開發(fā)過程中首要原則就是接口先行,面向接口編程,首先需要把接口識別和定義出來,然后雙方基于接口進(jìn)行開發(fā),合理控制團(tuán)隊規(guī)模和開發(fā)周期,降低管理成本,提升產(chǎn)能。
6.2.3 部署過程
部署過程要利用工具進(jìn)行自動化部署。
部署原則:容器化、獨立部署、基礎(chǔ)設(shè)施自動化。
6.2.4 運(yùn)維過程
運(yùn)維過程要充分利用工具實現(xiàn)自動化運(yùn)維。