分布式存储系统设计(2)—— 数据分片
在分布式存儲(chǔ)系統(tǒng)中,數(shù)據(jù)需要分散存儲(chǔ)在多臺(tái)設(shè)備上,數(shù)據(jù)分片(Sharding)就是用來(lái)確定數(shù)據(jù)在多臺(tái)存儲(chǔ)設(shè)備上分布的技術(shù)。數(shù)據(jù)分片要達(dá)到三個(gè)目的:
數(shù)據(jù)分片方法
數(shù)據(jù)分片一般都是使用Key或Key的哈希值來(lái)計(jì)算Key的分布,常見(jiàn)的幾種數(shù)據(jù)分片的方法如下:
通過(guò)上面的對(duì)比,在這個(gè)系統(tǒng)選擇一致性哈希的方法來(lái)進(jìn)行數(shù)據(jù)分片。
虛擬服務(wù)器
為了讓系統(tǒng)有更好的擴(kuò)展性,這里提出存儲(chǔ)層VServer(虛擬服務(wù)器)的概念,一個(gè)VServer是一個(gè)邏輯上的存儲(chǔ)服務(wù)器,是分布式存儲(chǔ)系統(tǒng)的一個(gè)存儲(chǔ)單元,一臺(tái)物理設(shè)備上可以部署多個(gè)VServer,一個(gè)VServer支持一個(gè)寫進(jìn)程和多個(gè)讀進(jìn)程。
通過(guò)VServer的方式,會(huì)有下面一些好處:
一致性哈希的應(yīng)用
數(shù)據(jù)分片是在接口層實(shí)現(xiàn)的,目的是把數(shù)據(jù)均勻地劃分到不同的VServer上。有了接口層的存在,邏輯層尋址就輕量了很多,尋址存儲(chǔ)層VServer的工作全部由接口層負(fù)責(zé),邏輯層只需要隨機(jī)選一個(gè)接口層機(jī)器訪問(wèn)即可。
接口層使用了一致性哈希的割環(huán)算法來(lái)實(shí)現(xiàn)數(shù)據(jù)分片,在割環(huán)算法中,為了讓數(shù)據(jù)均勻分布到各個(gè)VServer,每個(gè)VServer需要有多個(gè)VNode(虛擬節(jié)點(diǎn))。一個(gè)Key尋址的過(guò)程如下圖所示,首先根據(jù)Hash(Key)在哈希環(huán)上找到對(duì)應(yīng)的VNode,在根據(jù)VNode和VServer的映射表確定所屬的VServer。
由上述查找過(guò)程可知,需要事先離線計(jì)算出VNode在哈希環(huán)上的分布、VServer和VNode映射關(guān)系。為了是計(jì)算結(jié)果具有通用性,即在擁有任何數(shù)量VServer的一個(gè)系統(tǒng)都可以使用該結(jié)果得到一致性哈希的映射表,這就要求結(jié)果是與機(jī)器無(wú)關(guān)的,比如不能使用IP來(lái)計(jì)算VNode的哈希值。在計(jì)算前需要確定每個(gè)VServer包含的VNode數(shù)量,以及一個(gè)系統(tǒng)所支持的最大VServer數(shù)量。一個(gè)簡(jiǎn)單的方法是類似上文鏈接中提到的方法,但不能和IP相關(guān),可以改用VServer和VNode的編號(hào)來(lái)計(jì)算哈希值,如Hash("1#1"),Hash("1#2")… 這種方法要求一個(gè)VServer包含的VNode的數(shù)量比較多,大概需要500個(gè)才能使各個(gè)VServer上的數(shù)據(jù)比較均勻。當(dāng)然還有其他的一些方法做到一個(gè)VServer上包含更少的VNode數(shù)量,并且讓數(shù)據(jù)分布偏差在一定范圍內(nèi)。
Google提出了一種新的一致性哈希算法Jump Consistent Hash,此算法零內(nèi)存消耗,均勻分配,快速,并且只有5行代碼,優(yōu)勢(shì)非常明顯,詳細(xì)介紹見(jiàn)此處http://my.oschina.net/u/658658/blog/424161。和上面介紹的方法相比,一個(gè)最大的不同點(diǎn)是,在擴(kuò)容重新分布數(shù)據(jù)時(shí),在上面的方法中,新機(jī)器的一個(gè)VNode上的數(shù)據(jù)只會(huì)來(lái)自一個(gè)老機(jī)器上的VNode,而這種方法是會(huì)來(lái)自所有老機(jī)器上的VNode。這個(gè)問(wèn)題可能會(huì)導(dǎo)致一些設(shè)計(jì)上復(fù)雜化,所以使用的時(shí)候要慎重考慮。
轉(zhuǎn)載于:https://www.cnblogs.com/glacierh/p/5653512.html
總結(jié)
以上是生活随笔為你收集整理的分布式存储系统设计(2)—— 数据分片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BootStrap 杂记
- 下一篇: anaconda镜像