最近幾年,個(gè)人寫了不少的微服務(wù)架構(gòu)相關(guān)的文章,這篇文章剛好結(jié)合微服務(wù)架構(gòu)相關(guān)的文章和實(shí)踐,來進(jìn)一步整理如何從一個(gè)新的知識(shí)點(diǎn),在不斷學(xué)習(xí)和實(shí)踐中,將相關(guān)的內(nèi)容知識(shí)體系化。
對(duì)于新領(lǐng)域的學(xué)習(xí),我前面也專門寫過如何快速切入新領(lǐng)域的文章,在此不再贅述。
在我接觸微服務(wù)架構(gòu)的時(shí)候,首先看下自己已有了SOA,云計(jì)算,私有云PaaS平臺(tái),敏捷開發(fā),持續(xù)集成和CMMI過程改進(jìn)等多方面知識(shí)點(diǎn)的積累。因此當(dāng)接觸到微服務(wù)架構(gòu)的時(shí)候,自己首先思考的還是微服務(wù)架構(gòu)和SOA有什么區(qū)別和關(guān)系,微服務(wù)網(wǎng)關(guān)和ESB有什么區(qū)別,微服務(wù)架構(gòu)和原來的組件化架構(gòu)有什么區(qū)別?
在學(xué)習(xí)微服務(wù)架構(gòu)的文章過程中,不斷地去思考這些關(guān)聯(lián)和區(qū)別,其核心的目的仍然是真正找到微服務(wù)架構(gòu)的核心,或者說你自己能夠理解的概念模型。即微服務(wù)架構(gòu)本身是將傳統(tǒng)單體應(yīng)用打破為多個(gè)獨(dú)立自治(可以在自己獨(dú)立進(jìn)程中運(yùn)行)的微服務(wù)模塊,同時(shí)這些模塊間通過輕量的Http API接口進(jìn)行交互。這就是微服務(wù)架構(gòu)的核心概念模型。
和SOA的區(qū)別,即SOA的概念內(nèi)化到單體應(yīng)用內(nèi)部,單體應(yīng)用拆分為微服務(wù)模塊了。同時(shí)可以看到微服務(wù)架構(gòu)并沒去強(qiáng)調(diào)SOA里面的第二個(gè)層次,即服務(wù)能力的組合,組裝和編排。和ESB的區(qū)別,微服務(wù)架構(gòu)網(wǎng)關(guān)才是和ESB對(duì)應(yīng)的東西,只是網(wǎng)關(guān)更加輕量,沒有大量的遺留適配,協(xié)議轉(zhuǎn)換等,同時(shí)接口基本推進(jìn)主流的Http Rest模式。而同傳統(tǒng)組件化架構(gòu)的區(qū)別,則更加強(qiáng)調(diào)了組件完全獨(dú)立自治,從數(shù)據(jù)庫到應(yīng)用層全部要拆分。
學(xué)習(xí)任何一個(gè)新概念或切入一個(gè)新領(lǐng)域,重點(diǎn)就是要抓住核心概念模型。你把核心抓住了,就達(dá)到了從道理上懂了的第一步,當(dāng)然從道理上懂了,到你自己能夠親自去做,能夠按這個(gè)思想去實(shí)踐還差得遠(yuǎn)。
但是你抓住了這個(gè)概念模型,你后面所有的深入都將圍繞這個(gè)核心展開。大家可以參考下我最新發(fā)布過微服務(wù)相關(guān)的文章,相當(dāng)來說比較零散。
如果簡(jiǎn)單總結(jié)的話會(huì)涉及到如下關(guān)鍵詞內(nèi)容,傳統(tǒng)企業(yè)IT架構(gòu)轉(zhuǎn)型,中臺(tái)構(gòu)建,微服務(wù)網(wǎng)關(guān),SpingCLoud,DevOps和持續(xù)交付,容器化部署,服務(wù)注冊(cè)發(fā)現(xiàn),流量控制和熔斷,微服務(wù)模塊的拆分,微服務(wù)API接口的識(shí)別和定義,服務(wù)治理,微服務(wù)開發(fā)框架,微服務(wù)實(shí)施,HttpRest接口,微服務(wù)模塊集成,開發(fā)過程,技術(shù)中臺(tái)。
而所有上面的內(nèi)容基本都圍繞微服務(wù)架構(gòu)相關(guān)點(diǎn)展開,那么這些零散的點(diǎn)到后面就需要進(jìn)行整理和歸納,讓零散的知識(shí)體系結(jié)構(gòu)化。
如何結(jié)構(gòu)化?
簡(jiǎn)單來說仍然還是這些知識(shí)朝上面聚合,而聚合后可能形成動(dòng)態(tài)結(jié)構(gòu),也可能形成靜態(tài)結(jié)構(gòu)。靜態(tài)結(jié)構(gòu)重點(diǎn)圍繞微服務(wù)架構(gòu)展開,而動(dòng)態(tài)結(jié)構(gòu)圍繞微服務(wù)開發(fā)全生命周期展開。
再來看微服務(wù)架構(gòu)核心概念模型本質(zhì)是做兩件事情。
一是拆分微服務(wù)模塊,一是模塊開發(fā)和集成,形成完整應(yīng)用。那么再展開來看,從動(dòng)態(tài)分析思路,微服務(wù)架構(gòu)完整的生命周期就可以理解為:
規(guī)劃咨詢-》架構(gòu)設(shè)計(jì)-》微服務(wù)模塊開發(fā)-》上線運(yùn)行-》微服務(wù)架構(gòu)應(yīng)用治理
對(duì)于規(guī)劃咨詢+架構(gòu)設(shè)計(jì),重點(diǎn)就是要識(shí)別和劃分清楚微服務(wù)模塊,同時(shí)定義清楚模塊間的Http API接口,確保各個(gè)微服務(wù)間高內(nèi)聚松耦合。對(duì)于后續(xù)各個(gè)階段重點(diǎn)是開發(fā)微服務(wù)模塊,并完成集成上線。而應(yīng)用治理則重點(diǎn)是后續(xù)的管控和運(yùn)維。
在這個(gè)大脈絡(luò)梳理清楚后,你會(huì)看到微服務(wù)架構(gòu)開發(fā)框架在微服務(wù)模塊開發(fā)這個(gè)階段,而這個(gè)開發(fā)框架即使從開業(yè)的SpringCLoud來說,這個(gè)框架就會(huì)包括(服務(wù)注冊(cè)發(fā)現(xiàn),流控,負(fù)載均衡,微服務(wù)網(wǎng)關(guān),安全)等關(guān)鍵的技術(shù)組件,而這本身就是一個(gè)靜態(tài)架構(gòu)展開了。
把這個(gè)梳理清楚后,你會(huì)發(fā)現(xiàn)我們還談到的微服務(wù)架構(gòu)規(guī)范體系,DevOps和持續(xù)集成在哪個(gè)位置?而這些內(nèi)容剛好就是橫向底層重要的支撐過程。首先是規(guī)范體系,其次是DevOps持續(xù)交付過程和方法論。
對(duì)于架構(gòu)設(shè)計(jì),一個(gè)重要工作就是識(shí)別和定義微服務(wù)模塊組件,同時(shí)定義組件間的http api接口。在談?wù)w架構(gòu)框架的時(shí)候,參考SOA思想,一個(gè)重點(diǎn)就是分層,而這個(gè)分層重點(diǎn)就是形成技術(shù)中臺(tái)+業(yè)務(wù)中臺(tái)+上層應(yīng)用的多層分層架構(gòu)。上層的應(yīng)用應(yīng)該是基于技術(shù)中臺(tái)加業(yè)務(wù)中臺(tái)的能力進(jìn)行組裝,組合而構(gòu)建出來的。
一個(gè)流程引擎的微服務(wù)模塊,屬于技術(shù)中臺(tái),而一個(gè)是產(chǎn)品中心的微服務(wù)模塊則屬于業(yè)務(wù)中臺(tái)(業(yè)務(wù)中臺(tái)包括了數(shù)據(jù)中心和業(yè)務(wù)規(guī)則處理中心)。
再回來看,還剩余的類似Docker容器技術(shù)和自動(dòng)化部署,完全是屬于我們整個(gè)DevOps支持過程里面的一個(gè)子過程和最佳實(shí)踐了。即沒有采用容器化部署并不影響整個(gè)架構(gòu)體系是微服務(wù)架構(gòu)。但是采用了容器化+DevOps是業(yè)界推薦的最佳實(shí)踐而已,這種最佳實(shí)踐可以進(jìn)一步提升效率和自動(dòng)化程度。
一個(gè)微服務(wù)架構(gòu)更加不是否定了傳統(tǒng)的軟件生命周期,軟件工程和軟件項(xiàng)目管理,而是結(jié)合微服務(wù)架構(gòu)的特點(diǎn),更加強(qiáng)調(diào)了敏捷方法論和持續(xù)交付,持續(xù)集成的內(nèi)容而已。這個(gè)時(shí)候就需要考慮我們的敏捷方法論,持續(xù)集成等最佳實(shí)踐如何和微服務(wù)架構(gòu)下的開發(fā)集成進(jìn)一步結(jié)合。
當(dāng)然,除了微服務(wù)從架構(gòu)設(shè)計(jì)和開發(fā)外,另外一個(gè)重點(diǎn)就是微服務(wù)模塊上線后的運(yùn)維和管控治理,由于微服務(wù)拆分的比傳統(tǒng)單體應(yīng)用粒度更細(xì),各個(gè)微服務(wù)間的接口集成關(guān)系也更加復(fù)雜,如果沒有一個(gè)很好的治理規(guī)范和管控流程,往往導(dǎo)致后期微服務(wù)運(yùn)營(yíng)和運(yùn)維失控。
因此微服務(wù)治理是微服務(wù)知識(shí)體系里面另外一個(gè)重要內(nèi)容。
微服務(wù)治理不僅僅是簡(jiǎn)單的微服務(wù)設(shè)計(jì)開發(fā)規(guī)范制定,后期微服務(wù)運(yùn)行監(jiān)控,而是應(yīng)該覆蓋整個(gè)微服務(wù)從需求到設(shè)計(jì),從開發(fā)到測(cè)試上線,從運(yùn)維監(jiān)控到變更交付的全生命周期。
經(jīng)過上面思考,你會(huì)看到微服務(wù)架構(gòu)知識(shí)體系,由前面說的最核心的微服務(wù)架構(gòu)生命周期,進(jìn)一步擴(kuò)展到規(guī)范體系和支撐工具集,軟件項(xiàng)目管理和敏捷方法論三者的融合。而這和傳統(tǒng)的CMMI談的項(xiàng)目管理+軟件工程+支撐過程域也是完全對(duì)應(yīng)的。
有了上面的思考,基本就可以看到微服務(wù)架構(gòu)整體知識(shí)體系就梳理清楚了。
但是可以看到上面仍然還是從道理上面的進(jìn)一步闡述,你只是道理上理解的更加細(xì)化了,接著要做的還是圍繞這些知識(shí)點(diǎn)展開實(shí)踐,你可以從采用最近的SpringCloud框架,開發(fā)Rest接口服務(wù)做起,然后再過渡到多個(gè)微服務(wù)模塊間的持續(xù)集成,后期的微服務(wù)架構(gòu)管控治理。只有這樣,你才能對(duì)微服務(wù)架構(gòu)有完整的理解,而不是僅僅局限在會(huì)使用SpringCloud框架。