沒有理由在分散式系統中反對冗餘 (馬克)
從根本上說,分散式系統比單機系統具有更高的可用性是一個根本原因:冗餘。執行系統所需的軟體,狀態和其他內容在多個地方存在。當其中一個地方發生故障時,其他地方可以接管。這適用於複製的資料庫,負載平衡的無狀態系統,無伺服器系統以及幾乎所有其他常見的分散式模式。
冗餘的一個問題是它增加了複雜性,這可能會降低可用性。冗餘可能意味著多臺計算機,多個機架,多個資料中心甚至多個洲。這可能意味著軟體故障,其中諸如金絲雀部署之類的通用技術可以在一個軟體版本出現故障時幫助系統實現冗餘。
當我們談論系統設計時,我們往往會忘記冗餘的這些多重定義,而只關注基礎架構。為了說明冗餘為什麼如此重要,讓我們研究一個例子。
事件日誌理應是構建大型系統的一種流行方法。在這類系統中,有一個有序日誌,所有更改(寫操作)都會流經該日誌,然後將更改應用於掛起該日誌的某些系統。可以是讀取的資料副本,工作流系統可以對更改執行操作,等等。在此模式的簡單版本中,一件事是正確的:日誌中的每個主機和每個使用者都以相同的順序看到相同的更改。
該體系結構的一個優勢是,它可以為基礎結構故障提供大量冗餘。通用事件日誌系統(例如Kafka)可以輕鬆處理單個主機的故障。克服單個副本的故障也很容易,因為該體系結構使保持多個副本同步非常容易。
現在,考慮一下日誌中發生的事件之一是毒丸的情況。這只是意味著消費者不知道如何處理它。也許它說是非法的(“我不能減少這個無符號0!”),或者是沒有道理的(“ X列中的資料是什麼?我從未聽說過X列!”)。也許它說的只有在軟體的未來版本或過去的版本中才有意義。當面對毒藥時,複製基本上有兩種選擇:忽略它或停止。
忽略它可能導致資料丟失,而停止複製則會導致寫操作不可用。沒有人贏。這裡的問題是缺乏冗餘:在相同的狀態下執行相同的(確定性)軟體每次都將具有相同的不良結果。
此問題不僅適用於事件日誌體系結構。眾所周知,複製的狀態機也遇到相同的問題。主/備份複製也是如此。這不是一個體繫結構的問題,而是總體上分散式系統設計的問題。
在設計系統時,值得提出以下問題:您從冗餘中得到了什麼,以及哪些故障可以保護您免受損害。
相關文章
- 詳解分散式系統本質:“分治”和“冗餘”分散式
- 分散式系統2:分散式系統中的時鐘分散式
- Event Sourcing在分散式系統中應用分散式
- 大型分散式網站架構:快取在分散式系統中的應用分散式網站架構快取
- 手動清理Win8.1系統WinSxS冗餘更新
- 一條SQL在 MaxCompute 分散式系統中的旅程SQL分散式
- 分散式系統中ID的需求分散式
- Alluxio在多級分散式快取系統中的應用UX分散式快取
- CAP定理在分散式系統設計中的最新應用分散式
- 網路冗餘技術
- 分散式跟蹤系統——產品對比分散式
- 分散式系統分散式
- 分散式系統中的分散式鏈路追蹤與分散式呼叫鏈路分散式
- 去除冗餘 – 精簡您的CSS樣式程式碼CSS
- 如何刪除Git倉庫中冗餘的tag?Git
- 機器學習中如何用篩選器檢測冗餘?機器學習
- 分散式系統:系統模型分散式模型
- 在一個成熟的分散式系統中 如何下手做高可用?分散式
- 亞馬遜認為在分散式系統中必須避免使用回退亞馬遜分散式
- 分散式 - 分散式系統的特點分散式
- 分散式系統(三)——分散式事務分散式
- 修改ASM磁碟組冗餘模式ASM模式
- 廉價冗餘磁碟陣列陣列
- 找出冗餘索引的指令碼索引指令碼
- 分散式檔案系統(HDFS)與 linux系統檔案系統 對比分散式Linux
- 分散式系統中的領導選舉分散式
- 分散式系統中的事務問題分散式
- 你裝的系統有毒——“蘇拉克”木馬詳細分析
- [分散式]分散式計算系統淺析分散式
- 虛擬機器技術應用於應用系統統一備份和冗餘虛擬機
- 什麼是對分散式系統有自己的理解分散式
- leetcode 684. 冗餘連線(圖中找環)LeetCode
- 細說 Azure Storage 的冗餘策略
- MySQL 冗餘和重複索引薦MySql索引
- 演算法題——冗餘連線演算法
- 訊息佇列在大型分散式系統中的實戰要點分析!佇列分散式
- 在分散式系統中通過客戶端庫包提高可用性分散式客戶端
- 分散式系統的跟蹤系統分散式