分散式系統範例目錄

2023 年 11 月 23 日

分散式系統對程式設計提出了特定的挑戰。它們通常要求我們擁有資料的複本,而且這些複本需要保持同步。然而,我們無法依賴處理節點可靠地運作,而且網路延遲很容易導致不一致。儘管如此,許多組織依賴於一系列核心分散式軟體來處理資料儲存、訊息傳遞、系統管理和運算能力。這些系統面臨著共同的問題,而它們使用類似的解決方案來解決這些問題。

2020 年,我開始將這些解決方案收集成範例,並在開發這些解決方案時將它們發布到這個網站上。2023 年,這些解決方案發表在《分散式系統範例》一書中。現在,我在這個網站上提供了每個範例的簡短摘要,並提供深入連結到 oreilly.com 上線上電子書出版品的相關章節(在此頁面上以 ). 標示)。

時鐘約束等待  連結到 oreilly.com 上的章節

在讀寫值之前,等待涵蓋群集節點間時間的不確定性,以便可以在群集節點間正確排序值。

一致核心  連結到 oreilly.com 上的章節

維護一個較小的群集,提供更強的一致性,以允許大型資料群集協調伺服器活動,而無需實作基於法定人數的演算法。

新興領導者  連結到 oreilly.com 上的章節

根據群集節點在群集中的時間對群集節點排序,以允許節點選擇一個領導者,而無需執行明確的選舉。

固定分區  連往 oreilly.com 上章節的連結

當叢集大小變更時,保持分區數量固定,以維持資料對分區的對應關係不變。

追隨者讀取  連往 oreilly.com 上章節的連結

從追隨者提供讀取要求,以達成更好的吞吐量和更低的延遲。

世代時鐘  連往 oreilly.com 上章節的連結

一個單調遞增的數字,表示伺服器的世代。

閒聊傳播  連往 oreilly.com 上章節的連結

使用隨機節點選擇,傳遞資訊,以確保資訊傳遞到叢集中的所有節點,而不會淹沒網路。

心跳  連往 oreilly.com 上章節的連結

定期傳送訊息給所有其他伺服器,以顯示伺服器可用。

高水位標記  連往 oreilly.com 上章節的連結

寫入前記錄中的索引,顯示最後一次成功的複製。

混合時鐘  連往 oreilly.com 上章節的連結

使用系統時間戳記和邏輯時間戳記的組合,將版本設為可排序的日期和時間。

冪等接收器  連往 oreilly.com 上章節的連結

唯一識別來自客戶端的請求,以便在客戶端重試時忽略重複的請求。

關鍵範圍分割  連結至 oreilly.com 上的章節

將資料分割成已排序的關鍵範圍,以有效率地處理範圍查詢。

Lamport 時鐘  連結至 oreilly.com 上的章節

使用邏輯時間戳記作為值的版本,以允許跨伺服器對值進行排序

領導者和追隨者  連結至 oreilly.com 上的章節

有一個單一伺服器來協調一組伺服器之間的複製。

租約  連結至 oreilly.com 上的章節

對叢集節點使用時間限制租約來協調其活動。

低水位標記  連結至 oreilly.com 上的章節

寫入前記錄檔中的索引,顯示可以捨棄記錄檔的哪一部分。

多數法定人數  連結至 oreilly.com 上的章節

透過要求多數決來做出每個決定,避免兩組伺服器做出獨立的決定。

Paxos  連結至 oreilly.com 上的章節

使用兩個共識建立階段,即使節點斷線也能達成安全的共識

複製記錄檔  連結至 oreilly.com 上的章節

透過使用複製到所有叢集節點的寫入前記錄檔,讓多個節點的狀態保持同步。

請求批次  連結至 oreilly.com 上的章節

合併多個請求以最佳化利用網路

請求管線  連結至 oreilly.com 上的章節

透過在連線上傳送多個請求,而不等待前一個請求的回應,來改善延遲。

請求等待清單  連結至 oreilly.com 上的章節

追蹤客戶端請求,這些請求需要在根據其他叢集節點的回應滿足回應條件後才能回應。

分段記錄檔  連結到 oreilly.com 上的章節

將記錄檔分割成多個較小的檔案,而非單一大型檔案,以利於操作。

單一 Socket 通道  連結到 oreilly.com 上的章節

使用單一 TCP 連線,維持傳送至伺服器的要求順序

單一更新佇列  連結到 oreilly.com 上的章節

使用單一執行緒非同步處理要求,以維持順序,而不會阻擋呼叫者。

狀態監控  連結到 oreilly.com 上的章節

當伺服器上的特定值變更時,通知客戶端

兩階段提交  連結到 oreilly.com 上的章節

在單一原子操作中,更新多個節點上的資源

版本向量  連結到 oreilly.com 上的章節

維護一個計數器清單,每個叢集節點一個,以偵測同時更新

版本化值  連結到 oreilly.com 上的章節

將每次對值的更新儲存在新版本中,以允許讀取歷史值。

寫入前記錄檔  連結到 oreilly.com 上的章節

透過將每個狀態變更持續儲存在僅附加記錄檔中作為指令,提供耐用性保證,而無需將儲存資料結構刷新至磁碟。