咱們來聊聊分佈式

      大型主機時代已經井噴,集中式時代已經沒法知足日益健壯複雜的業務和需求,互聯網時代的到來,使得由集中式到分佈式的革命猶然而生,網絡化,微型化發展步伐迫切,分佈式的需求愈來愈能適應需求,一線電商平臺邁入分佈式時代。服務器

    分佈式官方定義爲:所謂分佈式系統顧名思義就是利用多臺計算機協同解決單臺計算機所不能解決的計算、存儲等。網絡

問題1、 併發

將一個單機問題使用分佈式解決,首先要解決的就是如何將問題拆解爲可使用多機分佈式解決,使得
分佈式系統中的每臺機器負責原問題的一個子集。負載均衡

 

1.特色:分佈式

分佈性:分佈式多臺計算機在空間上可隨意分佈,機器的分佈狀況能夠隨時調整函數

對等性:分佈式系統的計算機沒有主從之分,沒有控制整個系統的主機,也沒有被控制的從機,組成分佈式系統的全部計算機節點都是對等的,每一個節點都是用副本的形式來數據冗餘的方式保證數據的持久化。spa

併發性:同一個分佈式系統的的多個節點會操做一份共享的資源和數據的分佈式存儲,如何高效準確的協調控制分佈式併發成爲了一個難題。設計

缺少全局時鐘:典型的分佈式系統由多臺計算機在空間上隨意分佈的多個進程組成,進程之間經過消息來進行相互通訊,很難保證一個次順問題,好比分佈式中的全局惟一ID如何生成等等問題。進程

2.環境:內存

通訊異常:分佈式能夠說是多個節點之間依靠不穩定的網絡進行通訊,網絡有可能會出現故障。

網絡分區:因爲網絡異常,致使分佈式節點通信延時或者宕機,只有一部分節點還能夠正常運行。

三態: 成功,失敗,超時。

節點故障:分佈式服務器節點有可能宕機,僵死等等狀況。

 

3.異常處理的原則:
在設計、推導、驗證分佈式系統的協議、流程時,最重要的工做之一就是思考在執行流程的每
個步驟時一旦發生各類異常的狀況下系統的處理方式及形成的影響。


例 1.2:某分佈式協議實現一個 echo 功能,即由節點 A 向節點 B 發送一個消息,內容是一個整
數,節點 B 收到後返回相同的消息。節點 A 發送的消息每次遞增長 1。
節點 A 的處理流程爲:
1. 向節點 B 發送一個消息,消息內容爲當前須要發送的整數;


2. 等待接收從節點 B 發回的響應消息;


3. 若 B 發回的消息等於當前須要發送的整數,


a) 將當前須要發送的整數加 1;


b) 不然返回 1;


上述簡單的流程可能遇到各類異常且不能正確處理:

第1、當前須要發送的整數沒有持久化,在上述流程中,一旦節點 A 宕機,節點 A 沒法繼續上述流程。

第2、節點 B 一旦宕機,節點 A 不會收到響應消息,流程將卡在第二步沒法進行下去。

第3、若 A 發給 B 或 B 發回 A 的消息有一個丟失,節點 A 也不會收到響應消息。

在本節中,不討論如何修改這個流程以處理上述異常,舉這個例子是爲了說明異常分析的基本方法。

 

被大量工程實踐所檢驗過的異常處理黃金原則是:

任何在設計階段考慮到的異常狀況必定會在系統實際運行中發生,但在系統實際運行遇到的異常卻頗有可能在設計時未能考慮,因此,除非需指標容許,在系統設計時不能放過任何異常狀況。

 

4.數據分佈式:

哈希方式:

     哈希方式是最多見的數據分佈方式,其方法是按照數據的某一特徵計算哈希值,並將哈希值與
機器中的機器創建映射關係,從而將不一樣哈希值的數據分佈到不一樣的機器上。所謂數據特徵能夠是
key-value 系統中的 key,也能夠是其餘與應用業務邏輯相關的值。例如,一種常見的哈希方式是按
數據屬於的用戶id計算哈希值,集羣中的服務器按0到機器數減1編號,哈希值除以服務器的個數,
結果的餘數做爲處理該數據的服務器編號。工程中,每每須要考慮服務器的副本冗餘,將每數臺服務器組成一組,用哈希值除以總的組數,其他數爲服務器組的編號。   

按數據範圍分佈:

按數據範圍分佈是另外一個常見的數據分佈式,將數據按特徵值的值域範圍劃分爲不一樣的區間,
使得集羣中每臺(組)服務器處理不一樣區間的數據。


例1 :已知某系統中用戶 id 的值域範圍是[1,100),集羣有 3 臺服務器,使用按數據範圍劃分
數據的數據分佈方式。將用戶 id 的值域分爲三個區間[1, 33),,[33, 90),[90, 100)分別由 3 臺服務器
負責處理。

值得注意的是,每一個數據區間的數據大小和區間大小是沒有關係的。例如,上例中按用戶 id 劃 分的三個區間,雖然從用戶 id 的值域看來,不是等大小的,但三個區間中的數據量卻有多是差不 多的。這是由於可能有的用戶 id 的數據量大,有些用戶 id 數據量小。也有可能某些區間中實際存 在的用戶 id 多,有些區間中實際存在的用戶 id 少。工程中,爲了數據遷移等負載均衡操做的方便, 每每利用動態劃分區間的技術,使得每一個區間中服務的數據量儘可能的同樣多。當某個區間的數據量 較大時,經過將區間「分裂」的方式拆分爲兩個區間,使得每一個數據區間中的數據量都儘可能維持在 一個較爲固定的閾值之下。 與哈希分佈數據的方式只須要記錄哈希函數及分桶個數(機器數)不一樣,按數據範圍分佈數據 須要記錄全部的數據分佈狀況。通常的,每每須要使用專門的服務器在內存中維護數據分佈信息, 稱這種數據的分佈信息爲一種元信息。甚至對於大規模的集羣,因爲元信息的規模很是龐大,單臺 計算機沒法獨立維護,須要使用多臺機器做爲元信息服務器。

相關文章
相關標籤/搜索