目錄
1. PhxPaxos源碼分析之關于PhxPaxos
2. PhxPaxos分析之網絡基礎部件
3. PhxPaxos源碼分析之Proposer、Acceptor
4. PhxPaxos源碼分析之Learner
5. PhxPaxos源碼分析之狀態機
6. PhxPaxos源碼分析之歸檔機制
7. PhxPaxos源碼分析之整體架構
注:本章主要內容截取自github phxpaxos官方介紹
1.1 關于phxpaxos
PhxPaxos是騰訊公司微信后臺團隊自主研發的一套基于Paxos協議的多機狀態拷貝類庫。它以庫函數的方式嵌入到開發者的代碼當中, 使得一些單機狀態服務可以擴展到多機器,從而獲得強一致性的多副本以及自動容災的特性。 這個類庫在微信服務里面經過一系列的工程驗證,并且我們對它進行過大量的惡劣環境下的測試,使其在一致性的保證上更為健壯。
1.2 特性
- 基于Lamport的 Paxos Made Simple 進行工程化,不進行任何算法變種。
- 使用基于消息傳遞機制的純異步工程架構。
- 每次寫盤使用fsync嚴格保證正確性。
- 一次Propose(寫入數據)的Latency為一次RTT,均攤單機寫盤次數為1次。
- 使用點對點流式協議進行快速學習。
- 支持Checkpoint以及對PaxosLog的自動清理。
- 支持跨機器的Checkpoint自動拉取。
- 一個PhxPaxos實例可以同時掛載多個狀態機。
- 可使用鏡像狀態機模式進行Checkpoint的自動生成。
- 內置Master選舉功能。
- 線上數據的實時增量checksum校驗。
- 網絡、存儲、監控、日志模塊插件化,可由開發者自定義。
- 基于Paxos算法的安全的成員變更。
- 基于Paxos算法的集群簽名保護,隔離非法簽名的錯誤機器。
- 自適應的過載保護。
1.3 局限
- 一個PhxPaxos實例任一時刻只允許運行在單一進程(容許多線程)。
- 這個類庫沒有內建對client-server的支持,開發者必須將類庫的代碼嵌入到自己的服務器代碼里面,以實現這個功能。
- PhxPaxos只容許運行在64位的Linux平臺。
1.4 總結
PhxPaxos是Paxos的工程化實現。除了實現Paxos算法之外,還做了很多工程優化,包括性能(RTT、本地落盤次數等)、基礎部件插件化等。
本系列章節將深入分析PhxPaxos的各個部分,從網絡基礎部件講起,分析paxos的算法實現、checkpoint機制,最后從更高層上闡述phxpaxos的架構實現。本系列文章將覆蓋“1.1 特性”中描述的所有特性。
本文基于 phxpaxos v1.1.2。
[1] Leslie Lamport. Paxos made simple. 2001.11.01
[2] 隨安居士. Paxos made simple 釋譯. 2017.03.09
[3] 微信后臺團隊. 微信自研生產級paxos類庫PhxPaxos實現原理介紹. 2016.06.22
【轉載請注明】隨安居士. 1. PhxPaxos源碼分析之關于PhxPaxos. 2017.11.13