更新時(shí)間:2022-03-30 來(lái)源:黑馬程序員 瀏覽量:
微服務(wù)架構(gòu)是一種架構(gòu)風(fēng)格和架構(gòu)思想,它倡導(dǎo)我們?cè)趥鹘y(tǒng)軟件應(yīng)用架構(gòu)的基礎(chǔ)上,將系統(tǒng)業(yè)務(wù)按照功能拆分為更加細(xì)粒度的服務(wù),所拆分的每一個(gè)服務(wù)都是一個(gè)獨(dú)立的應(yīng)用,這些應(yīng)用對(duì)外提供公共的API,可以獨(dú)立承擔(dān)對(duì)外服務(wù)的職責(zé),通過(guò)此種思想方式所開(kāi)發(fā)的軟件服務(wù)實(shí)體就是“微服務(wù)”,而圍繞著微服務(wù)思想構(gòu)建的一系列體系結(jié)構(gòu)(包括開(kāi)發(fā)、測(cè)試、部署等),我們可以將它稱之為“微服務(wù)架構(gòu)”。
根據(jù)微服務(wù)架構(gòu)的定義,將傳統(tǒng)單體架構(gòu)拆分為微服務(wù)架構(gòu)的方式如圖1-4所示。
圖1-4傳統(tǒng)單體架構(gòu)拆分為微服務(wù)架構(gòu)
從圖1-4中可以看出,微服務(wù)架構(gòu)已將傳統(tǒng)單體架構(gòu)中的訂單服務(wù)、商品服務(wù)和用戶服務(wù)拆分為了獨(dú)立的服務(wù),其中的每一個(gè)服務(wù)都是一個(gè)獨(dú)立的應(yīng)用,可以訪問(wèn)自己的數(shù)據(jù)庫(kù),這些服務(wù)對(duì)外提供公共的API,并且服務(wù)之間可以相互調(diào)用。
注意:微服務(wù)和微服務(wù)架構(gòu)是兩個(gè)不同的概念。微服務(wù)強(qiáng)調(diào)的是服務(wù)的大小,它關(guān)注的是某一個(gè)點(diǎn),而微服務(wù)架構(gòu)是一種架構(gòu)思想,需要從整體上對(duì)軟件系統(tǒng)進(jìn)行全面的考慮。
與傳統(tǒng)單體應(yīng)用架構(gòu)相比,微服務(wù)架構(gòu)有很多優(yōu)點(diǎn),具體表現(xiàn)如下:
微服務(wù)架構(gòu)在將應(yīng)用分解的同時(shí),規(guī)避了原本復(fù)雜度無(wú)止境的積累。每一個(gè)微服務(wù)專注于單一功能,并通過(guò)定義良好的接口清晰地表述服務(wù)邊界。由于體積小、復(fù)雜度低,每個(gè)微服務(wù)可由一個(gè)小規(guī)模開(kāi)發(fā)團(tuán)隊(duì)完全掌控,易于保持高可維護(hù)性,并提高了開(kāi)發(fā)效率。
由于微服務(wù)具備獨(dú)立的運(yùn)行進(jìn)程,所以每個(gè)微服務(wù)都可以獨(dú)立部署。當(dāng)某個(gè)微服務(wù)發(fā)生變更時(shí),無(wú)需編譯、部署整個(gè)應(yīng)用。由微服務(wù)組成的應(yīng)用相當(dāng)于具備一系列可并行的發(fā)布流程,使得發(fā)布更加高效,同時(shí)降低了對(duì)生產(chǎn)環(huán)境所造成的風(fēng)險(xiǎn),最終縮短應(yīng)用交付周期。
微服務(wù)架構(gòu)下,技術(shù)的選型是多樣化的。每個(gè)團(tuán)隊(duì)都可以根據(jù)自身服務(wù)的需求和行業(yè)發(fā)展的現(xiàn)狀,自由選擇最適合的技術(shù)。由于每個(gè)微服務(wù)相對(duì)簡(jiǎn)單,當(dāng)需要對(duì)技術(shù)進(jìn)行升級(jí)時(shí),所面臨的風(fēng)險(xiǎn)較低,甚至完全重構(gòu)一個(gè)微服務(wù)也是可行并容易的。
當(dāng)架構(gòu)中的某一組件發(fā)生故障時(shí),在單一進(jìn)程的傳統(tǒng)架構(gòu)下,故障很有可能在進(jìn)程內(nèi)擴(kuò)散,導(dǎo)致整個(gè)應(yīng)用不可用。在微服務(wù)架構(gòu)下,故障會(huì)被隔離在單個(gè)服務(wù)中。若設(shè)計(jì)良好,其他服務(wù)可通過(guò)重試、平穩(wěn)退化等機(jī)制實(shí)現(xiàn)應(yīng)用層面的容錯(cuò)。
單個(gè)服務(wù)應(yīng)用也可以實(shí)現(xiàn)橫向擴(kuò)展,這種擴(kuò)展可以通過(guò)將整個(gè)應(yīng)用完整的復(fù)制到不同的節(jié)點(diǎn)中實(shí)現(xiàn)。當(dāng)應(yīng)用的不同組件在擴(kuò)展需求上存在差異時(shí),微服務(wù)架構(gòu)便體現(xiàn)出其靈活性,因?yàn)槊總€(gè)服務(wù)可以根據(jù)實(shí)際需求獨(dú)立進(jìn)行擴(kuò)展。
每個(gè)微服務(wù)有自己的業(yè)務(wù)邏輯和適配器,并且一個(gè)微服務(wù)一般只完成某個(gè)特定的功能,例如商品服務(wù)只管理商品、客戶服務(wù)只管理客戶等。這樣開(kāi)發(fā)人員可以完全的專注于某一個(gè)特定功能的開(kāi)發(fā),而不用過(guò)多的考慮其他,從而提高開(kāi)發(fā)效率。
除了上述幾點(diǎn)好處外,微服務(wù)架構(gòu)還有很多好處,由于篇幅有限,這里就不一一列舉了,但從微服務(wù)架構(gòu)的好處可以看出,使用微服務(wù)可以很好的解決傳統(tǒng)單體架構(gòu)中的問(wèn)題。
微服務(wù)架構(gòu)除了有上面所講的各種優(yōu)點(diǎn)外,還存在著一些不足,這些不足的具體表現(xiàn)如下:
①開(kāi)發(fā)工具(或IDE)是面向構(gòu)建傳統(tǒng)的單體應(yīng)用程序的,不為開(kāi)發(fā)分布式應(yīng)用程序提供全面功能上的支持。
②測(cè)試更加困難。在微服務(wù)架構(gòu)中,服務(wù)數(shù)量眾多,每個(gè)服務(wù)都是獨(dú)立的業(yè)務(wù)單元,服務(wù)主要通過(guò)接口進(jìn)行交互,如何保證依賴的正常,是測(cè)試面臨的主要挑戰(zhàn)。
③開(kāi)發(fā)人員必須實(shí)現(xiàn)服務(wù)間的通信機(jī)制。
④實(shí)現(xiàn)用例跨多個(gè)服務(wù)時(shí),需要面對(duì)使用分布式事務(wù)管理的困難。
⑤l實(shí)現(xiàn)跨多個(gè)服務(wù)的用例,需要團(tuán)隊(duì)之間進(jìn)行仔細(xì)的協(xié)調(diào)。
在部署和管理時(shí),由許多不同服務(wù)類型組成的系統(tǒng)的操作比較復(fù)雜,這將要求開(kāi)發(fā)、測(cè)試及運(yùn)維人員有相應(yīng)的技術(shù)水平。
微服務(wù)架構(gòu)用多個(gè)服務(wù)實(shí)例取代了1個(gè)單體應(yīng)用程序?qū)嵗?,如果每個(gè)服務(wù)都運(yùn)行在自己的JVM中,那么有多少個(gè)服務(wù)實(shí)例,就會(huì)有多少個(gè)實(shí)例在運(yùn)行時(shí)的內(nèi)存開(kāi)銷。
通過(guò)前3個(gè)小節(jié)的學(xué)習(xí),相信有些讀者對(duì)微服務(wù)架構(gòu)已經(jīng)有了一定的了解。在學(xué)完后,細(xì)心的讀者可能會(huì)有這樣一個(gè)疑問(wèn),微服務(wù)架構(gòu)與SOA都是對(duì)單體架構(gòu)的拆分,那么他們有什么不同呢?下面通過(guò)一個(gè)表格對(duì)兩者的區(qū)別進(jìn)行對(duì)比,如表1-1所示。
表1-1微服務(wù)架構(gòu)與SOA的區(qū)別
微服務(wù)架構(gòu)中涉及的常見(jiàn)組件有哪些?【Java培訓(xùn)】
微服務(wù)技術(shù)棧教程:實(shí)用篇+高級(jí)篇+面試篇【全184集】
怎么使用Spring Boot 實(shí)現(xiàn)一個(gè)微服務(wù)?