2012-05-08 153 views
9

有人能給我一個關於在分佈式數據庫中如何使用Paxos算法的真實例子嗎?我已經閱讀了許多關於Paxos的文章,解釋了算法,但沒有一篇真正用實際例子解釋。Paxos的真實世界示例

一個簡單的例子可能是一個銀行應用程序,其賬戶通過多個會話進行修改(即在櫃員存款,借記操作等)。 Paxos曾經決定首先進行哪項操作?另外,Paxos協議的多個實例意味着什麼?這是怎麼使用的?基本上,我試圖通過一個具體的例子而不是抽象的術語來理解這一切。

回答

5

例如,我們有MapReduce系統,其中master由3個主機組成。一個是主人,另一個是奴隸。選擇主程序使用Paxos算法。

還胖乎乎的谷歌大表使用的Paxos:The Chubby Lock Service for Loosely-Coupled Distributed SystemsBigtable: A Distributed Storage System for Structured Data

+0

您示例中的關鍵點是,Paxos用於選舉主人,然後交易由主人調解。這也是谷歌使用Chubby的方式 - 選舉一名主人並記錄所有潛在主人需要知道的信息 - 但大量數據交易避免了Paxos。 – btilly

0

Clustrix數據庫是使用中的Paxos事務管理的分佈式數據庫。數據庫內部使用Paxos來協調消息並在分佈式系統中維護事務原子性。

  • 協調員是交易起源於
  • 參與者的節點都是修改了數據庫代表
  • 交易讀者是執行的代碼代表 交易,但並沒有改變節點的節點任何狀態
  • 接受者是記錄事務狀態的節點。

執行交易時採取以下步驟提交:

  1. 協調員發送準備消息給每個參與者。
  2. 參與者鎖定交易狀態。他們將PREPARED消息發送回協調員。
  3. 協調器發送ACCEPT消息給接受者。
  4. 接受者記錄成員身份,事務,提交ID和參與者。他們將接受的消息發回給協調員。
  5. 協調器告訴用戶提交成功。
  6. 協調員將COMMIT消息發送給每個參與者和讀者。
  7. 參與者和讀者提交事務並相應地更新事務狀態。他們將COMMITTED消息發回給協調員。
  8. 協調員刪除內部狀態,現在完成。

這對於應用程序來說都是透明的,並且在數據庫內部實現。因此,對於您的銀行應用程序,所有應用程序級別都需要執行死鎖衝突的異常處理。實現大規模數據庫的另一個關鍵是併發性,這通常通過MVCC(多版本併發控制)來實現。