隨承載用戶數量的增長和容災的須要,愈來愈多互聯網後臺系統從單機模式切換到分佈式集羣。回顧本身畢業五年來的工做內容,一樣有這樣的轉變。html
畢業頭兩年負責維護運行在刀片機上的業務,在機房裏拔插單板的日子是我逝去的青春。設備之間經過VCS組成冷備,但即便有雙機軟件保護,宕機、網絡丟包等問題發生時業務仍會受影響。這樣的系統架構下爲保證SLA,有時候須要深刻Linux系統內核或硬件層面分析機器重啓的緣由。網絡
接下來負責維護承載在分佈式集羣上的業務,相比前面的工做,這個階段主要關注點不是單節點的異常,更可能是系統總體的穩定和健壯。面對紛繁複雜的系統,剛開始的時候有這樣的感受:架構
龐大複雜的分佈式系統前,應該從哪方面入手提高對其的認識和理解、提高專業性?網上能夠找到不少分佈式系統相關的論文和資料,但概括起來要表達的主要意思是什麼?分佈式
結合本身這幾年的工做經驗,總結分佈式系統的核心就是解決一個問題:不一樣節點間如何達成共識。優化
看似簡單的問題因網絡丟包、節點宕機恢復等場景變得複雜,由此才衍生出不少概念、協議和理論。爲探究共識問題最大能解決的程度,因而有FLP、CAP邊界理論;爲在特定條件和範圍內解決該問題,因而有一致性協議Paxos、Raft、Zab和Viewstamped Replication;爲構建這些協議,因而有多數派、Leader選舉、租約、邏輯時鐘等概念和方法。ui
2016年我閱讀了分佈式系統領域一些表明性的論文和博文,圍繞「不一樣節點如何達成共識」這個問題,加入本身的認識和理解後有下面7篇小結:spa
一致性、2PC和3PC
選舉、多數派和租約
時間、時鐘和事件順序
CAP
Paxos
Raft、Zab
Paxos變種和優化.net
構思和寫做技術類文章是一個辛苦的過程,一方面要閱讀不少資料並轉化成本身的理解、找到儘可能不拾人牙慧的立意和角度,一方面要絞盡腦汁組織語言讓預期的讀者可以容易理解。3d
但它也是一個有趣的過程,把知識捋一遍後本來一些模糊的概念變得清晰,寫做過程當中想到的一些有意思的內容我也會將它穿插到文章裏,有時候會被本身想到的一些小機靈逗樂 :)unix
但願這幾篇整理能爲系統性地介紹分佈式理論中文資料添一塊磚、加一片瓦。