日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
終于有人把分布式系統(tǒng)架構(gòu)講明白了

終于有人把分布式系統(tǒng)架構(gòu)講明白了

作者:肖宇、冰河 2021-10-20 18:49:29

開發(fā)

架構(gòu)

分布式 隨著互聯(lián)網(wǎng)的不斷發(fā)展,企業(yè)積累的數(shù)據(jù)越來(lái)越多。當(dāng)單臺(tái)數(shù)據(jù)庫(kù)難以存儲(chǔ)海量數(shù)據(jù)時(shí),人們便開始探索如何將這些數(shù)據(jù)分散地存儲(chǔ)到多臺(tái)服務(wù)器的多臺(tái)數(shù)據(jù)庫(kù)中,逐漸形成了分布式數(shù)據(jù)庫(kù)。

本文轉(zhuǎn)載自微信公眾號(hào)「數(shù)倉(cāng)寶貝庫(kù)」,作者肖宇、冰河。轉(zhuǎn)載本文請(qǐng)聯(lián)系數(shù)倉(cāng)寶貝庫(kù)公眾號(hào)。

隨著互聯(lián)網(wǎng)的不斷發(fā)展,企業(yè)積累的數(shù)據(jù)越來(lái)越多。當(dāng)單臺(tái)數(shù)據(jù)庫(kù)難以存儲(chǔ)海量數(shù)據(jù)時(shí),人們便開始探索如何將這些數(shù)據(jù)分散地存儲(chǔ)到多臺(tái)服務(wù)器的多臺(tái)數(shù)據(jù)庫(kù)中,逐漸形成了分布式數(shù)據(jù)庫(kù)。如果將數(shù)據(jù)分散存儲(chǔ),對(duì)于數(shù)據(jù)的增刪改查操作就會(huì)變得更加復(fù)雜,尤其是難以保證數(shù)據(jù)的一致性問題,這就涉及了常說(shuō)的分布式事務(wù)。

本文對(duì)分布式事務(wù)的基本概念進(jìn)行介紹,涉及的內(nèi)容如下。

分布式系統(tǒng)架構(gòu)原則。

分布式系統(tǒng)架構(gòu)演進(jìn)。

分布式事務(wù)場(chǎng)景。

一.分布式系統(tǒng)架構(gòu)

隨著互聯(lián)網(wǎng)的快速發(fā)展,傳統(tǒng)的單體系統(tǒng)架構(gòu)已不能滿足海量用戶的需求。于是,更多的互聯(lián)網(wǎng)企業(yè)開始對(duì)原有系統(tǒng)進(jìn)行改造和升級(jí),將用戶產(chǎn)生的大規(guī)模流量進(jìn)行分解,分而治之,在不同的服務(wù)器上為用戶提供服務(wù),以滿足用戶的需求。慢慢地,由原來(lái)的單體系統(tǒng)架構(gòu)演變?yōu)榉植际较到y(tǒng)架構(gòu)。

1、產(chǎn)生的背景

在互聯(lián)網(wǎng)早期,互聯(lián)網(wǎng)企業(yè)的業(yè)務(wù)并不是很復(fù)雜,用戶量也不大,一般使用單體系統(tǒng)架構(gòu)快速實(shí)現(xiàn)業(yè)務(wù)。此時(shí),系統(tǒng)處理的流量入口更多來(lái)自PC端。

隨著用戶量爆發(fā)式增長(zhǎng),此時(shí)的流量入口不再只有PC端,更多來(lái)自移動(dòng)端App、H5、微信小程序、自主終端機(jī)、各種物聯(lián)網(wǎng)設(shè)備和網(wǎng)絡(luò)爬蟲等。用戶和企業(yè)的需求也開始變得越來(lái)越復(fù)雜。在不斷迭代升級(jí)的過程中,單體系統(tǒng)變得越來(lái)越臃腫,系統(tǒng)的業(yè)務(wù)也變得越來(lái)越復(fù)雜,甚至難以維護(hù)。修改一個(gè)很小的功能可能會(huì)導(dǎo)致整個(gè)系統(tǒng)的變動(dòng),并且系統(tǒng)需要經(jīng)過嚴(yán)格測(cè)試才能上線,一個(gè)很小的功能就要發(fā)布整個(gè)系統(tǒng),直接影響了系統(tǒng)中其他業(yè)務(wù)的穩(wěn)定性與可用性。

此時(shí)開發(fā)效率低下,升級(jí)和維護(hù)系統(tǒng)成本很高,測(cè)試周期越來(lái)越長(zhǎng),代碼的沖突率也會(huì)變得越來(lái)越高。最讓人頭疼的是,一旦有開發(fā)人員離職,新入職的人需要很長(zhǎng)的時(shí)間來(lái)熟悉整個(gè)系統(tǒng)。單體系統(tǒng)架構(gòu)已經(jīng)無(wú)法支撐大流量和高并發(fā)的場(chǎng)景。

面對(duì)單體系統(tǒng)架構(gòu)的種種問題,解決方案是對(duì)復(fù)雜、臃腫的系統(tǒng)進(jìn)行水平拆分,把共用的業(yè)務(wù)封裝成獨(dú)立的服務(wù),供其他業(yè)務(wù)調(diào)用,把各相關(guān)業(yè)務(wù)封裝成子系統(tǒng)并提供接口,供其他系統(tǒng)或外界調(diào)用,以此達(dá)到降低代碼耦合度,提高代碼復(fù)用率的目的。此時(shí),由于各個(gè)子系統(tǒng)之間進(jìn)行了解耦,因此對(duì)每個(gè)子系統(tǒng)內(nèi)部的修改不會(huì)影響其他子系統(tǒng)的穩(wěn)定性。這樣一來(lái)降低了系統(tǒng)的維護(hù)和發(fā)布成本,測(cè)試時(shí)也不需要把整個(gè)系統(tǒng)再重新測(cè)試一遍,提高了測(cè)試效率。在代碼維護(hù)上,各個(gè)子系統(tǒng)的代碼單獨(dú)管理,降低了代碼的沖突率,提高了系統(tǒng)的研發(fā)效率。

2、架構(gòu)目標(biāo)和架構(gòu)原則

好的分布式系統(tǒng)架構(gòu)并不是一蹴而就的,而是隨著企業(yè)和用戶的需求不斷迭代演進(jìn)的,能夠解決分布式系統(tǒng)當(dāng)前最主要的矛盾,同時(shí)對(duì)未來(lái)做出基本的預(yù)測(cè),使得系統(tǒng)架構(gòu)具備高并發(fā)、高可用、高可擴(kuò)展性、高可維護(hù)性等非功能性需求,能夠快速迭代,以適應(yīng)不斷變化的需求。

分布式系統(tǒng)架構(gòu)的設(shè)計(jì)雖然比較復(fù)雜,但是也有一些業(yè)界遵循的原則。其中一些典型的架構(gòu)原則來(lái)自The Art of Scalability一書,作者馬丁L.阿伯特和邁克爾T.費(fèi)舍爾分別是eBay和PayPal的CTO。他們?cè)跁锌偨Y(jié)了15項(xiàng)架構(gòu)原則,分別如下所示。

  • N + 1設(shè)計(jì)。
  • 回滾設(shè)計(jì)。
  • 禁用設(shè)計(jì)。
  • 監(jiān)控設(shè)計(jì)。
  • 設(shè)計(jì)多活數(shù)據(jù)中心。
  • 使用成熟的技術(shù)。
  • 異步設(shè)計(jì)。
  • 無(wú)狀態(tài)系統(tǒng)。
  • 水平擴(kuò)展而非垂直升級(jí)。
  • 設(shè)計(jì)時(shí)至少要有兩步前瞻性。
  • 非核心則購(gòu)買。
  • 使用商品化硬件。
  • 小構(gòu)建、小發(fā)布和快試錯(cuò)。
  • 隔離故障。
  • 自動(dòng)化。

二.分布式系統(tǒng)架構(gòu)演進(jìn)

互聯(lián)網(wǎng)企業(yè)的業(yè)務(wù)飛速發(fā)展,促使系統(tǒng)架構(gòu)不斷變化??傮w來(lái)說(shuō),系統(tǒng)架構(gòu)大致經(jīng)歷了單體應(yīng)用架構(gòu)—垂直應(yīng)用架構(gòu)—分布式架構(gòu)—SOA架構(gòu)—微服務(wù)架構(gòu)的演變,很多互聯(lián)網(wǎng)企業(yè)的系統(tǒng)架構(gòu)已經(jīng)向服務(wù)化網(wǎng)格(Service Mesh)演變。接下來(lái)簡(jiǎn)單介紹一下系統(tǒng)架構(gòu)的發(fā)展歷程。

1、單體應(yīng)用架構(gòu)

在企業(yè)發(fā)展的初期,一般公司的網(wǎng)站流量比較小,只需要一個(gè)應(yīng)用將所有的功能代碼打包成一個(gè)服務(wù)并部署到服務(wù)器上,就能支撐公司的業(yè)務(wù)需求。這種方式能夠減少開發(fā)、部署和維護(hù)的成本。比如大家很熟悉的電商系統(tǒng),里面涉及的業(yè)務(wù)主要有用戶管理、商品管理、訂單管理、支付管理、庫(kù)存管理、物流管理等模塊。企業(yè)發(fā)展初期,我們將所有的模塊寫到一個(gè)Web項(xiàng)目中,再統(tǒng)一部署到一個(gè)Web服務(wù)器中,這就是單體應(yīng)用架構(gòu),系統(tǒng)架構(gòu)如圖1所示。

圖1 單體應(yīng)用系統(tǒng)架構(gòu)

這種架構(gòu)的優(yōu)點(diǎn)如下。

1)架構(gòu)簡(jiǎn)單,項(xiàng)目開發(fā)和維護(hù)成本低。

2)所有項(xiàng)目模塊部署在一起,對(duì)于小型項(xiàng)目來(lái)說(shuō),方便維護(hù)。

但是,其缺點(diǎn)也是比較明顯的。

1)所有模塊耦合在一起,對(duì)于大型項(xiàng)目來(lái)說(shuō),不易開發(fā)和維護(hù)。

2)項(xiàng)目各模塊之間過于耦合,一旦有模塊出現(xiàn)問題,整個(gè)項(xiàng)目將不可用。

3)無(wú)法針對(duì)某個(gè)具體模塊來(lái)提升性能。

4)無(wú)法對(duì)項(xiàng)目進(jìn)行水平擴(kuò)展。

正是由于單體應(yīng)用架構(gòu)存在諸多缺點(diǎn),才逐漸演變?yōu)榇怪睉?yīng)用架構(gòu)。

2、垂直應(yīng)用架構(gòu)

隨著企業(yè)業(yè)務(wù)的不斷發(fā)展,單節(jié)點(diǎn)的單體應(yīng)用無(wú)法滿足業(yè)務(wù)需求。于是,企業(yè)將單體應(yīng)用部署多份,分別放在不同的服務(wù)器上。然而,不是所有的模塊都有比較大的訪問量。如果想針對(duì)項(xiàng)目中的某些模塊進(jìn)行優(yōu)化和性能提升,對(duì)于單體應(yīng)用來(lái)說(shuō),是做不到的。于是,垂直應(yīng)用架構(gòu)誕生了。

垂直應(yīng)用架構(gòu)就是將原來(lái)的項(xiàng)目應(yīng)用拆分為互不相干的幾個(gè)應(yīng)用,以此提升系統(tǒng)的整體性能。

同樣以電商系統(tǒng)為例,在垂直應(yīng)用架構(gòu)下,我們可以將整個(gè)電商項(xiàng)目拆分為電商交易系統(tǒng)、后臺(tái)管理系統(tǒng)、數(shù)據(jù)分析系統(tǒng),系統(tǒng)架構(gòu)如圖2所示。

圖2 垂直應(yīng)用系統(tǒng)架構(gòu)

將單體應(yīng)用架構(gòu)拆分為垂直應(yīng)用架構(gòu)之后,一旦訪問量變大,只需要針對(duì)訪問量大的業(yè)務(wù)增加服務(wù)器節(jié)點(diǎn),無(wú)須針對(duì)整個(gè)項(xiàng)目增加服務(wù)器節(jié)點(diǎn)。

這種架構(gòu)的優(yōu)點(diǎn)如下。

1)對(duì)系統(tǒng)進(jìn)行拆分,可根據(jù)不同系統(tǒng)的訪問情況,有針對(duì)性地進(jìn)行優(yōu)化。

2)能夠?qū)崿F(xiàn)應(yīng)用的水平擴(kuò)展。

3)各系統(tǒng)能夠分擔(dān)整體訪問流量,解決了并發(fā)問題。

4)子系統(tǒng)發(fā)生故障,不影響其他子系統(tǒng)的運(yùn)行情況,提高了整體的容錯(cuò)率。

這種架構(gòu)的缺點(diǎn)如下。

1)拆分后的各系統(tǒng)之間相對(duì)獨(dú)立,無(wú)法進(jìn)行互相調(diào)用。

2)各系統(tǒng)難免存在重疊的業(yè)務(wù),會(huì)存在重復(fù)開發(fā)的業(yè)務(wù),后期維護(hù)比較困難。

3、分布式架構(gòu)

將系統(tǒng)演變?yōu)榇怪睉?yīng)用架構(gòu)之后,當(dāng)垂直應(yīng)用越來(lái)越多時(shí),重復(fù)編寫的業(yè)務(wù)代碼就會(huì)越來(lái)越多。此時(shí),我們需要將重復(fù)的代碼抽象出來(lái),形成統(tǒng)一的服務(wù),供其他系統(tǒng)或者業(yè)務(wù)模塊調(diào)用,這就是分布式架構(gòu)。

在分布式架構(gòu)中,我們會(huì)將系統(tǒng)整體拆分為服務(wù)層和表現(xiàn)層。服務(wù)層封裝了具體的業(yè)務(wù)邏輯供表現(xiàn)層調(diào)用,表現(xiàn)層則負(fù)責(zé)處理與頁(yè)面的交互操作。分布式系統(tǒng)架構(gòu)如圖3所示。

圖3 分布式系統(tǒng)架構(gòu)

這種架構(gòu)的優(yōu)點(diǎn)如下。

1)將重復(fù)的業(yè)務(wù)代碼抽象出來(lái),形成公共的訪問服務(wù),提高了代碼的復(fù)用性。

2)可以有針對(duì)性地對(duì)系統(tǒng)和服務(wù)進(jìn)行性能優(yōu)化,以提升整體的訪問性能。

這種架構(gòu)的缺點(diǎn)如下。

1)系統(tǒng)之間的調(diào)用關(guān)系變得復(fù)雜。

2)系統(tǒng)之間的依賴關(guān)系變得復(fù)雜。

3)系統(tǒng)維護(hù)成本高。

4、SOA架構(gòu)

在分布式架構(gòu)下,當(dāng)部署的服務(wù)越來(lái)越多時(shí),重復(fù)的代碼就會(huì)變得越來(lái)越多,不利于代碼的復(fù)用和系統(tǒng)維護(hù)。為此,我們需要增加一個(gè)統(tǒng)一的調(diào)度中心對(duì)集群進(jìn)行實(shí)時(shí)管理,這就是SOA(面向服務(wù))架構(gòu)。SOA系統(tǒng)架構(gòu)如圖4所示。

圖4 SOA系統(tǒng)架構(gòu)

這種架構(gòu)的優(yōu)點(diǎn)是通過注冊(cè)中心解決了各個(gè)服務(wù)之間服務(wù)依賴和調(diào)用關(guān)系的自動(dòng)注冊(cè)與發(fā)現(xiàn)。

這種架構(gòu)的缺點(diǎn)如下。

1)各服務(wù)之間存在依賴關(guān)系,如果某個(gè)服務(wù)出現(xiàn)故障,可能會(huì)造成服務(wù)器崩潰。

2)服務(wù)之間的依賴與調(diào)用關(guān)系復(fù)雜,增加了測(cè)試和運(yùn)維的成本。

5、微服務(wù)架構(gòu)

微服務(wù)架構(gòu)是在SOA架構(gòu)的基礎(chǔ)上進(jìn)行進(jìn)一步的擴(kuò)展和拆分。在微服務(wù)架構(gòu)下,一個(gè)大的項(xiàng)目拆分為一個(gè)個(gè)小的可獨(dú)立部署的微服務(wù),每個(gè)微服務(wù)都有自己的數(shù)據(jù)庫(kù)。微服務(wù)系統(tǒng)架構(gòu)如圖5所示。

這種架構(gòu)的優(yōu)點(diǎn)如下。

1)服務(wù)徹底拆分,各服務(wù)獨(dú)立打包、獨(dú)立部署和獨(dú)立升級(jí)。

2)每個(gè)微服務(wù)負(fù)責(zé)的業(yè)務(wù)比較清晰,利于后期擴(kuò)展和維護(hù)。

3)微服務(wù)之間可以采用REST和RPC協(xié)議進(jìn)行通信。

圖5 微服務(wù)系統(tǒng)架構(gòu)圖

這種架構(gòu)的缺點(diǎn)如下。

1)開發(fā)成本比較高。

2)涉及各服務(wù)的容錯(cuò)性問題。

3)涉及數(shù)據(jù)的一致性問題。

4)涉及分布式事務(wù)問題。

三.分布式事務(wù)場(chǎng)景

將一個(gè)大的應(yīng)用系統(tǒng)拆分為多個(gè)可以獨(dú)立部署的應(yīng)用服務(wù),需要各個(gè)服務(wù)遠(yuǎn)程協(xié)作才能完成某些事務(wù)操作,這就涉及分布式事務(wù)的問題??偟膩?lái)講,分布式事務(wù)會(huì)在3種場(chǎng)景下產(chǎn)生,分別是跨JVM進(jìn)程、跨數(shù)據(jù)庫(kù)實(shí)例和多服務(wù)訪問單數(shù)據(jù)庫(kù)。

1、跨JVM進(jìn)程

將單體項(xiàng)目拆分為分布式、微服務(wù)項(xiàng)目之后,各個(gè)服務(wù)之間通過遠(yuǎn)程REST或者RPC調(diào)用來(lái)協(xié)同完成業(yè)務(wù)操作。典型的場(chǎng)景是商城系統(tǒng)的訂單微服務(wù)和庫(kù)存微服務(wù),用戶在下單時(shí)會(huì)訪問訂單微服務(wù)。訂單微服務(wù)在生成訂單記錄時(shí),會(huì)調(diào)用庫(kù)存微服務(wù)來(lái)扣減庫(kù)存。各個(gè)微服務(wù)部署在不同的JVM進(jìn)程中,此時(shí)會(huì)產(chǎn)生因跨JVM進(jìn)程而導(dǎo)致的分布式事務(wù)問題。商城系統(tǒng)中跨JVM進(jìn)程產(chǎn)生分布式事務(wù)的場(chǎng)景如圖6所示。

圖6 商城系統(tǒng)中跨JVM進(jìn)程產(chǎn)生分布式事務(wù)場(chǎng)景

2、跨數(shù)據(jù)庫(kù)實(shí)例

單體系統(tǒng)訪問多個(gè)數(shù)據(jù)庫(kù)實(shí)例,也就是跨數(shù)據(jù)源訪問時(shí)會(huì)產(chǎn)生分布式事務(wù)。例如,系統(tǒng)中的訂單數(shù)據(jù)庫(kù)和交易數(shù)據(jù)庫(kù)放在不同的數(shù)據(jù)庫(kù)實(shí)例中,當(dāng)用戶發(fā)起退款時(shí),會(huì)同時(shí)操作用戶的訂單數(shù)據(jù)庫(kù)和交易數(shù)據(jù)庫(kù)(在交易數(shù)據(jù)庫(kù)中執(zhí)行退款操作,在訂單數(shù)據(jù)庫(kù)中將訂單的狀態(tài)變更為已退款)。由于數(shù)據(jù)分布在不同的數(shù)據(jù)庫(kù)實(shí)例中,需要通過不同的數(shù)據(jù)庫(kù)連接會(huì)話來(lái)操作數(shù)據(jù)庫(kù)中的數(shù)據(jù),因此產(chǎn)生了分布式事務(wù)。商城系統(tǒng)中跨數(shù)據(jù)庫(kù)實(shí)例產(chǎn)生分布式事務(wù)場(chǎng)景如圖7所示。

圖7 商城系統(tǒng)中跨數(shù)據(jù)庫(kù)實(shí)例產(chǎn)生分布式事務(wù)場(chǎng)景

3、多服務(wù)訪問單數(shù)據(jù)庫(kù)

多個(gè)微服務(wù)訪問同一個(gè)數(shù)據(jù)庫(kù),例如,訂單微服務(wù)和交易微服務(wù)訪問同一個(gè)數(shù)據(jù)庫(kù)就會(huì)產(chǎn)生分布式事務(wù),原因是多個(gè)微服務(wù)訪問同一個(gè)數(shù)據(jù)庫(kù),本質(zhì)上也是通過不同的數(shù)據(jù)庫(kù)會(huì)話來(lái)操作數(shù)據(jù)庫(kù),此時(shí)就會(huì)產(chǎn)生分布式事務(wù)。商城系統(tǒng)中多服務(wù)訪問單數(shù)據(jù)庫(kù)產(chǎn)生分布式事務(wù)的場(chǎng)景如圖8所示。

圖8 商城系統(tǒng)中多服務(wù)訪問單數(shù)據(jù)庫(kù)產(chǎn)生分布式事務(wù)的場(chǎng)景

跨數(shù)據(jù)庫(kù)實(shí)例場(chǎng)景和多服務(wù)訪問單數(shù)據(jù)庫(kù)場(chǎng)景,在本質(zhì)上都會(huì)產(chǎn)生不同的數(shù)據(jù)庫(kù)會(huì)話來(lái)操作數(shù)據(jù)庫(kù)中的數(shù)據(jù),進(jìn)而產(chǎn)生分布式事務(wù)。這兩種場(chǎng)景是比較容易被忽略的。

本書摘編自《深入理解分布式事務(wù):原理與實(shí)踐》,經(jīng)出版方授權(quán)發(fā)布。


本文標(biāo)題:終于有人把分布式系統(tǒng)架構(gòu)講明白了
當(dāng)前鏈接:http://www.dlmjj.cn/article/coiessd.html