適合 分佈式系統工程師 的 分佈式系統理論

適合 分佈式系統工程師 的 分佈式系統理論

原文html

Gwen Shapira曾在Cloudera作工程師,如今宣傳Kafka,他在Twitter問了如下問題,使我有所思考。web

我想在分佈式理論上有所提高。應該從哪開始?有推薦的書?
— Gwen (Chen) Shapira (@gwenshap) August 7, 2014

我第一反應是「能夠看:FLP論文、paxos論文、Byzantine將軍論文」。我推薦的主要閱讀材料,若是你貿然去讀,你至少要閱讀6個月纔會有感受。由此可知,推薦一噸的理論論文讓你閱讀,這是瞭解分佈式系統的錯誤的方式(除非你在讀博士)。 論文通常是深奧、複雜的,並且須要一系列學習和豐富的經驗才能感受到其貢獻、才能把其放到對應的場景(以理解和應用)。算法

工程師瞭解分佈式理論有什麼好處?api

很不幸,幾乎沒有好的引導文章,來總結、提煉、場景化 分佈式系統理論中的重要結論和想法; 特別是 通俗易懂的引導文章 更沒有。
考慮這樣的空白區域,讓我想問另外一個問題:安全

一個分佈式系統工程師應該瞭解什麼樣的分佈式系統理論?app

這種狀況下,瞭解一點點理論並非壞事。我平常工做是一個分佈式系統工程師,下面會給出 我認爲適合個人基本概念 們。
你認爲我缺失的請告知我!cors

準備

下面四個讀物解釋了構建分佈式系統會遇到的困難。這些讀物都勾勒了一些列 抽象而非技術 的困難,分佈式系統工程師必需要克服這些困難。這些讀物的後面章節有更詳細的研究。dom

Distributed Systems for Fun and Profit 是一本小書,它想覆蓋分佈式系統中的一些基本問題,包括 時鐘所起的做用、不一樣策略的複製。異步

Notes on distributed systems for young bloods - 非理論,而是一個很好的實踐,以讓你落到實處。分佈式

A Note on Distributed Systems - 一個經典論文,關於 爲何你不能僞裝全部遠程交互像本地對象同樣。

The fallacies of distributed computing 分佈式計算的8個錯誤的推論,以提醒系統設計者。

你應該知道 安全 和 活力:

  • 安全 說的是 永遠不會發生壞事。好比,不返回不一致的值 是 一種 安全, 同一時刻不會選出兩個 主節點 也是 一種 安全。
  • 活力 說的是 好事情終究會發生。好比,對於每一個api調用,一個系統終究會返回一個結果,這是一種 活力;保證一次寫磁盤最終總能結束,這是一種 活力。

失敗和時鐘

分佈式系統工程師面對的許多困難能夠歸結爲如下兩個緣由:

  1. 進程可能_失敗_
  2. There is no good way to tell that they have done so

進程間怎麼共用時鐘、什麼樣的失敗能夠檢測、什麼樣的算法和原語能夠被正確實現,這三者之間有很深的聯繫。通常狀況下,咱們假設不一樣節點絕對沒法共用時鐘(時刻值或流過了多少時間).

你應該知道:

容錯致使的基本矛盾

一個系統容忍一些錯誤而沒有降級 必須能當成 就像這些錯誤沒有發生過同樣。這意味着系統的一部分要冗餘地工做(一樣的功能部署多個節點),冗餘是絕對必要的,冗餘通常會帶來性能和資源的消耗。這就是給一個系統添加冗餘的基本矛盾。

你應該知道:

(多數派中有一個是主節點,其他爲從節點,以主節點接收到的寫請求序列爲準[即串行],主節點單方面的要求從節點們接受主節點的寫請求序列[從節點不得反抗、不得有異議:從節點是誠實的非惡意的、遵照全局規則的、非拜占庭的])

基本原語

在分佈式系統中,不多有約定的基本構建塊,更多的是處於造成中的基本構建塊。你應該知道下面的問題是什麼,而且從哪能找到他們的解決方案:

*   Gossip ([經典論文](http://bitsavers.informatik.uni-stuttgart.de/pdf/xerox/parc/techReports/CSL-89-1_Epidemic_Algorithms_for_Replicated_Database_Maintenance.pdf))
    
*   [因果廣播](https://www.cs.cornell.edu/courses/cs614/2003sp/papers/BSS91.pdf) (也能夠看看 [Birman](https://www.cs.rice.edu/~alc/comp520/papers/Cheriton_Skeen.pdf)和[forth](https://www.cs.princeton.edu/courses/archive/fall07/cos518/papers/catocs-limits-response.pdf) ).

基礎結論

有些事實只須要主觀理解(不須要關注證實).

  • 若是節點間可能丟失消息[:P],那麼你不可能 既 實現一致性存儲[:C] 又 響應全部時刻的請求[:A]. 這就是 CAP理論.
  • 在一個異步系統中,一致性不可能以這樣一個途徑實現:既a) 老是正確的 ; 又b) 老是能結束 即便只有一個節點可能以 崩潰-*中止 失敗 (FLP結論). 在看證實以前,看下我以簡明的方式解釋FLP結論的論文 Papers We Love SF talk . _建議: 沒有理解證實的須要_.

(一個異步系統中,假設節點崩潰後中止而不是奔潰後又恢復;一、要確保結果老是正確的,二、每次寫請求可以在有限時間內返回結果。這兩點無法同時知足:這就是FLP結論)

  • 通常地,只進行少於2輪的消息傳遞,不可能達成一致性 .
  • 原子廣播和一致性,兩者的難度精確的相等。更直白的說,若是你能解原子廣播,那麼你也能解一致性,反之亦然。 Chandra 和 Toueg 證實了這一點, 可是你只須要知道這個論斷是成立的。

真實系統

最重要的、應該不斷重複的實踐是:讀新的、真實的系統的描述,並評價他們設計的決定。 下面是建議的系統:

Google:

Not Google:

Postscript 結尾

若是你馴服了這個列表中的全部概念和技術,我很樂意和你聊聊Cloudera的分佈式系統工程師職位。

相關文章
相關標籤/搜索