目錄
1. PhxPaxos源碼分析之關(guān)于PhxPaxos
2. PhxPaxos分析之網(wǎng)絡(luò)基礎(chǔ)部件
3. PhxPaxos源碼分析之Proposer院刁、Acceptor
4. PhxPaxos源碼分析之Learner
5. PhxPaxos源碼分析之狀態(tài)機(jī)
6. PhxPaxos源碼分析之歸檔機(jī)制
7. PhxPaxos源碼分析之整體架構(gòu)
注:本章主要內(nèi)容截取自github phxpaxos官方介紹
1.1 關(guān)于phxpaxos
PhxPaxos是騰訊公司微信后臺(tái)團(tuán)隊(duì)自主研發(fā)的一套基于Paxos協(xié)議的多機(jī)狀態(tài)拷貝類庫(kù)冒萄。它以庫(kù)函數(shù)的方式嵌入到開發(fā)者的代碼當(dāng)中, 使得一些單機(jī)狀態(tài)服務(wù)可以擴(kuò)展到多機(jī)器,從而獲得強(qiáng)一致性的多副本以及自動(dòng)容災(zāi)的特性。 這個(gè)類庫(kù)在微信服務(wù)里面經(jīng)過一系列的工程驗(yàn)證,并且我們對(duì)它進(jìn)行過大量的惡劣環(huán)境下的測(cè)試丐膝,使其在一致性的保證上更為健壯。
1.2 特性
- 基于Lamport的 Paxos Made Simple 進(jìn)行工程化钾菊,不進(jìn)行任何算法變種帅矗。
- 使用基于消息傳遞機(jī)制的純異步工程架構(gòu)。
- 每次寫盤使用fsync嚴(yán)格保證正確性煞烫。
- 一次Propose(寫入數(shù)據(jù))的Latency為一次RTT浑此,均攤單機(jī)寫盤次數(shù)為1次。
- 使用點(diǎn)對(duì)點(diǎn)流式協(xié)議進(jìn)行快速學(xué)習(xí)滞详。
- 支持Checkpoint以及對(duì)PaxosLog的自動(dòng)清理凛俱。
- 支持跨機(jī)器的Checkpoint自動(dòng)拉取。
- 一個(gè)PhxPaxos實(shí)例可以同時(shí)掛載多個(gè)狀態(tài)機(jī)料饥。
- 可使用鏡像狀態(tài)機(jī)模式進(jìn)行Checkpoint的自動(dòng)生成蒲犬。
- 內(nèi)置Master選舉功能。
- 線上數(shù)據(jù)的實(shí)時(shí)增量checksum校驗(yàn)岸啡。
- 網(wǎng)絡(luò)原叮、存儲(chǔ)、監(jiān)控、日志模塊插件化奋隶,可由開發(fā)者自定義沛慢。
- 基于Paxos算法的安全的成員變更。
- 基于Paxos算法的集群簽名保護(hù)达布,隔離非法簽名的錯(cuò)誤機(jī)器。
- 自適應(yīng)的過載保護(hù)逾冬。
1.3 局限
- 一個(gè)PhxPaxos實(shí)例任一時(shí)刻只允許運(yùn)行在單一進(jìn)程(容許多線程)黍聂。
- 這個(gè)類庫(kù)沒有內(nèi)建對(duì)client-server的支持,開發(fā)者必須將類庫(kù)的代碼嵌入到自己的服務(wù)器代碼里面身腻,以實(shí)現(xiàn)這個(gè)功能产还。
- PhxPaxos只容許運(yùn)行在64位的Linux平臺(tái)。
1.4 總結(jié)
PhxPaxos是Paxos的工程化實(shí)現(xiàn)嘀趟。除了實(shí)現(xiàn)Paxos算法之外脐区,還做了很多工程優(yōu)化,包括性能(RTT她按、本地落盤次數(shù)等)牛隅、基礎(chǔ)部件插件化等。
本系列章節(jié)將深入分析PhxPaxos的各個(gè)部分酌泰,從網(wǎng)絡(luò)基礎(chǔ)部件講起媒佣,分析paxos的算法實(shí)現(xiàn)、checkpoint機(jī)制陵刹,最后從更高層上闡述phxpaxos的架構(gòu)實(shí)現(xiàn)默伍。本系列文章將覆蓋“1.1 特性”中描述的所有特性。
本文基于 phxpaxos v1.1.2衰琐。
[1] Leslie Lamport. Paxos made simple. 2001.11.01
[2] 隨安居士. Paxos made simple 釋譯. 2017.03.09
[3] 微信后臺(tái)團(tuán)隊(duì). 微信自研生產(chǎn)級(jí)paxos類庫(kù)PhxPaxos實(shí)現(xiàn)原理介紹. 2016.06.22
【轉(zhuǎn)載請(qǐng)注明】隨安居士. 1. PhxPaxos源碼分析之關(guān)于PhxPaxos. 2017.11.13