分布式應(yīng)用是現(xiàn)代軟件開(kāi)發(fā)行業(yè)不可或缺的一部分。它們是云存儲(chǔ)服務(wù)的支柱,使網(wǎng)絡(luò)應(yīng)用程序能夠高度響應(yīng)。當(dāng)程序員開(kāi)發(fā)這些系統(tǒng)時(shí),他們需要一些基本的構(gòu)件,作為使用通用詞匯進(jìn)行交流的起點(diǎn)。這就是分布式系統(tǒng)設(shè)計(jì)模式的價(jià)值所在。今天,我們將介紹 5 種最重要的分布式系統(tǒng)設(shè)計(jì)模式,讓你了解它們的優(yōu)缺點(diǎn)以及何時(shí)使用。

一、什么是分布式系統(tǒng)設(shè)計(jì)模式?
設(shè)計(jì)模式是構(gòu)建系統(tǒng)的行之有效的方法,每種模式都適用于特定的用例。它們不是實(shí)現(xiàn),而是構(gòu)建系統(tǒng)的抽象方法。大多數(shù)設(shè)計(jì)模式都是多年來(lái)由許多不同的開(kāi)發(fā)人員開(kāi)發(fā)和更新的,因此它們通常是非常有效的起點(diǎn)。
設(shè)計(jì)模式是構(gòu)建模塊,程序員可以利用現(xiàn)有的知識(shí),而不是為每個(gè)系統(tǒng)從頭開(kāi)始。它們還能創(chuàng)建一套標(biāo)準(zhǔn)的系統(tǒng)設(shè)計(jì)模式,幫助其他開(kāi)發(fā)人員了解自己的項(xiàng)目如何與特定系統(tǒng)協(xié)同工作。
創(chuàng)造性設(shè)計(jì)模式為創(chuàng)建新對(duì)象提供了基礎(chǔ)。結(jié)構(gòu)模式定義了解決方案的整體結(jié)構(gòu)。行為模式描述對(duì)象及其相互通信的方式。
分布式系統(tǒng)設(shè)計(jì)模式是用于開(kāi)發(fā)分布式系統(tǒng)的設(shè)計(jì)模式,分布式系統(tǒng)本質(zhì)上是計(jì)算機(jī)和數(shù)據(jù)中心的集合,對(duì)終端用戶(hù)而言,它們就像一臺(tái)計(jì)算機(jī)。這些分布式設(shè)計(jì)模式概述了軟件架構(gòu),以確定不同節(jié)點(diǎn)如何相互通信、哪些節(jié)點(diǎn)負(fù)責(zé)哪些任務(wù)以及不同任務(wù)的流程。
這些模式通常用于大規(guī)模分布式云計(jì)算系統(tǒng)和可擴(kuò)展微服務(wù)軟件系統(tǒng)的架構(gòu)設(shè)計(jì)。
二、分布式設(shè)計(jì)模式的類(lèi)型
大多數(shù)分布式設(shè)計(jì)模式根據(jù)其功能可分為以下三類(lèi)。
1.對(duì)象通信:描述系統(tǒng)不同組件間通信的消息傳遞協(xié)議和權(quán)限。
2.安全性:解決保密性、完整性和可用性方面的問(wèn)題,確保系統(tǒng)免受未經(jīng)授權(quán)的訪問(wèn)。
3.事件驅(qū)動(dòng): 描述系統(tǒng)事件的生成、檢測(cè)、使用和響應(yīng)的模式。
三、前5種分布式系統(tǒng)設(shè)計(jì)模式
1. 命令和信息請(qǐng)求責(zé)任分離(CQRS)
CQRS 模型側(cè)重于分離分布式系統(tǒng)的讀寫(xiě)操作,以提高可擴(kuò)展性和安全性。這種模式使用命令將數(shù)據(jù)寫(xiě)入持久內(nèi)存,使用查詢(xún)查找和檢索數(shù)據(jù)。后者由接收用戶(hù)請(qǐng)求的指揮中心管理。然后,指揮中心檢索數(shù)據(jù)并進(jìn)行必要的修改,保存數(shù)據(jù)并通知讀取服務(wù)。然后,閱讀服務(wù)會(huì)更新閱讀模型,向用戶(hù)顯示所做的更改。
a.優(yōu)點(diǎn)
通過(guò)委托任務(wù)降低系統(tǒng)復(fù)雜性。
明確區(qū)分業(yè)務(wù)邏輯和驗(yàn)證。
有助于根據(jù)任務(wù)對(duì)流程進(jìn)行分類(lèi)。
減少對(duì)共享數(shù)據(jù)的意外更改。
減少可訪問(wèn)修改數(shù)據(jù)的實(shí)體數(shù)量。
b.缺點(diǎn)
需要在控制模型和讀取模型之間持續(xù)通信。
發(fā)送高吞吐量請(qǐng)求時(shí)可能會(huì)增加延遲。
服務(wù)進(jìn)程之間沒(méi)有通信手段。
c.使用案例
CQRS 非常適合數(shù)據(jù)密集型應(yīng)用,如 SQL 或 NoSQL 數(shù)據(jù)庫(kù)管理系統(tǒng)。它還適用于數(shù)據(jù)密集型微服務(wù)架構(gòu)。它非常適合管理具有持久狀態(tài)的應(yīng)用程序,因?yàn)閷?xiě)入器/讀取器分離有助于管理持久狀態(tài)。
2.兩階段承諾(2PC)
2PC 與 CQRS 類(lèi)似,都采用事務(wù)處理方式,并依賴(lài)于中央命令,但會(huì)根據(jù)分區(qū)的類(lèi)型和完成階段來(lái)處理分區(qū)。兩個(gè)階段是準(zhǔn)備階段和承諾階段,前者是中央命令指示服務(wù)準(zhǔn)備數(shù)據(jù),后者是服務(wù)發(fā)送準(zhǔn)備好的數(shù)據(jù)的信號(hào)。
2PC 系統(tǒng)中的所有服務(wù)默認(rèn)都處于封鎖狀態(tài),這意味著它們不能發(fā)送數(shù)據(jù)。當(dāng)服務(wù)被鎖定時(shí),它們會(huì)完成準(zhǔn)備階段,以便在解鎖時(shí)發(fā)送數(shù)據(jù)。協(xié)調(diào)器依次解鎖服務(wù)并請(qǐng)求它們發(fā)送數(shù)據(jù)。如果某個(gè)服務(wù)尚未準(zhǔn)備好發(fā)送數(shù)據(jù),協(xié)調(diào)器就會(huì)切換到另一個(gè)服務(wù)。當(dāng)所有準(zhǔn)備就緒的數(shù)據(jù)都已發(fā)送完畢時(shí),所有服務(wù)都會(huì)解除阻塞,等待協(xié)調(diào)者的新任務(wù)。
2PC 從根本上確保了一次只能執(zhí)行一個(gè)服務(wù),使流程比 CQRS 更靈活、更一致。
a.優(yōu)點(diǎn)
由于不存在相互競(jìng)爭(zhēng)的請(qǐng)求,因此運(yùn)行穩(wěn)定可靠。
可擴(kuò)展性強(qiáng),可像處理單機(jī)數(shù)據(jù)一樣輕松處理大型數(shù)據(jù)集。
允許同時(shí)隔離和共享數(shù)據(jù)。
b.缺點(diǎn)
不容錯(cuò),由于同步操作,容易出現(xiàn)死鎖和崩潰。
與其他設(shè)計(jì)模式相比,需要更多資源。
c.使用案例
2PC 是處理高風(fēng)險(xiǎn)交易的分布式系統(tǒng)的理想選擇,在這種系統(tǒng)中,準(zhǔn)確性比資源效率更重要。即使在大規(guī)模系統(tǒng)中,它也很可靠,出錯(cuò)時(shí)也很容易追蹤。
3 Saga
Saga 是一種異步模型,它不使用中央控制器,而是完全在服務(wù)之間進(jìn)行通信。它解決了上述同步模型的一些缺點(diǎn)。
Saga 使用事件總線(xiàn),允許服務(wù)在微服務(wù)系統(tǒng)中相互通信。總線(xiàn)在服務(wù)之間發(fā)送和接收請(qǐng)求,每個(gè)參與服務(wù)都會(huì)創(chuàng)建一個(gè)本地事務(wù)。然后,參與的服務(wù)發(fā)布一個(gè)事件,其他服務(wù)可以接收到該事件。所有事件都會(huì)被其他服務(wù)監(jiān)聽(tīng)。收到事件的服務(wù)首先執(zhí)行請(qǐng)求的操作。如果該服務(wù)沒(méi)有執(zhí)行該操作,則會(huì)將其發(fā)送給其他服務(wù)。
這種結(jié)構(gòu)類(lèi)似于 2PC 結(jié)構(gòu),因?yàn)槿绻渲幸粋€(gè)服務(wù)無(wú)法執(zhí)行任務(wù),就會(huì)輪流執(zhí)行。不過(guò),Saga 去掉了中央控制元素,以更好地管理流程并減少所需的反饋信息數(shù)量。
a.優(yōu)勢(shì)
單個(gè)服務(wù)可處理更長(zhǎng)時(shí)間的交易。
去中心化使其成為分布式系統(tǒng)的理想選擇。
減少服務(wù)間通信造成的瓶頸。
b.缺點(diǎn)
異步自治使得難以跟蹤執(zhí)行單個(gè)任務(wù)的服務(wù)。
復(fù)雜的協(xié)調(diào)導(dǎo)致故障排除困難。
與以前的模式相比,服務(wù)的隔離度較低。
c.使用案例
Saga 的分散式方法非常適合同時(shí)處理多個(gè)并行請(qǐng)求的可擴(kuò)展無(wú)服務(wù)器功能。AWS 將基于 Saga 的模型用于許多功能,如 step 和 lambda 功能。
4.重復(fù)負(fù)載平衡服務(wù)(RLBS)
RLBS 模式是最簡(jiǎn)單也是使用最廣泛的規(guī)劃模式。在最基本的層面上,它由多個(gè)相同的服務(wù)組成,所有服務(wù)都向中央負(fù)載平衡器報(bào)告。每個(gè)服務(wù)都能執(zhí)行任務(wù),并能在出現(xiàn)故障時(shí)進(jìn)行故障切換。負(fù)載平衡器接收來(lái)自終端用戶(hù)的請(qǐng)求,并使用循環(huán)分配或有時(shí)更復(fù)雜的路由算法在各服務(wù)之間分配請(qǐng)求。
雙服務(wù)可確保應(yīng)用程序保持用戶(hù)請(qǐng)求的高可用性,并能在服務(wù)實(shí)例出現(xiàn)故障時(shí)重新分配工作。
RLBS 通常與 Azure Kubernetes 結(jié)合使用,后者是微軟開(kāi)發(fā)的開(kāi)源容器編排技術(shù),可根據(jù)工作流自動(dòng)擴(kuò)展服務(wù)。
a.優(yōu)勢(shì)
從終端用戶(hù)的角度來(lái)看,性能穩(wěn)定。
從損壞的服務(wù)中快速恢復(fù)。
服務(wù)越多,可擴(kuò)展性越高。
并行運(yùn)行良好。
b.缺點(diǎn)
負(fù)載平衡算法下的性能不一致。
需要大量資源來(lái)管理服務(wù)。
c.使用方法
RLBS 適用于全天工作負(fù)載不穩(wěn)定但需要保持低延遲的前端系統(tǒng),如 Netflix 或 Amazon Prime 等在線(xiàn)娛樂(lè)應(yīng)用。
5.分片服務(wù)
除基于復(fù)制的項(xiàng)目外,另一種方法是創(chuàng)建精選服務(wù),每個(gè)服務(wù)只處理一種特定類(lèi)型的請(qǐng)求。這就是所謂的 "分片",因?yàn)槟銓⒄?qǐng)求流量分成了許多不同的部分。例如,你可以讓一個(gè)分片服務(wù)接受所有緩存請(qǐng)求,而另一個(gè)分片服務(wù)只處理高優(yōu)先級(jí)請(qǐng)求。負(fù)載平衡器會(huì)評(píng)估收到的每個(gè)請(qǐng)求,并將其分配給相應(yīng)的分區(qū)來(lái)處理。
分片服務(wù)通常用于創(chuàng)建狀態(tài)服務(wù),因?yàn)閷?duì)于非個(gè)人容器來(lái)說(shuō),狀態(tài)規(guī)模往往太大。分片可確保單個(gè)分區(qū)根據(jù)狀態(tài)大小進(jìn)行擴(kuò)展。
此外,分片服務(wù)還能更快地處理高優(yōu)先級(jí)請(qǐng)求。專(zhuān)用于高優(yōu)先級(jí)請(qǐng)求的分區(qū)可在請(qǐng)求到達(dá)時(shí)立即處理,而無(wú)需排隊(duì)。
a.分片服務(wù)的優(yōu)點(diǎn)
可以交錯(cuò)處理日常請(qǐng)求。
便于對(duì)申請(qǐng)進(jìn)行優(yōu)先排序。
自然排序,易于組合。
b.缺點(diǎn)
維護(hù)大量分段可能需要很多資源。
如果分段使用過(guò)多,可能會(huì)導(dǎo)致生產(chǎn)力下降。
c.使用方法
當(dāng)系統(tǒng)收到的查詢(xún)類(lèi)型不平衡,但某些查詢(xún)具有優(yōu)先權(quán)時(shí),最適合使用分區(qū)服務(wù)。
海馬課堂專(zhuān)業(yè)課程預(yù)習(xí),輔導(dǎo)不滿(mǎn)意隨心退,3500+嚴(yán)選碩博學(xué)霸師資,針對(duì)學(xué)生的薄弱科目和學(xué)校教學(xué)進(jìn)度,匹配背景相符的導(dǎo)師,根據(jù)學(xué)生情況進(jìn)行1V1專(zhuān)屬備課,上課時(shí)間靈活安排,中英雙語(yǔ)詳細(xì)講解課程中的考點(diǎn)、難點(diǎn)問(wèn)題,并提供多方位的課前預(yù)習(xí),輔助學(xué)生掌握全部課程知識(shí),補(bǔ)足短板。
相關(guān)熱詞搜索: