官术网_书友最值得收藏!

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ù)等)。

主站蜘蛛池模板: 永福县| 南郑县| 汽车| 托里县| 南充市| 嫩江县| 美姑县| 拜泉县| 天门市| 伊吾县| 乌兰察布市| 雷波县| 昌都县| 石家庄市| 友谊县| 七台河市| 西城区| 沿河| 夏河县| 乐都县| 新民市| 新密市| 分宜县| 普陀区| 长治县| 右玉县| 北京市| 昭觉县| 广平县| 丹凤县| 丹棱县| 郸城县| 冕宁县| 澄迈县| 论坛| 临朐县| 黑河市| 佛冈县| 仙居县| 宜宾县| 吕梁市|