1. 程式人生 > >大資料系列 (一)、資料分片與路由(Hash partition and Routing)

大資料系列 (一)、資料分片與路由(Hash partition and Routing)

大資料背景下,資料規模已經由GB級跨越到PB級,單機明顯無法儲存與處理如此規模的資料量,只能依靠大規模叢集來對這些資料進行儲存和處理,所以系統可擴充套件成衡量系統優劣的重要指標。傳統並行資料庫系統為了支援更多的資料,往往採用縱向擴充套件(Scale Up)的方式,既不增加機器數量,而是通過改善單機硬體資源配置來解決問題。而目前主流的大資料儲存與計算系統往往採用橫向擴充套件(Scale Out)的方式支援系統的可擴充套件性,即通過增加機器數目來獲得水平擴充套件的能力。與此對應,對於待儲存處理的海量資料,需要用過資料分片(Shard/Partition)將資料進行切分並分配到各個機器中區,資料分片後,如何能夠找到某條記錄的儲存位置就成為必然要解決的問題。這一般被稱為資料路由(Routing)

資料分片與資料複製是緊密聯絡的兩個概念,對於海量資料,通過資料分片實現系統的水平擴充套件能力,通過資料複製保證資料的高可用性。由於機器可能存在隱患,為了保證資料不丟失,可將資料備份起來,客戶端可從多個備份資料中選擇物理距離較近的進行讀取,增加了讀操作的併發性又可以提高單次讀的讀取效率。

 

1          抽象模型

圖1-2展示了一個很高抽象級別的資料分片與路由模型,可以看做是一個二級對映關係。第一級對映是key-partition對映,其將資料記錄對映到資料分片空間,這往往是多對一的對映關係,即一個數據分片包含多天記錄資料;第二級對映是partition-machine對映,其將資料分片對映到物理機器中,這一版也是多對一對映關係,機一臺物理主機容納多個數據分片。

在做資料分片時,根據keypartition對映關係將大資料水平切割成中多的資料分片,然後再按照partition-machine對映關係將資料分片放置到對應的物理機器上。而在資料路由時,比如要查詢某條記錄的值get(key),首先根據key-partition對映找到對應的資料分片,然後再查詢partition-machine關係表,就可以知道具體哪臺物理機器儲存該條資料,之後即可從相應的物理機讀取key對應的value內容

大資料背景下,資料規模已經由GB級跨越到PB級,單機明顯無法儲存與處理如此規模的資料量,只能依靠大規模叢集來對這些資料進行儲存和處理,所以系統可擴充套件成衡量系統優劣的重要指標。傳統並行資料庫系統為了支援更多的資料,往往採用縱向擴充套件(Scale Up)的方式,既不增加機器數量,而是通過改善單機硬體資源配置來解決問題。而目前主流的大資料儲存與計算系統往往採用橫向擴充套件(Scale Out)的方式支援系統的可擴充套件性,即通過增加機器數目來獲得水平擴充套件的能力。與此對應,對於待儲存處理的海量資料,需要用過資料分片(Shard/Partition)將資料進行切分並分配到各個機器中區,資料分片後,如何能夠找到某條記錄的儲存位置就成為必然要解決的問題。這一般被稱為資料路由(Routing)

資料分片與資料複製是緊密聯絡的兩個概念,對於海量資料,通過資料分片實現系統的水平擴充套件能力,通過資料複製保證資料的高可用性。由於機器可能存在隱患,為了保證資料不丟失,可將資料備份起來,客戶端可從多個備份資料中選擇物理距離較近的進行讀取,增加了讀操作的併發性又可以提高單次讀的讀取效率。

1          抽象模型

圖1-2展示了一個很高抽象級別的資料分片與路由模型,可以看做是一個二級對映關係。第一級對映是key-partition對映,其將資料記錄對映到資料分片空間,這往往是多對一的對映關係,即一個數據分片包含多天記錄資料;第二級對映是partition-machine對映,其將資料分片對映到物理機器中,這一版也是多對一對映關係,機一臺物理主機容納多個數據分片。

在做資料分片時,根據keypartition對映關係將大資料水平切割成中多的資料分片,然後再按照partition-machine對映關係將資料分片放置到對應的物理機器上。而在資料路由時,比如要查詢某條記錄的值get(key),首先根據key-partition對映找到對應的資料分片,然後再查詢partition-machine關係表,就可以知道具體哪臺物理機器儲存該條資料,之後即可從相應的物理機讀取key對應的value內容


1  雜湊分片(Hash Partition)

RoundRobin就是俗稱的雜湊取模法,是實際中非常常用的資料分片方法。假設有K臺物理機,通過以下雜湊函式即可實現資料分片:

H(key)=hash(key)modK

對物理機進行編號0到K-1,根據以上雜湊函式,對於以key為主鍵的某個記錄,H(key)的數值即是物理機在在叢集中的放置位置(編號),Round Robin方法缺乏靈活性,因為一旦叢集中加入了某臺機器或減少某臺機器都會導致整個機器位置的重排。

1.2    虛擬桶

Membase是一個記憶體分散式NoSQL資料庫,對於資料分片管理,其提出了虛擬桶的實現方式,執行機制如圖1-3所示。


,Membase在待儲存記錄的物理機之間引入了虛擬桶層,所有記錄首先通過雜湊函式對映到對應的虛擬桶,記錄和虛擬桶是多對一的關係,即一個虛擬桶包含多條記錄資訊;第二層對映是虛擬桶和物理機之間的對映關係,同樣也是多對一對映,一個物理機可以容納多個虛擬桶,具體實現方式通過查詢表來實現的,即Membase通過記憶體表管理這些對映關係。

對照抽象模型可以看出,Membase的虛擬桶層就是對應資料分片層,一個虛擬桶即是一個數據分片。Key-partition對映採用對映函式。

與Round Roubin相比,Membase引入了虛擬桶層,這樣將原先由記錄直接到物理機的單層對映解耦成兩級對映,大大增加了系統的擴充套件靈活性。當新加入機器時,將某些虛擬桶從原先分配的機器重新分配各機器,只需要修改partition-machine對映表中受影響的個別條目就能實現擴充套件,具有較強的靈活性。

1.3    一致性雜湊(Consistent Hashing)

分散式雜湊表(DHT)是P2P網路和分散式儲存中常見的一項技術,是通過雜湊表的分散式擴充套件,既考慮在多機分散式環境中,每臺機器負責承載部分資料的儲存情形下,如何通過雜湊方式老對資料進行增/刪/改/查等資料操作方法。DHT只是一種技術概念,具體的實現方式有很多種,一致性雜湊是其中一種實現方式,圖1-4是雜湊空間長度為5的二進位制數值(m=5)的一致性雜湊演算法示意圖。


一致性雜湊演算法是建立在一種環狀結構上,在雜湊空間可容納 個長度(0~31)空間裡,每個機器根據IP地址或者埠號經過雜湊函式對映到環內(圖中6個大圓代表機器,後面的數字代表雜湊值,即根據IP地址或者埠號經過雜湊函式計算得出的在環狀空間內的具體位置),而這臺機器則負責儲存落在一段有序雜湊空間內,比如N12節點就儲存雜湊值擴在9~12範圍內的資料,而N5負責儲存雜湊值落在(30~31和0~5)的範圍內的資料。同時,每臺機器還記錄著自己的前驅和後繼節點,是成為一個真正意義上的有向環。

1)  路由問題

a)  直接插畫造法

那麼問題來了,怎樣根據接收到的請求,找到儲存的值呢,拿圖1-4來說,假如有一個請求向N5查詢的主鍵為H(key)=6,因為此雜湊值落在N5和N8之間,所以該請求的值儲存在N8的節點上,即如果雜湊值落在自身管轄的範圍內則在此節點上查詢,否則繼續往後找一隻找到節點Nx x是大於等於待查節點值的最小編號,這樣一圈下來肯定能找到結果。

b)  路由表法

很明顯一種方法缺乏效率,為了加快查詢速度,可以在每個機器節點配置路由表,路由表儲存每個節點到每個除自身節點的距離拿N12來說,路由表如下



  例如表中第三項代表與N12的節點距離為4的雜湊值(12+4=16)落在N17節點身上,同理第五               

  項代表與N12的距離為16的雜湊值落在N29身上,這樣找起來就非常的快速,有了路由表假設

  機器節點Ni接收到了主鍵為key查詢請求,如果H(key)=j不再Ni的管轄範圍,此時該如何 

   操作呢?

2)  一致性雜湊路由演算法

拿具體的節點來說,如圖1-4,假設請求節點N5查詢,把N5的路由表列如下:



 假如請求的主鍵雜湊值為H(key)=24,首先查詢是否在N5的後繼結點上,發現後繼節點N8小於逐漸雜湊值,則根據N5的路由表查詢,發現大於24的最小節點為N29(只有29)(因為5+16=21<24)則在