除去輕量級的chubby,megastore可能是最早的商用paxos系統,這裡主要回顧下megastore的paxos機制

概覽,megastore中的paxos特性如下

1、每個服務都有一個Coordinator,Coordinator記錄整個實體組(在megastore中,數據被分為多個實體組,每個實體組為一個單元,獨立管理)中哪些副本記錄了所有的數據更新。

2、沒有獨立的master,編號為n的日誌記錄了當前決議和日誌n+1的leader。n+1的請求必須向該leader發起

當一個客戶端需要讀時,讀流程:

1、 查詢coordinator本地數據是否是最新

2、 確定已寫入的最高日誌位置編號,然後選擇一個副本,讀取該編號日誌,此時分為兩種情況

(1) 第一步中,若是最新,則本地讀,

(2) 否則讀取一個大多數

3、 在本地副本上做catch-up

(1) 對於本地副本不知道的決議,從其他副本讀取

(2) 對於不知道是否提交的決議,發起一個noop操作

(3) 提交這些決議

4、 若client要讀本地副本不是最新的,client向coordinator發起驗證

5、 向本地的讀取數據

寫流程

1、 向當前leader申請編號為0的投票,成功轉3

2、 廣播prepare,獲取編號最高的投票

3、 發起accept,失敗退回2

4、 向coordinator通知未接收該請求的副本是舊副本

5、 儘可能多的在各個副本上提交請求,若否個副本提交的請求和proposed出現不一致,返回衝突。


推薦閱讀:
相關文章