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