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