成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何構(gòu)建高可用的分布式系統(tǒng)?

譯文 精選
開發(fā)
高可用性的內(nèi)涵有哪些?如何實(shí)現(xiàn)?


作者 | Kislay Verma

譯者 | 崔皓  

審校 | 云昭

開篇 

本文討論分布式系統(tǒng)如何對隨機(jī)故障進(jìn)行彈性處理,這個(gè)問題非常重要,因?yàn)殡S著系統(tǒng)規(guī)模的增大,隨機(jī)故障會變得越來越普遍。

系統(tǒng)理論告訴我們,系統(tǒng)中相互關(guān)聯(lián)的部分越多,發(fā)生故障的可能性就越大。因此,要構(gòu)建一個(gè)彈性系統(tǒng),我們需要減少這種相互關(guān)聯(lián)。否則就需要通過 “臨時(shí)”切斷與故障點(diǎn)的連接來避免問題的發(fā)生,從而保證不會因?yàn)樵摴收宵c(diǎn)而殃及其他節(jié)點(diǎn)的正常運(yùn)行。也就是我們通常所說的,針對分布式系統(tǒng)進(jìn)行降級和熔斷。

圖 組件之間的關(guān)系

一般而言我們會基于如下假設(shè):在分布式系統(tǒng)中的任意組件在任何時(shí)刻都有可能發(fā)生故障,并且需要定義出現(xiàn)故障的時(shí)候?qū)?yīng)的處理方式。

最后,我們需要在系統(tǒng)中創(chuàng)建緩沖區(qū)——提供一些寬松的手段,也就是在不能完全消除對故障組件的依賴時(shí),采取更加柔和方式處理意外情況。

PART 02

最小化組件間的依賴

分布式系統(tǒng)的組件通過相互通信的方式獲取數(shù)據(jù)和調(diào)用功能。基于這兩種情況,都可以通過將數(shù)據(jù)/功能推送到調(diào)用組件而不是通過遠(yuǎn)程訪問來獲得,從而降低組件之間的連接需求。

構(gòu)建大規(guī)模分布式系統(tǒng)迫使我們放棄標(biāo)準(zhǔn)軟件工程的許多“最佳實(shí)踐”。關(guān)鍵是,當(dāng)采用分布式系統(tǒng)的復(fù)雜性來換取系統(tǒng)的可擴(kuò)展性時(shí),需要盡可能地控制組件的“分布”。以下幾個(gè)要點(diǎn)是需要關(guān)注的:

1、副本數(shù)據(jù)

如果經(jīng)常從一個(gè)組件訪問某些數(shù)據(jù),就可以復(fù)制該組件,而不必在運(yùn)行時(shí)檢索它。這種方式可以大大減少運(yùn)行對該組件的依賴,并降低訪問組件的延遲。

對于經(jīng)常訪問且有規(guī)律性變化的數(shù)據(jù)而言,可以通過臨時(shí)緩存并配合定期緩存刷新的方式來獲取他們。更改頻率更低或從不更改的數(shù)據(jù)(例如客戶姓名)可以直接存儲在組件中。不過當(dāng)這些數(shù)據(jù)發(fā)生變化時(shí),就需要做一些額外的工作對其進(jìn)行更新,不過這種小開銷對于整個(gè)系統(tǒng)而言是值得的,因?yàn)樘嵘讼到y(tǒng)的彈性。

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

非規(guī)范化數(shù)據(jù)以一種特殊形式的副本存在于組件中。如果使用關(guān)系數(shù)據(jù)存儲數(shù)據(jù),可以通過在主實(shí)體中復(fù)制數(shù)據(jù)的方式來降低查看多個(gè)實(shí)體的成本。對于本地化分散數(shù)據(jù)從而獲得更好性能,也適用于此種方式。

3、組件庫

為了減輕組件的功能依賴性,可以將遠(yuǎn)程組件打包成組件庫,并將其嵌入到的需要調(diào)用該庫的組件中。這種方式并不是總是可行(存在跨語言調(diào)用,或者因?yàn)榻M件太大而不能打包成庫),因此會帶來一系列問題(例如:某個(gè)功能以來多個(gè)組件庫,一旦功能發(fā)生變化就需要對多個(gè)組件庫進(jìn)行升級)。話說回來,如果功能很關(guān)鍵且被經(jīng)常訪問,組件庫的方式就可以減少組件之間的鏈接,讓被依賴的組件庫成為調(diào)用組件的本地方法。

隔離錯(cuò)誤  

錯(cuò)誤隔離的功能非常重要,原因有二。其一,是個(gè)別錯(cuò)誤在分布式系統(tǒng)中非常突出。(許多移動部件的簡單功能)。其二,是如果不能防止錯(cuò)誤通過級聯(lián)的方式影響整個(gè)系統(tǒng),那么就無法構(gòu)建復(fù)雜系統(tǒng)架構(gòu)。

錯(cuò)誤隔離的由 SLA(Service Level Agreement 服務(wù)保障協(xié)議)構(gòu)成。它針對每個(gè)組件聲明了質(zhì)量參數(shù),在組件執(zhí)行過程時(shí)會參照這些參數(shù)。質(zhì)量參數(shù)包括:延遲、錯(cuò)誤率、并發(fā)性等。

當(dāng)一個(gè)組件調(diào)用進(jìn)行SLA設(shè)置的組件時(shí),調(diào)用方會根據(jù)被調(diào)用方的SLA參數(shù)進(jìn)行設(shè)置,其目的是在調(diào)用失敗的時(shí)候可以采取對應(yīng)的處理措施。例如,調(diào)用方發(fā)現(xiàn)被調(diào)用方的錯(cuò)誤率到達(dá)了70%,就會延遲5s再調(diào)用該組件。

如果被調(diào)用方的組件檢測到無法維護(hù)自身的SLA,它可以先發(fā)制人地告訴其調(diào)用者后退并稍后再回來。即,一旦被調(diào)用方自己感覺不太好了,就告訴調(diào)用方你等下再來訪問。

同時(shí)為了保持整體系統(tǒng)的健康,最好使用快速失敗的方式告知調(diào)用方,而不是在違反 SLA 的情況下讓調(diào)用方成功調(diào)用。需要注意的是,調(diào)用方和被調(diào)用方都必須進(jìn)行該設(shè)置。

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

超時(shí):如果被調(diào)用的組件在其 SLA 設(shè)置范圍內(nèi)沒有響應(yīng),調(diào)用者必須設(shè)置對應(yīng)的超時(shí)機(jī)制,或放棄又或者采用回退機(jī)制(即使拋出錯(cuò)誤),從而維護(hù)自己的 SLA 并防止一連串的 SLA 違規(guī)現(xiàn)象的發(fā)生。

重試:網(wǎng)絡(luò)不可靠性會引發(fā)分布式系統(tǒng)中的隨機(jī)錯(cuò)誤。假設(shè)在調(diào)用者自身的 SLA設(shè)置允許的情況下,可以進(jìn)行重試操作。重試操作的前提是被調(diào)用者需要支持操作的冪等性。即不論進(jìn)行多少次操作對數(shù)據(jù)狀態(tài)的改變也只算做一次。

斷路器:如果調(diào)用連續(xù)失敗,調(diào)用者可以通過“打開電路”的方式切斷連接并停止調(diào)用一段時(shí)間。由于調(diào)用者針對錯(cuò)誤場景有備份方案,從而可以節(jié)省調(diào)用者寶貴的資源,否者這些資源就會被浪費(fèi)掉。停止調(diào)用還可以減少被調(diào)用組件的負(fù)載,給其留有喘息的余地。

“斷路器庫”會對有問題的組件進(jìn)行定期輪詢,并在其可能恢復(fù)性能時(shí)重新啟動調(diào)用機(jī)制。

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

隨機(jī)補(bǔ)償:雖然重試可以減少調(diào)用錯(cuò)誤發(fā)生的概率,但對于被頻繁調(diào)用的組件而言,出現(xiàn)小小的性能問題都會導(dǎo)致調(diào)用者進(jìn)行重試操作。在調(diào)用者足夠多的情況下,就會形成 “重試風(fēng)暴”,其結(jié)果會造成負(fù)載峰值并不利于被調(diào)用者的恢復(fù)。為了防止這種情況的發(fā)生,應(yīng)該設(shè)置隨機(jī)的重試時(shí)間間隔,使重試負(fù)載交錯(cuò)進(jìn)行。

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

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

1、異步通信

可以通過消息總線之類的異步通信方式,調(diào)用遠(yuǎn)程組件而無需非常嚴(yán)格的 SLA 參數(shù)規(guī)則。消息總線種存放要訪問被調(diào)用方的請求,被調(diào)用組件準(zhǔn)備好之后再處理這些請求,而不是立即處理請求,這樣系統(tǒng)就可以更加靈活地處理負(fù)載了。

2、彈性供應(yīng)

可擴(kuò)展性也可以通過利用硬件擴(kuò)展的方式實(shí)現(xiàn)。如果系統(tǒng)規(guī)模不斷增長,就需要分配更多硬件資源滿足系統(tǒng)的需求。雖然這種擴(kuò)展方式需要考慮成本,并在我們能夠承受的范圍里實(shí)現(xiàn),但它也為抵御不可預(yù)測負(fù)載提供了最后一道防線。

原文鏈接:

??https://kislayverma.com/software-architecture/building-robust-distributed-systems/ ??

譯者介紹

崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗(yàn),10年分布式架構(gòu)經(jīng)驗(yàn)。曾任惠普技術(shù)專家。樂于分享,撰寫了很多熱門技術(shù)文章,閱讀量超過60萬。《分布式架構(gòu)原理與實(shí)踐》作者。

責(zé)任編輯:薛彥澤 來源: 51CTO
相關(guān)推薦

2023-08-28 10:40:12

Java分布式

2025-04-01 01:04:00

Redis集群緩存

2022-01-10 19:45:40

微服務(wù)GO系統(tǒng)

2023-08-25 16:26:49

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

2023-01-06 16:42:28

2019-10-16 10:34:33

數(shù)據(jù)庫大數(shù)據(jù)腳本語言

2018-07-11 09:34:55

分布式架構(gòu)高可用

2023-05-12 08:23:03

分布式系統(tǒng)網(wǎng)絡(luò)

2017-12-12 14:51:15

分布式緩存設(shè)計(jì)

2022-05-05 12:03:08

分布式系統(tǒng)設(shè)計(jì)

2020-11-26 09:38:19

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

2021-09-23 12:14:50

Redis分布式優(yōu)化

2023-02-11 00:04:17

分布式系統(tǒng)安全

2023-05-29 14:07:00

Zuul網(wǎng)關(guān)系統(tǒng)

2018-07-02 08:25:14

2024-07-03 11:59:40

2019-12-04 14:59:01

分布式緩存高可用

2018-06-11 11:12:09

秒殺限流分布式

2018-06-19 09:35:51

分布式系統(tǒng)限流

2015-05-28 09:13:34

Spring Clou云應(yīng)用開發(fā)自我修復(fù)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久精品久久久久久 | 亚洲一区免费在线 | 中文字幕电影在线观看 | 午夜在线观看视频 | 精品国产乱码久久久久久果冻传媒 | 国产91久久精品一区二区 | 亚洲一区影院 | 人人射人人插 | 一区日韩 | 亚洲高清在线免费观看 | 精品一区二区三区在线观看国产 | 日日噜 | 国产成人综合亚洲欧美94在线 | 免费视频一区二区 | 国产一卡二卡三卡 | 亚洲精品区 | 午夜小电影 | 秋霞性生活 | 在线日韩精品视频 | 91免费在线视频 | 亚洲欧美日韩网站 | 久久精品国产一区二区电影 | 亚洲国产精品一区二区久久 | 久久国产一区二区三区 | 成人在线免费视频观看 | 免费a级毛片在线播放 | 午夜精品在线 | 婷婷国产一区二区三区 | 精品国产一区二区三区久久久蜜月 | 性高湖久久久久久久久3小时 | 亚洲国产成人精 | 色婷婷av一区二区三区软件 | 精品福利一区 | 台湾佬久久 | 久久人| 亚洲美女av网站 | 日韩国产精品一区二区三区 | 成人免费黄色片 | 91精品国产综合久久婷婷香蕉 | 久久精品中文字幕 | 国产一级特黄真人毛片 |