- Spring Cloud微服務(wù)架構(gòu)實(shí)戰(zhàn)
- 周喜平主編
- 2216字
- 2022-10-26 17:23:41
1.1 系統(tǒng)架構(gòu)的發(fā)展歷史
隨著互聯(lián)網(wǎng)的發(fā)展、網(wǎng)站應(yīng)用規(guī)模的不斷擴(kuò)大、上網(wǎng)需求的激增,互聯(lián)網(wǎng)技術(shù)上的壓力不斷增加,系統(tǒng)架構(gòu)也因此不斷地演進(jìn)、升級、迭代,從單體架構(gòu),到垂直架構(gòu),到分布式架構(gòu),再到SOA,以及現(xiàn)在火熱的微服務(wù)架構(gòu)。
很多軟件都是基于最新架構(gòu)開發(fā)的,很少有人會(huì)去了解以前的系統(tǒng)架構(gòu),但對于想往架構(gòu)師方向發(fā)展的開發(fā)者來說,了解系統(tǒng)架構(gòu)的發(fā)展歷史和每個(gè)階段的系統(tǒng)架構(gòu),是很有必要的,這同樣能夠幫助開發(fā)者更好地設(shè)計(jì)以及演進(jìn)系統(tǒng)架構(gòu)。
· 1.1.1 單體架構(gòu)
早期,一般的公司在開發(fā)Java Web程序時(shí),大都使用Struts 2、Spring和Hibernate等技術(shù)框架,每一個(gè)項(xiàng)目都會(huì)發(fā)布一個(gè)單體應(yīng)用。例如開發(fā)一個(gè)進(jìn)銷存系統(tǒng),會(huì)開發(fā)一個(gè)WAR包部署到Tomcat中,每次需要開發(fā)新的模塊或添加新的功能時(shí),都會(huì)在原來的基礎(chǔ)上不斷地添加。若干次后,這個(gè)WAR包會(huì)不斷地膨脹,程序員在進(jìn)行調(diào)試時(shí),服務(wù)器可能需要很長時(shí)間才能啟動(dòng),維護(hù)這個(gè)系統(tǒng)的效率極為低下。圖1-1所示為電商系統(tǒng)的單體架構(gòu),涵蓋了商品管理、訂單管理、用戶管理等模塊。

圖1-1 單體架構(gòu)
單體架構(gòu)的優(yōu)點(diǎn)和缺點(diǎn)如下。
優(yōu)點(diǎn):開發(fā)速度快,維護(hù)成本低,適用于并發(fā)要求較低的系統(tǒng)。
缺點(diǎn):代碼耦合度高,后期維護(hù)困難,無法根據(jù)不同模塊進(jìn)行針對性優(yōu)化,無法水平擴(kuò)展,單點(diǎn)容錯(cuò)
率低,并發(fā)能力差。
· 1.1.2 垂直架構(gòu)
當(dāng)訪問量逐漸增大,單體架構(gòu)應(yīng)用無法滿足需求時(shí),為了滿足更高的并發(fā)和業(yè)務(wù)需求可以根據(jù)業(yè)務(wù)功能對系統(tǒng)進(jìn)行拆分,以提高訪問效率。電商系統(tǒng)的垂直架構(gòu)如圖1-2所示。

圖1-2 垂直架構(gòu)
垂直架構(gòu)的優(yōu)點(diǎn)和缺點(diǎn)如下。
優(yōu)點(diǎn):對系統(tǒng)進(jìn)行拆分,實(shí)現(xiàn)了流量分擔(dān),解決了并發(fā)問題,可以針對不同模塊進(jìn)行優(yōu)化,方便水平
擴(kuò)展、負(fù)載均衡,容錯(cuò)率提高。
缺點(diǎn):系統(tǒng)間相互獨(dú)立,會(huì)有很多重復(fù)的開發(fā)工作,影響開發(fā)效率。
· 1.1.3 分布式架構(gòu)
當(dāng)垂直應(yīng)用越來越多時(shí),應(yīng)用之間的交互不可避免,可將核心業(yè)務(wù)抽取出來作為獨(dú)立的服務(wù),逐漸形成穩(wěn)定的服務(wù)中心,使前端應(yīng)用能更快速地響應(yīng)多變的市場需求。電商系統(tǒng)的分布式架構(gòu)如圖1-3所示。

圖1-3 分布式架構(gòu)
分布式架構(gòu)的優(yōu)點(diǎn)和缺點(diǎn)如下。
優(yōu)點(diǎn):將基礎(chǔ)服務(wù)進(jìn)行了抽取,系統(tǒng)間相互調(diào)用,提高了代碼復(fù)用率和開發(fā)效率。
缺點(diǎn):系統(tǒng)間耦合度變高,調(diào)用關(guān)系錯(cuò)綜復(fù)雜,難以維護(hù)。
· 1.1.4 面向服務(wù)的架構(gòu)
面向服務(wù)的架構(gòu)(SOA)是一種設(shè)計(jì)方法,其中包含多個(gè)服務(wù),服務(wù)之間通過相互依賴最終提供一系列的功能。一個(gè)服務(wù)通常以獨(dú)立的形式存在于操作系統(tǒng)進(jìn)程中,各個(gè)服務(wù)之間通過網(wǎng)絡(luò)調(diào)用。SOA示例如圖1-4所示。

圖1-4 SOA示例
企業(yè)服務(wù)總線(Enterprise Service Bus,ESB)簡單來說就是管道,用來連接各個(gè)服務(wù)節(jié)點(diǎn)。為了集成不同系統(tǒng)、不同協(xié)議的服務(wù),ESB 做了消息的轉(zhuǎn)化解釋和路由工作,讓不同的服務(wù)互聯(lián)互通。
SOA的優(yōu)點(diǎn)和缺點(diǎn)如下。
優(yōu)點(diǎn):抽取公共的功能為服務(wù),提高了開發(fā)效率;對不同的服務(wù)進(jìn)行集群化部署,緩解了系統(tǒng)壓力;減少了系統(tǒng)耦合。
缺點(diǎn):每個(gè)供應(yīng)商提供的ESB產(chǎn)品有差異,自身實(shí)現(xiàn)較為復(fù)雜,應(yīng)用服務(wù)粒度較大;ESB整合了所有
服務(wù)、協(xié)議和數(shù)據(jù)轉(zhuǎn)換,使得運(yùn)維、測試、部署困難;所有服務(wù)都通過一條通路通信,直接降低了通信速率。
· 1.1.5 微服務(wù)架構(gòu)
微服務(wù)架構(gòu)使用一套小服務(wù)來開發(fā)單個(gè)應(yīng)用,每個(gè)服務(wù)基于單一業(yè)務(wù)功能構(gòu)建, 運(yùn)行在自己的進(jìn)程中,使用輕量級通信機(jī)制,通常采用HTTP RESTful API(RESTful API是利用HTTP請求訪問或使用數(shù)據(jù)的應(yīng)用程序接口),能夠通過自動(dòng)化部署機(jī)制來獨(dú)立部署。這些服務(wù)可以使用不同的編程語言實(shí)現(xiàn),以適應(yīng)不同的數(shù)據(jù)存儲(chǔ)技術(shù),并保持最低限度的集中式管理。微服務(wù)架構(gòu)示例如圖1-5所示。

圖1-5 微服務(wù)架構(gòu)示例
網(wǎng)關(guān)(Gateway)通常是一個(gè)服務(wù)器,是系統(tǒng)的唯一入口,為每個(gè)客戶端提供一個(gè)定制的API。 API網(wǎng)關(guān)的核心是所有的客戶端和服務(wù)器都通過統(tǒng)一的網(wǎng)關(guān)接入微服務(wù),在網(wǎng)關(guān)實(shí)現(xiàn)所有的非業(yè)務(wù)功能。它還可以具有其他職責(zé),如身份驗(yàn)證、監(jiān)控、負(fù)載均衡、緩存、請求分片與管理、靜態(tài)響應(yīng)處理等。通常,網(wǎng)關(guān)提供RESTful HTTP的方式訪問服務(wù),而服務(wù)器通過注冊中心進(jìn)行服務(wù)注冊和管理。
微服務(wù)的特點(diǎn)如下。
(1)單一職責(zé):微服務(wù)中每一個(gè)服務(wù)都對應(yīng)唯一的業(yè)務(wù)功能,做到單一職責(zé)。
(2)微:微服務(wù)的服務(wù)拆分粒度很小,例如用戶管理就可以作為一個(gè)服務(wù)。每個(gè)服務(wù)雖小,但“五臟俱全”。
(3)面向服務(wù):面向服務(wù)是指每個(gè)服務(wù)都要對外暴露RESTful接口API,不關(guān)心服務(wù)的技術(shù)實(shí)現(xiàn),做到與平臺(tái)和語言無關(guān),也不限定用什么技術(shù)實(shí)現(xiàn),只要提供REST的接口即可。
(4)自治:自治是指服務(wù)間互相獨(dú)立、互不干擾、耦合度低。團(tuán)隊(duì)獨(dú)立是指每個(gè)服務(wù)都有一個(gè)獨(dú)立的開發(fā)團(tuán)隊(duì),人數(shù)不能過多;技術(shù)獨(dú)立是指因?yàn)槭敲嫦蚍?wù),提供REST接口,使用什么技術(shù)沒有別人干涉;前后端分離是指采用前后端分離開發(fā),提供統(tǒng)一REST接口,后端不用再為PC、移動(dòng)端開發(fā)不同的接口;數(shù)據(jù)庫分離是指每個(gè)服務(wù)都使用自己的數(shù)據(jù)源,部署獨(dú)立,服務(wù)間雖然有調(diào)用,但能做到一個(gè)服務(wù)重啟不影響其他服務(wù),有利于持續(xù)集成和持續(xù)交付。每個(gè)服務(wù)都是獨(dú)立的組件,可復(fù)用、可替換和易維護(hù)。
微服務(wù)架構(gòu)與SOA都是對系統(tǒng)進(jìn)行拆分;微服務(wù)架構(gòu)基于SOA思想,把微服務(wù)當(dāng)作去除了ESB的SOA。ESB是SOA中的中心總線,設(shè)計(jì)圖形應(yīng)該是星形的,而微服務(wù)架構(gòu)是去中心化的分布式軟件架構(gòu)。兩者比較類似,但其實(shí)也有一些差別,如表1-1所示。
表1-1 SOA與微服務(wù)架構(gòu)對比

微服務(wù)架構(gòu)的優(yōu)點(diǎn)和缺點(diǎn)如下。
優(yōu)點(diǎn):通過服務(wù)的原子化拆分,以及微服務(wù)的獨(dú)立打包、部署和升級,小團(tuán)隊(duì)的交付周期將縮短,運(yùn)維成本也將大幅度下降;微服務(wù)遵循單一原則,微服務(wù)之間采用RESTful等輕量協(xié)議傳輸。
缺點(diǎn):微服務(wù)過多,服務(wù)治理成本高,不利于系統(tǒng)維護(hù);分布式系統(tǒng)開發(fā)的技術(shù)成本高(容錯(cuò)、分布式事務(wù)等)。
- MATLAB與C/C++混合編程
- JavaScript框架設(shè)計(jì)
- 從零基礎(chǔ)到精通Flutter開發(fā)
- Java高手真經(jīng)·編程基礎(chǔ)卷:Java核心編程技術(shù)
- 軟件工程理論與應(yīng)用
- Spring Cloud Alibaba大型微服務(wù)架構(gòu)項(xiàng)目實(shí)戰(zhàn)(上冊)
- 這就是MCP
- Unity AR/VR開發(fā):從新手到專家
- 中國軟件工程師:工作、生活與觀念
- 多面體編譯理論與深度學(xué)習(xí)實(shí)踐
- 分布式應(yīng)用系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)踐
- MATLAB函數(shù)速查手冊(修訂版)
- Bootstrap實(shí)戰(zhàn)
- 軟件工程:理論與實(shí)踐(第2版)
- Unity 3D游戲開發(fā)技術(shù)詳解與典型案例