自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文告訴你怎樣構(gòu)建健壯的分布式系統(tǒng)

系統(tǒng) 新聞
讓我們討論一下如何使分布式系統(tǒng)對(duì)隨機(jī)故障具有彈性,隨著系統(tǒng)變大,這種隨機(jī)故障會(huì)變得越來(lái)越普遍。

我之前在這個(gè)博客上寫(xiě)過(guò)什么是分布式系統(tǒng),以及它們?nèi)绾我圆坏貌惶幚砀鼜?fù)雜的系統(tǒng)設(shè)計(jì)為代價(jià)為我們提供巨大的可擴(kuò)展性。讓我們討論一下如何使分布式系統(tǒng)對(duì)隨機(jī)故障具有彈性,隨著系統(tǒng)變大,這種隨機(jī)故障會(huì)變得越來(lái)越普遍。

系統(tǒng)理論告訴我們,系統(tǒng)中相互關(guān)聯(lián)的部分越多,發(fā)生大故障的可能性就越大。因此,要構(gòu)建一個(gè)彈性系統(tǒng),我們需要減少連接數(shù)量。如果無(wú)法做到這一點(diǎn),我們需要實(shí)施“臨時(shí)”切斷與故障部分的連接的方法,以便錯(cuò)誤不會(huì)級(jí)聯(lián)到其他部分。

每個(gè)組件都必須假設(shè)每個(gè)其他組件都會(huì)在某個(gè)時(shí)候發(fā)生故障,并決定當(dāng)這些故障發(fā)生時(shí)它會(huì)做什么。

最后,我們需要在系統(tǒng)中建立一些緩沖區(qū)——一些放松的方法,如果不消除對(duì)它的要求,以便有松弛來(lái)處理意外情況。

1 最小化組件間依賴

分布式系統(tǒng)的組件相互通信以獲取數(shù)據(jù)或功能。在這兩種情況下,我們都可以通過(guò)將數(shù)據(jù)/功能推送到調(diào)用組件而不是遠(yuǎn)程訪問(wèn)來(lái)減少連接需求。

構(gòu)建大規(guī)模分布式系統(tǒng)迫使我們放棄標(biāo)準(zhǔn)軟件工程的許多“最佳實(shí)踐”。要記住的關(guān)鍵是,當(dāng)我們采用分布式系統(tǒng)的復(fù)雜性來(lái)實(shí)現(xiàn)可擴(kuò)展性時(shí),我們還需要盡可能地控制“分布”。

1.1 重復(fù)數(shù)據(jù)

如果我們經(jīng)常從另一個(gè)組件訪問(wèn)一些數(shù)據(jù),我們可以在我們的組件中復(fù)制它,而不必在運(yùn)行時(shí)檢索它。這可以大大減少運(yùn)行時(shí)依賴并幫助改善我們組件的延遲。

經(jīng)常訪問(wèn)但有一定規(guī)律性變化的數(shù)據(jù)可以通過(guò)定期緩存刷新來(lái)臨時(shí)緩存。更改頻率更低或從不更改的數(shù)據(jù)(例如客戶姓名)可以直接存儲(chǔ)在我們的組件中。如果/當(dāng)這些數(shù)據(jù)發(fā)生變化時(shí),我們可能需要做一些額外的工作,但是這種增加的小開(kāi)銷通常是值得的,因?yàn)樗梢蕴岣邚椥浴?/p>

1.2 非規(guī)范化數(shù)據(jù)

非規(guī)范化是在組件內(nèi)發(fā)生的一種特殊形式的重復(fù)。如果我們使用關(guān)系數(shù)據(jù)存儲(chǔ),我們可以通過(guò)在主實(shí)體中復(fù)制數(shù)據(jù)來(lái)降低查看多個(gè)實(shí)體的成本。本地化分散數(shù)據(jù)以獲得更好性能的原則也適用于此。

1.3 庫(kù)

為了減輕另一個(gè)組件的功能依賴性,我們可以將遠(yuǎn)程組件打包為庫(kù)并將其嵌入到我們的組件中。這并不總是可能的(它可能是用其他語(yǔ)言編寫(xiě)的,或者太大而不能成為一個(gè)庫(kù))并且會(huì)帶來(lái)一系列問(wèn)題(功能的變化需要跨多個(gè)組件進(jìn)行庫(kù)升級(jí)),但是如果功能很關(guān)鍵并且經(jīng)常被大規(guī)模訪問(wèn),這是打破組件間連接并使其成為本地的可行方法。

2 隔離錯(cuò)誤

錯(cuò)誤隔離很重要,原因有兩個(gè)。一是個(gè)別錯(cuò)誤在分布式系統(tǒng)中更常見(jiàn)(許多移動(dòng)部件的簡(jiǎn)單功能)。另一個(gè)是,如果我們不能防止整個(gè)系統(tǒng)中的聯(lián)鎖錯(cuò)誤,那么我們首先就失去了構(gòu)建復(fù)雜體的理由。

錯(cuò)誤隔離的主要結(jié)構(gòu)是 SLA。每個(gè)組件都聲明了一些質(zhì)量參數(shù),它將在執(zhí)行功能時(shí)得到尊重。這些參數(shù)可以包括延遲、錯(cuò)誤率、并發(fā)性等。

在此 SLA 之外,調(diào)用它的組件會(huì)假定它已失敗并需要自行采取適當(dāng)?shù)拇胧?。如果組件本身檢測(cè)到它無(wú)法維護(hù)其 SLA,它可以先發(fā)制人地告訴其調(diào)用者暫停并稍后再來(lái)調(diào)用。

為了保持整體系統(tǒng)健康,最好是快速失敗而不是在違反 SLA 的情況下成功。兩個(gè)組件(一個(gè)被喚起的和一個(gè)喚起的)都必須為此設(shè)置機(jī)制。

2.1 保護(hù)調(diào)用者

超時(shí):如果被調(diào)用的組件在其 SLA 內(nèi)沒(méi)有響應(yīng),調(diào)用者必須超時(shí)(放棄)并改用一些回退機(jī)制(即使它拋出錯(cuò)誤)來(lái)維護(hù)自己的 SLA 并防止一連串的 SLA 違規(guī)。

重試:由于網(wǎng)絡(luò)不可靠,分布式系統(tǒng)中的許多錯(cuò)誤只是隨機(jī)的。如果調(diào)用者自己的 SLA 允許,調(diào)用者可以重試該操作。重試的前提是操作的冪等性。即它不應(yīng)該改變狀態(tài)或只做一次,即使它被調(diào)用了兩次。

斷路器:如果對(duì)組件的調(diào)用連續(xù)失敗,調(diào)用者可以通過(guò)“打開(kāi)電路”切斷連接并停止調(diào)用一段時(shí)間。由于調(diào)用者已經(jīng)有一些錯(cuò)誤場(chǎng)景的備份行為,這節(jié)省了調(diào)用者寶貴的資源,這些資源本來(lái)會(huì)被浪費(fèi)掉。停止調(diào)用還可以減少被調(diào)用組件的負(fù)載,并給它一些恢復(fù)的喘息空間。

斷路器庫(kù)具有定期輪詢有問(wèn)題的組件并在其性能似乎已恢復(fù)正常時(shí)重新啟動(dòng)調(diào)用流程的機(jī)制。

2.2 保護(hù)被調(diào)用

隨機(jī)間隔:雖然重試可以減少錯(cuò)誤,但在一個(gè)頻繁使用的組件中出現(xiàn)一個(gè)小的性能問(wèn)題可能會(huì)導(dǎo)致其所有調(diào)用者一次重試。這種“重試風(fēng)暴”會(huì)造成負(fù)載峰值并阻止該組件恢復(fù)。為了防止這種情況,重試應(yīng)該在它們之間有一個(gè)隨機(jī)的時(shí)間間隔,以便交錯(cuò)加載。

背壓:如果一個(gè)組件檢測(cè)到自己承受過(guò)多的負(fù)載并且即將違反其 SLA,它可以搶先開(kāi)始丟棄新請(qǐng)求,直到其性能得到控制。這比接受它知道它不能在 SLA 內(nèi)提供服務(wù)或沒(méi)有完全崩潰風(fēng)險(xiǎn)的請(qǐng)求要好得多。

3 在系統(tǒng)中建立緩沖區(qū)

3.1 異步通信

消息總線之類的異步通信通道允許調(diào)用遠(yuǎn)程組件,而無(wú)需非常嚴(yán)格的 SLA 依賴。通過(guò)讓被調(diào)用組件準(zhǔn)備好而不是立即使用消息,系統(tǒng)對(duì)增加的工作負(fù)載的需求變得更加靈活。

3.2 彈性配置

可擴(kuò)展性最終歸結(jié)為充分利用可用硬件。但是,如果看到規(guī)模增長(zhǎng),讓系統(tǒng)緩口氣的一個(gè)簡(jiǎn)單方法是分配更多硬件。雖然這僅在我們能夠承受的成本范圍內(nèi)是可行的,但它為我們提供了抵御不可預(yù)測(cè)的負(fù)載變化的最后一道防線。

責(zé)任編輯:張燕妮 來(lái)源: 中生代技術(shù)
相關(guān)推薦

2016-10-25 14:35:05

分布式系統(tǒng) 存儲(chǔ)

2019-03-19 15:28:30

Linux 系統(tǒng) 數(shù)據(jù)

2019-03-14 15:59:44

前端開(kāi)發(fā)編程

2024-01-30 09:58:00

IP屬地在線服務(wù)

2024-03-25 08:18:31

2023-02-07 07:32:12

Istio微服務(wù)治理

2024-10-28 00:00:03

IP屬地地址

2022-08-26 12:46:04

NQA網(wǎng)絡(luò)質(zhì)量分析

2017-10-20 13:39:29

分布式系統(tǒng)數(shù)據(jù)存儲(chǔ)數(shù)據(jù)量

2022-01-18 08:04:37

數(shù)據(jù)分析 Python

2021-01-22 08:13:58

Java日期時(shí)間API

2022-08-16 10:35:00

分布式高可用方案

2018-04-26 04:20:42

數(shù)據(jù)科學(xué)簡(jiǎn)歷編程

2021-04-09 13:23:27

比特幣貨幣數(shù)據(jù)

2022-05-06 08:09:28

代碼提交開(kāi)發(fā)

2021-04-25 21:18:27

技術(shù)開(kāi)發(fā)爬蟲(chóng)

2016-09-01 13:48:18

2022-12-21 08:40:05

限流器分布式限流

2023-09-20 22:56:45

分布式追蹤應(yīng)用程序

2018-03-01 18:15:10

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)