首頁技術(shù)文章正文

微服務(wù)架構(gòu)是什么?微服務(wù)架構(gòu)與SOA的區(qū)別

更新時(shí)間:2022-03-30 來源:黑馬程序員 瀏覽量:

微服務(wù)架構(gòu)定義

微服務(wù)架構(gòu)是一種架構(gòu)風(fēng)格和架構(gòu)思想,它倡導(dǎo)我們在傳統(tǒng)軟件應(yīng)用架構(gòu)的基礎(chǔ)上,將系統(tǒng)業(yè)務(wù)按照功能拆分為更加細(xì)粒度的服務(wù),所拆分的每一個(gè)服務(wù)都是一個(gè)獨(dú)立的應(yīng)用,這些應(yīng)用對外提供公共的API,可以獨(dú)立承擔(dān)對外服務(wù)的職責(zé),通過此種思想方式所開發(fā)的軟件服務(wù)實(shí)體就是“微服務(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ù)拆分為了獨(dú)立的服務(wù),其中的每一個(gè)服務(wù)都是一個(gè)獨(dú)立的應(yīng)用,可以訪問自己的數(shù)據(jù)庫,這些服務(wù)對外提供公共的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)思想,需要從整體上對軟件系統(tǒng)進(jìn)行全面的考慮。

微服務(wù)架構(gòu)的優(yōu)點(diǎn)

與傳統(tǒng)單體應(yīng)用架構(gòu)相比,微服務(wù)架構(gòu)有很多優(yōu)點(diǎn),具體表現(xiàn)如下:

1.復(fù)雜度可控

微服務(wù)架構(gòu)在將應(yīng)用分解的同時(shí),規(guī)避了原本復(fù)雜度無止境的積累。每一個(gè)微服務(wù)專注于單一功能,并通過定義良好的接口清晰地表述服務(wù)邊界。由于體積小、復(fù)雜度低,每個(gè)微服務(wù)可由一個(gè)小規(guī)模開發(fā)團(tuán)隊(duì)完全掌控,易于保持高可維護(hù)性,并提高了開發(fā)效率。

2.可獨(dú)立部署

由于微服務(wù)具備獨(dú)立的運(yùn)行進(jìn)程,所以每個(gè)微服務(wù)都可以獨(dú)立部署。當(dāng)某個(gè)微服務(wù)發(fā)生變更時(shí),無需編譯、部署整個(gè)應(yīng)用。由微服務(wù)組成的應(yīng)用相當(dāng)于具備一系列可并行的發(fā)布流程,使得發(fā)布更加高效,同時(shí)降低了對生產(chǎn)環(huán)境所造成的風(fēng)險(xiǎn),最終縮短應(yīng)用交付周期。

3.技術(shù)選型靈活

微服務(wù)架構(gòu)下,技術(shù)的選型是多樣化的。每個(gè)團(tuán)隊(duì)都可以根據(jù)自身服務(wù)的需求和行業(yè)發(fā)展的現(xiàn)狀,自由選擇最適合的技術(shù)。由于每個(gè)微服務(wù)相對簡單,當(dāng)需要對技術(shù)進(jìn)行升級(jí)時(shí),所面臨的風(fēng)險(xiǎn)較低,甚至完全重構(gòu)一個(gè)微服務(wù)也是可行并容易的。

4.易于容錯(cuò)

當(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ù)可通過重試、平穩(wěn)退化等機(jī)制實(shí)現(xiàn)應(yīng)用層面的容錯(cuò)。

5.易于擴(kuò)展

單個(gè)服務(wù)應(yīng)用也可以實(shí)現(xiàn)橫向擴(kuò)展,這種擴(kuò)展可以通過將整個(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ò)展。

6.功能特定

每個(gè)微服務(wù)有自己的業(yè)務(wù)邏輯和適配器,并且一個(gè)微服務(wù)一般只完成某個(gè)特定的功能,例如商品服務(wù)只管理商品、客戶服務(wù)只管理客戶等。這樣開發(fā)人員可以完全的專注于某一個(gè)特定功能的開發(fā),而不用過多的考慮其他,從而提高開發(fā)效率。

除了上述幾點(diǎn)好處外,微服務(wù)架構(gòu)還有很多好處,由于篇幅有限,這里就不一一列舉了,但從微服務(wù)架構(gòu)的好處可以看出,使用微服務(wù)可以很好的解決傳統(tǒng)單體架構(gòu)中的問題。

微服務(wù)架構(gòu)的不足

微服務(wù)架構(gòu)除了有上面所講的各種優(yōu)點(diǎn)外,還存在著一些不足,這些不足的具體表現(xiàn)如下:

1.開發(fā)人員必須處理創(chuàng)建分布式系統(tǒng)的復(fù)雜性

①開發(fā)工具(或IDE)是面向構(gòu)建傳統(tǒng)的單體應(yīng)用程序的,不為開發(fā)分布式應(yīng)用程序提供全面功能上的支持。

②測試更加困難。在微服務(wù)架構(gòu)中,服務(wù)數(shù)量眾多,每個(gè)服務(wù)都是獨(dú)立的業(yè)務(wù)單元,服務(wù)主要通過接口進(jìn)行交互,如何保證依賴的正常,是測試面臨的主要挑戰(zhàn)。

③開發(fā)人員必須實(shí)現(xiàn)服務(wù)間的通信機(jī)制。

④實(shí)現(xiàn)用例跨多個(gè)服務(wù)時(shí),需要面對使用分布式事務(wù)管理的困難。

⑤l實(shí)現(xiàn)跨多個(gè)服務(wù)的用例,需要團(tuán)隊(duì)之間進(jìn)行仔細(xì)的協(xié)調(diào)。

2.部署的復(fù)雜性

在部署和管理時(shí),由許多不同服務(wù)類型組成的系統(tǒng)的操作比較復(fù)雜,這將要求開發(fā)、測試及運(yùn)維人員有相應(yīng)的技術(shù)水平。

3.增加內(nèi)存消耗

微服務(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)存開銷。

微服務(wù)架構(gòu)與SOA的區(qū)別

通過前3個(gè)小節(jié)的學(xué)習(xí),相信有些讀者對微服務(wù)架構(gòu)已經(jīng)有了一定的了解。在學(xué)完后,細(xì)心的讀者可能會(huì)有這樣一個(gè)疑問,微服務(wù)架構(gòu)與SOA都是對單體架構(gòu)的拆分,那么他們有什么不同呢?下面通過一個(gè)表格對兩者的區(qū)別進(jìn)行對比,如表1-1所示。

表1-1微服務(wù)架構(gòu)與SOA的區(qū)別






猜你喜歡:

微服務(wù)架構(gòu)中涉及的常見組件有哪些?【Java培訓(xùn)】

微服務(wù)技術(shù)棧教程:實(shí)用篇+高級(jí)篇+面試篇【全184集】

怎么使用Spring Boot 實(shí)現(xiàn)一個(gè)微服務(wù)?

什么是微服務(wù)?微服務(wù)和分布式的區(qū)別有哪些?

黑馬程序員Java開發(fā)培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們在線交談!