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

如何構建高可用的分布式系統?

譯文 精選
開發
高可用性的內涵有哪些?如何實現?


作者 | Kislay Verma

譯者 | 崔皓  

審校 | 云昭

開篇 

本文討論分布式系統如何對隨機故障進行彈性處理,這個問題非常重要,因為隨著系統規模的增大,隨機故障會變得越來越普遍。

系統理論告訴我們,系統中相互關聯的部分越多,發生故障的可能性就越大。因此,要構建一個彈性系統,我們需要減少這種相互關聯。否則就需要通過 “臨時”切斷與故障點的連接來避免問題的發生,從而保證不會因為該故障點而殃及其他節點的正常運行。也就是我們通常所說的,針對分布式系統進行降級和熔斷。

圖 組件之間的關系

一般而言我們會基于如下假設:在分布式系統中的任意組件在任何時刻都有可能發生故障,并且需要定義出現故障的時候對應的處理方式。

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

PART 02

最小化組件間的依賴

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

構建大規模分布式系統迫使我們放棄標準軟件工程的許多“最佳實踐”。關鍵是,當采用分布式系統的復雜性來換取系統的可擴展性時,需要盡可能地控制組件的“分布”。以下幾個要點是需要關注的:

1、副本數據

如果經常從一個組件訪問某些數據,就可以復制該組件,而不必在運行時檢索它。這種方式可以大大減少運行對該組件的依賴,并降低訪問組件的延遲。

對于經常訪問且有規律性變化的數據而言,可以通過臨時緩存并配合定期緩存刷新的方式來獲取他們。更改頻率更低或從不更改的數據(例如客戶姓名)可以直接存儲在組件中。不過當這些數據發生變化時,就需要做一些額外的工作對其進行更新,不過這種小開銷對于整個系統而言是值得的,因為提升了系統的彈性。

2、非規范化數據

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

3、組件庫

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

隔離錯誤  

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

錯誤隔離的由 SLA(Service Level Agreement 服務保障協議)構成。它針對每個組件聲明了質量參數,在組件執行過程時會參照這些參數。質量參數包括:延遲、錯誤率、并發性等。

當一個組件調用進行SLA設置的組件時,調用方會根據被調用方的SLA參數進行設置,其目的是在調用失敗的時候可以采取對應的處理措施。例如,調用方發現被調用方的錯誤率到達了70%,就會延遲5s再調用該組件。

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

同時為了保持整體系統的健康,最好使用快速失敗的方式告知調用方,而不是在違反 SLA 的情況下讓調用方成功調用。需要注意的是,調用方和被調用方都必須進行該設置。

保護調用者

超時:如果被調用的組件在其 SLA 設置范圍內沒有響應,調用者必須設置對應的超時機制,或放棄又或者采用回退機制(即使拋出錯誤),從而維護自己的 SLA 并防止一連串的 SLA 違規現象的發生。

重試:網絡不可靠性會引發分布式系統中的隨機錯誤。假設在調用者自身的 SLA設置允許的情況下,可以進行重試操作。重試操作的前提是被調用者需要支持操作的冪等性。即不論進行多少次操作對數據狀態的改變也只算做一次。

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

“斷路器庫”會對有問題的組件進行定期輪詢,并在其可能恢復性能時重新啟動調用機制。

保護被調用者

隨機補償:雖然重試可以減少調用錯誤發生的概率,但對于被頻繁調用的組件而言,出現小小的性能問題都會導致調用者進行重試操作。在調用者足夠多的情況下,就會形成 “重試風暴”,其結果會造成負載峰值并不利于被調用者的恢復。為了防止這種情況的發生,應該設置隨機的重試時間間隔,使重試負載交錯進行。

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

在系統中建立緩沖區

1、異步通信

可以通過消息總線之類的異步通信方式,調用遠程組件而無需非常嚴格的 SLA 參數規則。消息總線種存放要訪問被調用方的請求,被調用組件準備好之后再處理這些請求,而不是立即處理請求,這樣系統就可以更加靈活地處理負載了。

2、彈性供應

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

原文鏈接:

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

譯者介紹

崔皓,51CTO社區編輯,資深架構師,擁有18年的軟件開發和架構經驗,10年分布式架構經驗。曾任惠普技術專家。樂于分享,撰寫了很多熱門技術文章,閱讀量超過60萬?!斗植际郊軜嬙砼c實踐》作者。

責任編輯:薛彥澤 來源: 51CTO
相關推薦

2023-08-28 10:40:12

Java分布式

2025-04-01 01:04:00

Redis集群緩存

2022-01-10 19:45:40

微服務GO系統

2023-08-25 16:26:49

微服務架構

2023-01-06 16:42:28

2019-10-16 10:34:33

數據庫大數據腳本語言

2018-07-11 09:34:55

分布式架構高可用

2023-05-12 08:23:03

分布式系統網絡

2017-12-12 14:51:15

分布式緩存設計

2022-05-05 12:03:08

分布式系統設計

2020-11-26 09:38:19

分布式架構系統

2021-09-23 12:14:50

Redis分布式優化

2023-02-11 00:04:17

分布式系統安全

2023-05-29 14:07:00

Zuul網關系統

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

分布式系統限流

2015-05-28 09:13:34

Spring Clou云應用開發自我修復
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费区一区二区三区 | 亚洲色图综合 | 国产一级免费在线观看 | 欧美一级高潮片免费的 | 亚洲国产成人精品女人久久久野战 | 日韩中文字幕一区二区三区 | 亚洲一区二区三区在线视频 | 亚洲综合成人网 | 夜夜操天天干 | 久久久123 | 四虎最新视频 | 成人影院av | 国产亚洲一区二区精品 | 99国产精品99久久久久久粉嫩 | 欧美一区二区在线观看视频 | 亚洲+变态+欧美+另类+精品 | 啪视频在线 | 国产玖玖 | 久久国产精品99久久久大便 | 色婷婷精品国产一区二区三区 | 亚洲一区二区三区四区五区午夜 | 精品啪啪 | 91免费看片神器 | 欧美一区二区三区在线 | 国产亚洲精品久久久久久豆腐 | 日韩视频在线一区 | 韩日一区二区 | 亚洲热在线视频 | 观看av| 日本精品一区二区三区在线观看视频 | 成人网av | 久久久这里都是精品 | 日本一区二区视频 | 国产高清精品在线 | 成人二区 | 99精品亚洲国产精品久久不卡 | 亚洲成人一级 | 久久伊人影院 | 一级黄色绿像片 | 亚洲精品二区 | 一级毛片免费完整视频 |