日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

分布式系统的数据分布方式

發布時間:2024/2/28 windows 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式系统的数据分布方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

哈希方式

常見哈希方式:(用戶id) % (機器(組)數)=? 分配到0~(機器(組)數-1)上

優點:只要哈希函數的散列特性較好,哈希方式可以較為均勻的將數據分布到集群中去。

缺點:

①可擴展性不高,一旦集群規模需要擴展,則幾乎所有的數據需要被遷移并重新分布。

②一旦某數據特征值的數據嚴重不均,容易出現“數據傾斜”(data skew)問題。

解決方式:

①擴展哈希分布的數據系統時,要成倍的擴展,按照數據重新計算哈希,這樣原本一臺機器上的數據只需遷移一半到另一臺對應的機器上即可完成擴展。

②將對應關系作為元數據,由專門的元數據服務器管理。將哈希值取模的值大于機器的數量,這樣同一臺機器上需要負責多個哈希取模的余數。在集群擴容時,將部分余數分配到新加的機器并遷移對應的數據到新機器上。

③重新選擇需要哈希的數據特征

按數據范圍分布

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

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

優點:

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

缺點:

①也會出現“數據傾斜”(data?skew)問題。例:某個數據的用戶量大

②需要維護較為復雜的元信息。隨著集群規模的增長,元數據服務器較為容易成為瓶頸,從而需要較多的元數據服務器解決這個問題。

解決方式:

工程中,為了數據遷移等負載均衡操作的方便,往往利用動態劃分區間的技術,使得每個區間中服務的數據量盡量的一樣多。當某個區間的數據量較大時,通過將區間“分裂”的方式拆分為兩個區間,使得每個數據區間中的數據量都盡量維持一個較為固定的閾值之下。

按數據量分布

數據量分布數據與具體的數據特征無關,而是將數據視為一個順序增長的文件,并將這個文件按照某一較為固定的大小劃分為若干數據塊(chunk),不同的數據塊分布到不同的服務器上。

優點:一般沒有數據傾斜的問題

當集群需要重新負載均衡時,只需通過遷移數據塊即可完成。

集群擴容,只需將部分數據庫遷移到新加入的機器上即可以完成擴容。

缺點:需要管理較為復雜的元信息,高效的管理元信息成為新的課題。

一致性哈希

一致性哈希的基本方式是使用一個哈希函數計算數據或數據特征的哈希值,令該哈希函數的輸出值域為一個封閉的環,即哈希函數輸出的最大值是最小值的前序。將節點隨機分布到這個環上,每個節點負責處理從自己開始順時針至下一個節點的全部哈希值域上的數據。

優點:可以任意動態添加、刪除節點,每次添加、刪除一個節點僅影響一致性哈希環上相鄰的節點。

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

改進算法:引入虛節點(virtual?node)的概念,系統初始時就創建許多虛節點,虛節點的個數一般遠大于未來集群中機器的個數,將虛節點均勻分布到一致性哈希值域環上,其功能與基本一致性哈希算法中的節點相同。為每個節點分配若干虛節點。操作數據時,首先通過數據的哈希值在環上找到對應的虛節點,進而查找元數據找到對應的真實節點。

副本與數據分布

分布式系統容錯、提高可用性的基本手段就是使用副本。一種基本的數據副本策略是以機器為單位,若干機器互為副本,副本機器之間的數據完全相同。

優點:非常簡單

缺點:恢復數據的效率不高、可擴展性也不高。

注:副本之間的數據完全相同,1、2、3互為副本?? 4、5、6互為副本?? 7、8、9互為副本

如果其中1臺機器出現故障,為了不影響服務需要新機器從剩下的2臺上拷貝數據。
①如果全盤拷貝相當消耗資源,如果將一臺可用的副本下線專門拷貝,那么此時正常的副本數只有一個,會有巨大的安全隱患。
②如果用限速的方法從2個副本上拷貝數據,恢復的時間又很長
③不利于提高擴展性,如果只增加2臺機器,因為2臺機器無法組成新的副本組,則無法擴容。相當于加了66%的機器卻擴容失敗
(此處并非無法擴容,可以擴容只不過承擔的風險會比較大,同時2臺機器的壓力會增加,如果有1臺宕機那么只有一臺可以提供服務)

④不利于系統容錯,加個有3個副本,1臺宕機后剩下2臺的壓力將增大50%

更合適的做法不是以機器作為副本單位,而是將數據拆為較合理的數據段,以數據段為單位作為副本

數據段的選擇:

①哈希:每個哈希分桶后的余數可以作為一個數據段,為了控制數據段的大小,常常使得分桶個數大于集群規模。

②按數據范圍分布:將每個數據區間作為一個數據段,并控制數據區間中數據的大小。

③按數據量分數據:按照每個數據塊作為數據段。

④一致性哈希:將一致性哈希環分為若干等長分區,分區個數一般遠大于節點個數,假設哈希函數均勻,則每個分區中的數據可以作為一個數據段。

此種方式的優點: ①這種方式使副本分布與機器無關,副本丟失后的恢復效率非常高,如果機器1宕機,那可以從集群中剩下的所有機器上同時拷貝恢復數據(即使限速也會很快,因為機器多啊) ②利于集群容錯,宕機機器上的副本分散于整個集群,壓力分散到整個集群自然就小了 ③利于集群擴展,加入一臺新機器的時候只需要從各機器上遷移1/n比例的數據段到新機器就可以實現新的負載均衡。

本地化計算

對于分布式系統而言,除了解決大規模存儲問題更需要解決大規模的計算問題。

如果計算節點和存儲節點位于不同的物理機器則計算的數據需要通過網絡傳輸,此種方式的開銷很大,甚至網絡帶寬會成為系統的總體瓶頸。另一種思路是,將計算盡量調度到與存儲節點在同一臺物理機器上的計算節點上進行,這稱之為本地化計算。本地化計算是計算調度的一種重要優化,其體現了一種重要的分布式調度思想:“移動數據不如移動計算”。

數據分布方式的選擇

數據傾斜問題:在按哈希分數據的基礎上引入按數據量分布數據的方式,解決該數據傾斜問題。

按用戶 id 的哈希值分數據,當某個用戶 id 的數據量特別大時,該用戶的數據始終落在某一臺機器上。此時,引入按數據量分布數據的方式,統計用戶的數據量,并按某一閾值將用戶的數據切為多個均勻的數據段,將這些數據段分布到集群中去。由于大部分用戶的數據量不會超過閾值,所以元數據中僅僅保存超過閾值的用戶的數據段分布信息,從而可以控制元數據的規模。

常見分布式系統的數據分布方式系統

GFS & HDFS 按數據量分布

Map reduce 按 GFS 的數據分布做本地化

Big Table & HBase 按數據范圍分布

PNUTS 哈希方式/按數據范圍分布(可選)

Dynamo & Cassandra 一致性哈希

Mola & Armor? 哈希方式

Big Pipe? 哈希方式

Doris 哈希方式與按數據量分布組合

?

?

?

參考資料:《分布式系統原理介紹》作者:劉杰

如有錯誤歡迎指正!

總結

以上是生活随笔為你收集整理的分布式系统的数据分布方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。