【從零開(kāi)始學(xué)微服務(wù)】04.微服務(wù)架構(gòu)的特點(diǎn)

大家好,歡迎來(lái)到萬(wàn)貓學(xué)社,跟我一起學(xué),你也能成為微服務(wù)專(zhuān)家。

微服務(wù)架構(gòu)被技術(shù)大牛們總結(jié)出了以下九個(gè)特點(diǎn):

  • 服務(wù)組件化
  • 圍繞業(yè)務(wù)功能
  • 產(chǎn)品而不是項(xiàng)目
  • 強(qiáng)終端弱管道
  • 去中心化管理
  • 去中心化數(shù)據(jù)管理
  • 基礎(chǔ)設(shè)施自動(dòng)化
  • 容錯(cuò)性設(shè)計(jì)
  • 演進(jìn)式設(shè)計(jì)

下面我們來(lái)逐個(gè)詳細(xì)了解一下。

服務(wù)組件化

當(dāng)我們談到組件的時(shí)候,一般是指可以獨(dú)立替換、可以獨(dú)立升級(jí)的功能單元。在以往的架構(gòu)中,我們引入組件時(shí),使用動(dòng)態(tài)鏈接庫(kù)或jar包,甚至是一組代碼。在微服務(wù)架構(gòu)中,是把服務(wù)作為了組件,使用輕量級(jí)的HTTP進(jìn)行遠(yuǎn)程調(diào)用。

這樣做有什么好處呢?動(dòng)態(tài)鏈接庫(kù)或jar包的引入是不安全的,可以使用反射等技術(shù)手段對(duì)模塊進(jìn)行修改。而在微服務(wù)中服務(wù)作為組件時(shí),不在同一個(gè)線(xiàn)程中,根本不能對(duì)其進(jìn)行任何修改。

圍繞業(yè)務(wù)功能

在以往的單體架構(gòu)中,所有代碼、所有邏輯、所有模塊都集中在一個(gè)項(xiàng)目里。根據(jù)康威定理,技術(shù)團(tuán)隊(duì)的組織結(jié)構(gòu)應(yīng)該被分為:前端研發(fā)人員、后端研發(fā)人員、數(shù)據(jù)庫(kù)運(yùn)維人員,如下圖:

微服務(wù)是傾向于圍繞業(yè)務(wù)功能進(jìn)行服務(wù)的劃分的,所以每個(gè)服務(wù)的團(tuán)隊(duì)是跨職能的,可能包括所有職能的人員,如下圖:

這里隨便提一嘴康威定理,它是馬爾文·康威(Melvin Edward Conway)在1968年4月發(fā)表論文而提出的。


馬爾文·康威

其核心論點(diǎn)是:

Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.
設(shè)計(jì)系統(tǒng)的架構(gòu)受制于產(chǎn)生這些設(shè)計(jì)的組織的溝通結(jié)構(gòu)。

通俗的來(lái)講:系統(tǒng)設(shè)計(jì)本質(zhì)上反映了企業(yè)的組織機(jī)構(gòu),系統(tǒng)各個(gè)模塊間的接口也反映了企業(yè)各個(gè)部門(mén)之間的信息流動(dòng)和合作方式。

產(chǎn)品而不是項(xiàng)目

在一般情況下,項(xiàng)目是以交付為目的,當(dāng)項(xiàng)目完成以后就交付給甲方或者運(yùn)維團(tuán)隊(duì),甚至該項(xiàng)目的開(kāi)發(fā)團(tuán)隊(duì)就此解散了。

而在微服務(wù)架構(gòu)中,產(chǎn)出的是產(chǎn)品。所謂的產(chǎn)品就是需要不斷演進(jìn)、不斷迭代,一個(gè)團(tuán)段負(fù)責(zé)產(chǎn)品的整個(gè)生命周期。

強(qiáng)終端弱管道

在SOA架構(gòu)中,使用了企業(yè)服務(wù)總線(xiàn)(ESB)這一強(qiáng)管道,因?yàn)槠髽I(yè)服務(wù)總線(xiàn)承擔(dān)了傳輸協(xié)議轉(zhuǎn)換、數(shù)據(jù)格式轉(zhuǎn)換、服務(wù)路由、監(jiān)控告警等多種功能。如下圖:

在微服務(wù)中,服務(wù)之間使用輕量級(jí)的HTTP進(jìn)行遠(yuǎn)程調(diào)用,也就是弱管道。而在服務(wù)自身內(nèi)部需要實(shí)現(xiàn)一些傳輸協(xié)議轉(zhuǎn)換、數(shù)據(jù)格式轉(zhuǎn)換等功能,也就是強(qiáng)終端。如下圖:

去中心化管理

在團(tuán)隊(duì)管理方面,微服務(wù)是去中心化的。負(fù)責(zé)每一個(gè)服務(wù)的團(tuán)隊(duì)一般都是自治的,包括開(kāi)發(fā)、測(cè)試、運(yùn)維和實(shí)施等各個(gè)方面,而不是傳統(tǒng)的集中式的管理。

去中心化數(shù)據(jù)管理

這個(gè)特點(diǎn)和上一個(gè)特點(diǎn)很類(lèi)似,它是在數(shù)據(jù)管理方面是去中心化的。在以往的單體架構(gòu)中,使用的是一個(gè)中心數(shù)據(jù),如下圖;

在微服務(wù)架構(gòu)中,每個(gè)服務(wù)鏈接的數(shù)據(jù)庫(kù)是可以是不同的,甚至數(shù)據(jù)庫(kù)的類(lèi)型可以可以是不同的,如下圖:

基礎(chǔ)設(shè)施自動(dòng)化

一個(gè)單體系統(tǒng)可以十分方便地通過(guò)這些環(huán)境被構(gòu)建、測(cè)試和推送。

由于服務(wù)被拆分的粒度比較細(xì),所以就會(huì)產(chǎn)生數(shù)量眾多的服務(wù),使用自動(dòng)化的基礎(chǔ)設(shè)施是非常必要的。也就是我們經(jīng)常提及的CI/CD(Continuous Integration,持續(xù)集成,Continuous Delivery,持續(xù)交付)。

目前的DevOps實(shí)踐涉及軟件應(yīng)用程序在整個(gè)開(kāi)發(fā)生命周期內(nèi)的持續(xù)開(kāi)發(fā)、持續(xù)測(cè)試、持續(xù)集成、持續(xù)部署和持續(xù)監(jiān)控。

容錯(cuò)性設(shè)計(jì)

在數(shù)量眾多的服務(wù)之間進(jìn)行遠(yuǎn)程調(diào)用,難免會(huì)因?yàn)榈讓佑布蚓W(wǎng)絡(luò)的不可靠而造成失敗。所以在服務(wù)被設(shè)計(jì)時(shí)就能夠容忍錯(cuò)誤,比如:超時(shí)、重試、失效轉(zhuǎn)移、冪等性、熔斷、限流等機(jī)制。

演進(jìn)式設(shè)計(jì)

因?yàn)槊總€(gè)服務(wù)的獨(dú)立開(kāi)發(fā)、獨(dú)立部署的,所以對(duì)服務(wù)的變更、升級(jí)、替換就變得相對(duì)容易。

要對(duì)一個(gè)大型單體應(yīng)用進(jìn)行微服務(wù)轉(zhuǎn)型,肯定不是把這個(gè)大的單體應(yīng)用直接干掉,建一個(gè)新的微服務(wù)系統(tǒng)出來(lái),而是要以增量的、非破壞的方式把某項(xiàng)業(yè)務(wù)一步步抽離形成新的服務(wù)。

更深入了解

以上是對(duì)微服務(wù)的九個(gè)特點(diǎn)通俗易懂的介紹,如果你不滿(mǎn)足于此,可以閱讀Microserviceshttps://martinfowler.com/articles/microservices.html)進(jìn)行更深入的了解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容