分布式系統設計(1)


 

1 設計分布式系統需要考慮的異常

1.1 節點宕機
1.2 網絡異常

消息丟失、消息亂序(可以通過增加序列號解決)以及數據錯誤

1.3 分布式系統三態

在單機,只要不宕機,一個函數執行要么成功、要么失敗,但是分布式系統共下存在成功、失敗和超時。下面解釋一下超時的不確定性:

某個節點 A 向另一個節點 B 發送一個消息,如果請求 RPC 的節點 A 在給定的時間內沒有收到執行 RPC 的節點 B 返回的消息,則認為該操作“超時”。對於超時的請求,我們無法獲知該請求是否被節點 B 成功執行了。這是因為,如果超時是由於節點 A 發向節點 B 的請求消息丟失造成的,則該操作肯定沒有被節點 B 成功執行;但如果節點 A 成功的向節點 B 發送了請求消息,且節點 B 也成功的執行了該請求,但節點 B 發向節點 A 的結果消息被網絡丟失了或者節點 B 在執行完該操作后立刻宕機沒有能夠發出結果消息,從而造成從節點 A 看來請求超時。所以一旦發生超時,請求方是無法獲知 RPC 的執行結果的。

超時解決方法:

A 當出現“超時”時,可以通過發起讀取數據的操作以驗證 RPC 是否成功 (例如銀行系統的做法)。

B 設計分布式協議時將執行步驟設計為可重試的,即具有所謂的“冪等性”。例如覆蓋寫就是一種常見的冪等性操作,因為重復的覆蓋寫最終的結果都相等。如果使用可重試的設計,當出現“失敗”和“超時”時,一律重試操作直到“成功”。這樣,即使超時的操作實際上已經成功了,重試操作也不會對正確性造成影響,從而簡化了設計

1.4 存儲數據丟失

一般是硬盤機械故障。

2 數據分布方式

2.1 哈希方式

哈希方式是最常見的數據分布方式,其方法是按照數據的某一特征計算哈希值,並將哈希值與機器中的機器建立映射關系,從而將不同哈希值的數據分布到不同的機器上。

優點:

哈希方式需要記錄的元信息也非常簡單,任何時候,任何節點只需要知道哈希函數的計算方式及模的服務器總數就可以計算出處理具體數據的機器是哪台。

缺點:

A 突出表現為可擴展性不高,一旦集群規模需要擴展,則幾乎所有的數據需要被遷移並重新分布

B 一旦某數據特征值的數據嚴重不均,容易出現“數據傾斜”(data skew)問題,只能重新選擇需要哈希的數據特征,例如選擇用戶 id 與另一個數據維度的組合作為哈希函數的輸入。

2.2 按數據范圍分布

將數據按特征值的值域范圍划分為不同的區間,使得集群中每台(組)服務器處理不同區間的數據。

優點:

使用范圍分布數據的方式的最大優點就是可以靈活的根據數據量的具體情況拆分原有數據區間,拆分后的數據區間可以遷移到其他機器,一旦需要集群完成負載均衡時,與哈希方式相比非常靈活。另外,當集群需要擴容時,可以隨意添加機器,而不限為倍增的方式,只需將原機器上的部分數據分區遷移到新加入的機器上就可以完成集群擴容。

缺點:

按數據范圍分布數據需要記錄所有的數據分布情況。一般的,往往需要使用專門的服務器在內存中維護數據分布信息,稱這種數據的分布信息為一種元信息。

2.3 按數據量分布

優點:

由於與具體的數據內容無關,按數據量分布數據的方式一般沒有數據傾斜的問題,數據總是被均勻切分並分布到集群中。當集群需要重新負載均衡時,只需通過遷移數據塊即可完成。集群擴容也沒有太大的限制,只需將部分數據庫遷移到新加入的機器上即可以完成擴容。

缺點:

需要管理較為復雜的元信息,與按范圍分布數據的方式類似,當集群規模較大時,元信息

的數據量也變得很大,高效的管理元信息成為新的課題。

2.4  一致性哈希

一致性哈希(consistent hashing)是另一個種在工程中使用較為廣泛的數據分布方式。一致性哈希最初在 P2P 網絡中作為分布式哈希表(DHT)的常用數據分布算法。一致性哈希的基本方式是使用一個哈希函數計算數據或數據特征的哈希值,令該哈希函數的輸出值域為一個封閉的環,即哈希函數輸出的最大值是最小值的前序。將節點隨機分布到這個環上,每個節點負責處理從自己開始順時針至下一個節點的全部哈希值域上的數據。

例 2.1.3:某一致性哈希函數的值域為[0, 10),系統有三個節點 A、B、C,這三個節點處於的一致性哈希的位置分別為 1,4,9,則節點 A 負責的值域范圍為[1,4),節點 B 負責的范圍為[4, 9),節點 C 負責的范圍為[9, 10)和[0, 1)。若某數據的哈希值為 3,則該數據應由節點 A 負責處理。 圖  2-4給出了這個例子的示意圖。

wps_clip_image-18051

哈希分布數據的方式在集群擴容時非常復雜,往往需要倍增節點個數,與此相比,一致性哈希的優點在於可以任意動態添加、刪除節點,每次添加、刪除一個節點僅影響一致性哈希環上相鄰的節點。

例 2.1.4:假設需要在例 2.1.3 中增加一個新節點 D,為 D 分配的哈希位置為 3,則首先將節點A 中[3, 4)的數據從節點 A 中拷貝到節點 D,然后加入節點 D 即可

優點:

使用一致性哈希的方式需要將節點在一致性哈希環上的位置作為元信息加以管理,這點比直接使用哈希分布數據的方式要復雜。然而,節點的位置信息只於集群中的機器規模相關,其元信息的量通常比按數據范圍分布數據和按數據量分布數據的元信息量要小很多。

缺點:

隨機分布節點的方式使得很難均勻的分布哈希值域,尤其在動態增加節點后,即使原先的分布均勻也很難保證繼續均勻,由此帶來的另一個較為嚴重的缺點是,當一個節點異常時,該節點的壓力全部轉移到相鄰的一個節點,當加入一個新節點時只能為一個相鄰節點分攤壓力。

2.5  數據分布方式的選擇

在實際工程實踐中,可以根據需求及實施復雜度合理選擇數據分布方式。另外,上述數據分布方式是如果可以靈活組合使用,往往可以兼備各種方式的優點,收到較好的綜合效果。

2.6  工程投影

wps_clip_image-3230


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM