前言
本文旨在講清楚什么是分布式微服務(wù)架構(gòu)
,通過解釋微服務(wù)架構(gòu)和分布式架構(gòu)
,來理解分布式微服務(wù)架構(gòu)
,并且揭示了其相較于單體架構(gòu)
的優(yōu)點,以及該架構(gòu)面臨的問題
。
在介紹分布式微服務(wù)之前,我們先從名字分析,這個名詞包含了兩部分,第一部分:分布式
,第二部分:微服務(wù)
。如果搞清楚了這兩個,那么基本上就弄明白了。
什么是微服務(wù)
微服務(wù)
是一種架構(gòu)
風格,用于構(gòu)建分布式系統(tǒng)
(關(guān)于什么是分布式,這個后文會提到)。
它將一個大型應(yīng)用程序
拆分為一組小型的、自治的服務(wù)
,每個服務(wù)都運行在獨立的進程中,并通過網(wǎng)絡(luò)進行通信
。每個微服務(wù)專注于解決特定的業(yè)務(wù)問題
,并可以獨立地進行開發(fā)、部署和擴展。
關(guān)于什么是架構(gòu)風格:
架構(gòu)風格是指軟件系統(tǒng)中構(gòu)件(可以理解系統(tǒng)的構(gòu)成部分)的組織方式和連接方式,
反映了領(lǐng)域中眾多系統(tǒng)所共有的結(jié)構(gòu)和語義特性(比如看一個生物是不是牛,那就去它身上找牛的特征 符合特征的就是牛 不符合的就不是),
并指導(dǎo)如何將各個構(gòu)件有效地組織成一個完整的系統(tǒng)(也就是搭建系統(tǒng))
比如最常見的單體架構(gòu)風格,就是把所有的功能都塞到一個應(yīng)用里面,然后打包以及部署
舉例說明
舉個例子,假設(shè)我們有一個在線電影平臺的網(wǎng)站。
在傳統(tǒng)的單體架構(gòu)
中,所有的功能,例如用戶管理、電影管理、支付管理
等,都被打包在一個單一的應(yīng)用程序中
。
這個應(yīng)用程序負責處理用戶的注冊和登錄、瀏覽電影、下訂單和支付
等操作。
現(xiàn)在,我們可以使用微服務(wù)架構(gòu)
來構(gòu)建這個電影平臺。我們可以將不同的功能模塊拆分為獨立的微服務(wù)
,例如上面提到的功能可以劃分為用戶服務(wù)、電影服務(wù)、訂單服務(wù)和支付服務(wù)
。
在這里我要插一句,上述是按功能來劃分服務(wù),但在實際開發(fā)中,不一定是按功能拆分。
拆分的方式有很多,可以從功能維度,就是上面的這種,
也可以從別的維度拆分,如業(yè)務(wù)域維度或者數(shù)據(jù)維度等等。
用戶服務(wù)負責處理用戶的注冊和登錄功能
,它有自己的數(shù)據(jù)庫來存儲用戶信息。當用戶進行注冊時,用戶服務(wù)會驗證用戶信息,并將用戶信息存儲在自己的數(shù)據(jù)庫中。
電影服務(wù)負責管理電影的信息
,例如電影的標題、演員、評分等。它也有自己的數(shù)據(jù)庫來存儲電影信息。當用戶瀏覽電影時,電影服務(wù)會提供電影列表和詳細信息。
訂單服務(wù)負責處理用戶下訂單的功能
。當用戶下訂單時,訂單服務(wù)會驗證訂單信息并將訂單存儲在自己的數(shù)據(jù)庫中。
支付服務(wù)負責處理支付過程
。當用戶確認支付時,支付服務(wù)會與支付網(wǎng)關(guān)進行通信并完成支付操作。
這樣,不同的功能模塊被拆分為獨立的微服務(wù),它們可以獨立開發(fā)、部署和擴展
。每個微服務(wù)都有自己的責任范圍,可以根據(jù)需要獨立進行擴展或升級。微服務(wù)之間通過網(wǎng)絡(luò)進行通信
,使用輕量級的通信協(xié)議,如HTTP或消息隊列。
什么是分布式
在我們?nèi)粘T诰W(wǎng)站搭建的上下文中,提到的分布式通常指的是分布式系統(tǒng)架構(gòu)
。
在這種架構(gòu)下,一個網(wǎng)站的功能被拆分為多個獨立的服務(wù),這些服務(wù)分布在不同的計算機節(jié)點上
,并通過網(wǎng)絡(luò)進行通信和協(xié)作
(注意這一句,這些服務(wù)分布在不同的計算機節(jié)點上
)。
每個服務(wù)負責特定的功能或模塊
,它們可以獨立地
進行開發(fā)、部署和擴展。這種分布式架構(gòu)可以提高網(wǎng)站的性能、可靠性和可擴展性。
圖解分布式與微服務(wù)
下面的圖簡單揭示了將一個單體架構(gòu)的系統(tǒng),轉(zhuǎn)變?yōu)樯鲜鑫⒎?wù)和分布式架構(gòu)的過程
。
單體架構(gòu)及部署
微服務(wù)架構(gòu)
首先使用微服務(wù)架構(gòu)會將功能拆分為一個個的微服務(wù)
注意這里,拆分后的每個服務(wù)都是一個小的、獨立的應(yīng)用程序
,可以單獨測試、部署以及擴展
。
分布式
然后將這些微服務(wù)部署到服務(wù)器上,這就是分布式
上述是每個服務(wù)都部署到一個不同的服務(wù)器
上,但在實際開發(fā)中要按照服務(wù)器的規(guī)格來部署
,有的可能可以部署兩個或者三個,有的可能只能部署一個。
值得注意的是,同樣的服務(wù)可能部署多個
,可能有時候用戶支付比較頻繁,一個服務(wù)不夠用,那么我就可以再部署一個支付服務(wù)上去
,以提供更加穩(wěn)定、快速的響應(yīng),比如以下這樣:
影響
別看我們上面又是將單體應(yīng)用的功能拆分成微服務(wù),又是分開部署的
,但要說對用戶的有什么負面影響的話,我的回答是基本沒有
,從用戶使用體驗
來說,和之前的單體架構(gòu)沒有什么區(qū)別的。
要說有的話那就是他們會覺得響應(yīng)越來越快,越來越穩(wěn)定。
如果你也這么覺得的話,我覺得那真是泰褲辣!
其實將單體應(yīng)用拆分為微服務(wù)并進行分布式部署
對用戶基本是百利無一害
,要硬說有的話,那一害,害的是程序猿
。
單體架構(gòu)改為微服務(wù)和分布式架構(gòu)
以后,大概會造成以下影響:
-
性能改善
:通過微服務(wù)架構(gòu)和分布式部署,可以提高系統(tǒng)的性能和響應(yīng)
能力。每個微服務(wù)可以獨立擴展和優(yōu)化,從而提供更快速的響應(yīng)時間和更高的并發(fā)處理能力。 -
可用性增強
:微服務(wù)架構(gòu)的分布式部署可以提高系統(tǒng)的可用性。如果其中一個微服務(wù)出現(xiàn)故障,其他微服務(wù)仍然可以繼續(xù)工作,避免整個應(yīng)用停止運行
。這意味著用戶可以繼續(xù)使用其他可用的功能而不會完全失去服務(wù)。 -
更好的擴展性
:微服務(wù)架構(gòu)允許根據(jù)需求獨立擴展每個微服務(wù)
(參考之前提到的支付服務(wù))。這意味著當用戶量增加時,可以根據(jù)需要增加相關(guān)微服務(wù)的實例數(shù),以應(yīng)對高負載。這樣可以確保系統(tǒng)在用戶增長期間仍然保持穩(wěn)定的性能和可用性。 -
獨立功能開發(fā)和部署
:微服務(wù)架構(gòu)允許不同的團隊獨立開發(fā)和部署各個微服務(wù)
。這樣可以加快新功能的上線速度,并允許更靈活的迭代和持續(xù)交付。用戶可以更快地獲得新功能和改進,而無需等待整個應(yīng)用程序的發(fā)布。 -
潛在的復(fù)雜性增加
:微服務(wù)架構(gòu)和分布式部署可能引入一定的復(fù)雜性。由于需要管理多個微服務(wù)和它們之間的通信,涉及到一些額外的技術(shù)和工具
。這可能導(dǎo)致對開發(fā)、部署和運維的一些挑戰(zhàn),需要適當?shù)墓芾砗唾Y源投入。
簡單總結(jié)一下就是:
從系統(tǒng)
的角度出發(fā),微服務(wù)架構(gòu)和分布式部署可以帶來更好的性能、可用性和擴展性
。
而用戶
可以獲得更快的響應(yīng)時間,更穩(wěn)定的服務(wù),并且更快地獲得新功能
。
但對于開發(fā)者
說,需要注意潛在的復(fù)雜性和管理挑戰(zhàn)
,并確保適當?shù)?code>監(jiān)控和故障處理機制以保證用戶體驗的一致性。
分布式微服務(wù)架構(gòu)
相對于分布式架構(gòu)和微服務(wù)架構(gòu),可能大家對這個詞更加熟悉:分布式微服務(wù)架構(gòu)
什么是分布式微服務(wù)架構(gòu)
將上面的兩種架構(gòu)方式合到一起就變成了:分布式微服務(wù)架構(gòu)
。
在分布式微服務(wù)架構(gòu)中,一個大型的應(yīng)用程序?qū)徊鸱譃?code>多個小而自治的服務(wù)單元,每個服務(wù)單元獨立運行在分布式環(huán)境中
,并通過輕量級的通信協(xié)議進行相互通信。每個服務(wù)單元都專注于完成特定的業(yè)務(wù)功能,并可以獨立地進行開發(fā)、部署、擴展和維護。
分布式微服務(wù)架構(gòu)有助于解決傳統(tǒng)單體應(yīng)用程序
的復(fù)雜性和可擴展性問題,提供更靈活、可靠和可維護的系統(tǒng)架構(gòu)
。它適用于大型、復(fù)雜的應(yīng)用程序
和需要快速迭代的敏捷開發(fā)環(huán)境。通過拆分應(yīng)用程序為多個服務(wù)單元,分布式微服務(wù)使得團隊可以更快地交付業(yè)務(wù)價值,并更好地應(yīng)對不斷變化的業(yè)務(wù)需求。
面臨的問題
分布式微服務(wù)架構(gòu)雖然相較于傳統(tǒng)的單體應(yīng)用具有很多的優(yōu)點,但是其在提出之際面臨的問題也不少,大概是以下幾個方面,以下描述中微服務(wù)簡稱為服務(wù)
:
-
各服務(wù)間通信和調(diào)用
:
在一個分布式系統(tǒng)中,服務(wù)之間需要進行通信和調(diào)用來完成業(yè)務(wù)功能
。我該如何確保通信的可靠性、安全性,以及如何避免服務(wù)之間的耦合
? -
服務(wù)注冊與發(fā)現(xiàn)
:
在一個分布式系統(tǒng)中,有大量的微服務(wù)實例需要管理和發(fā)現(xiàn)
。
我該如何有效地注冊和發(fā)現(xiàn)這些服務(wù)實例,以便其他服務(wù)可以動態(tài)地與它們進行通信
? -
負載均衡
:
在有多個服務(wù)實例
的情況下(比如之前圖中存在的多個支付服務(wù)
},
我該如何合理地分配負載
? -
服務(wù)容錯和故障恢復(fù)
:
服務(wù)可能會遇到故障、網(wǎng)絡(luò)延遲或異常
等問題。
我該如何處理服務(wù)故障和不可用情況,實現(xiàn)服務(wù)的容錯和故障恢復(fù)
? -
數(shù)據(jù)一致性和事務(wù)管理
:
在分布式系統(tǒng)中,由于服務(wù)之間的數(shù)據(jù)交互和操作
,并發(fā)情況下可能出現(xiàn)數(shù)據(jù)一致性
的問題。
我該如何處理分布式環(huán)境下的數(shù)據(jù)一致性,確保事務(wù)的原子性、一致性、隔離性和持久性
?。 -
分布式系統(tǒng)的監(jiān)控和調(diào)試
:
在分布式系統(tǒng)中,需要對各個服務(wù)的運行狀態(tài)、性能指標和日志進行監(jiān)控和調(diào)試,以及及時發(fā)現(xiàn)和解決問題
。
我該如何實現(xiàn)對分布式系統(tǒng)的監(jiān)控、日志聚合、異常跟蹤和性能分析
? -
部署和擴展
:
在分布式微服務(wù)架構(gòu)中,如何有效地部署和擴展
服務(wù),以適應(yīng)不斷變化的需求和負載。比如我今天突然要加兩到三個支付服務(wù)
,那我該怎么做?
也就是我該如何自動化部署服務(wù)、實現(xiàn)彈性擴展和平滑升級,同時保持系統(tǒng)的高可用性和穩(wěn)定性
?文章來源:http://www.zghlxwxcb.cn/news/detail-563755.html
這些問題能不能解決?又如何解決?本文后續(xù)主角Spring Cloud Alibaba
將會給出答案。文章來源地址http://www.zghlxwxcb.cn/news/detail-563755.html
到了這里,關(guān)于什么是分布式微服務(wù)?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!