精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

云存儲(chǔ)的故事——元數(shù)據(jù)歸來(lái)

系統(tǒng)
云存儲(chǔ)服務(wù)是云計(jì)算的重要組成部分。技術(shù)上,云存儲(chǔ)屬于大型分布式在線存儲(chǔ)范疇。云存儲(chǔ)是一大類(lèi)特殊的共享存儲(chǔ)。作為提供存儲(chǔ)資源的服務(wù),云存儲(chǔ)需要保證用戶(hù)存放的數(shù)據(jù)可靠,不丟失。同時(shí),云存儲(chǔ)必須確保實(shí)時(shí)在線,任何宕機(jī)都會(huì)給用戶(hù)造成損失。因而,云存儲(chǔ)的基本要求是高可靠和高可用。此外,云存儲(chǔ)是海量數(shù)據(jù)的存儲(chǔ),規(guī)模巨大。而且,出于成本和現(xiàn)金流量的考慮,云存儲(chǔ)的集群規(guī)模必須隨著用戶(hù)數(shù)據(jù)量的不斷增加而擴(kuò)展。云存儲(chǔ)的架構(gòu),設(shè)計(jì)和技術(shù)運(yùn)用都是圍繞這四個(gè)基本要求展開(kāi)。反之,無(wú)論多么漂亮先進(jìn)的技術(shù),只要可能影響這些目標(biāo)

云存儲(chǔ)服務(wù)是云計(jì)算的重要組成部分。技術(shù)上,云存儲(chǔ)屬于大型分布式在線存儲(chǔ)范疇。云存儲(chǔ)是一大類(lèi)特殊的共享存儲(chǔ)。作為提供存儲(chǔ)資源的服務(wù),云存儲(chǔ)需要保證用戶(hù)存放的數(shù)據(jù)可靠,不丟失。同時(shí),云存儲(chǔ)必須確保實(shí)時(shí)在線,任何宕機(jī)都會(huì)給用戶(hù)造成損失。因而,云存儲(chǔ)的基本要求是高可靠和高可用。此外,云存儲(chǔ)是海量數(shù)據(jù)的存儲(chǔ),規(guī)模巨大。而且,出于成本和現(xiàn)金流量的考慮,云存儲(chǔ)的集群規(guī)模必須隨著用戶(hù)數(shù)據(jù)量的不斷增加而擴(kuò)展。云存儲(chǔ)的架構(gòu),設(shè)計(jì)和技術(shù)運(yùn)用都是圍繞這四個(gè)基本要求展開(kāi)。反之,無(wú)論多么漂亮先進(jìn)的技術(shù),只要可能影響這些目標(biāo)的實(shí)現(xiàn),都不能應(yīng)用于云存儲(chǔ)。

在我開(kāi)始接觸存儲(chǔ)的時(shí)候,一致性哈希(以及著名的Dynamo)是非常熱門(mén)的技術(shù)。技術(shù)上一致性哈希很漂亮,簡(jiǎn)潔,并且高效。但在實(shí)際應(yīng)用中,卻是另一種表現(xiàn)。本文將對(duì)集中式的元數(shù)據(jù)存儲(chǔ)方案和一致性哈希作對(duì)比分析,以期說(shuō)明元數(shù)據(jù)是更加適合云存儲(chǔ)的選擇。

1. 對(duì)象存儲(chǔ),塊存儲(chǔ)

實(shí)用的云存儲(chǔ)可以分作兩類(lèi):對(duì)象存儲(chǔ)和塊存儲(chǔ)。對(duì)象存儲(chǔ)存儲(chǔ)是地道的數(shù)據(jù)倉(cāng)儲(chǔ),僅僅存放key/value數(shù)據(jù):用戶(hù)有一個(gè)數(shù)據(jù)對(duì)象,需要存儲(chǔ)起來(lái),他就給這個(gè)對(duì)象起一個(gè)名字(key),然后將對(duì)象連同名字一起存放入對(duì)象存儲(chǔ)。當(dāng)需要的時(shí)候,用這個(gè)名字作為key,向存儲(chǔ)系統(tǒng)索要。而對(duì)象存儲(chǔ)系統(tǒng)必須在需要的時(shí)候?qū)?shù)據(jù)返還給用戶(hù),除非用戶(hù)已將此數(shù)據(jù)從存儲(chǔ)系統(tǒng)中刪除。

塊存儲(chǔ)則是充當(dāng)操作系統(tǒng)底下的塊設(shè)備(籠統(tǒng)地說(shuō),就是磁盤(pán)),供系統(tǒng)使用。塊存儲(chǔ)實(shí)際上就是一種SAN(Storage Attach Network),將集群的存儲(chǔ)空間分配給用戶(hù),掛載到操作系統(tǒng),作為磁盤(pán)使用。因?yàn)閴K存儲(chǔ)需要模擬磁盤(pán)的行為,因此必須確保低延遲。

盡管兩種云存儲(chǔ)有完全不同的目標(biāo)、用途和特性,但在分布式存儲(chǔ)基本特性方面都面臨著相同的問(wèn)題,這里的討論對(duì)兩者都有意義。為了簡(jiǎn)便起見(jiàn),這里只討論對(duì)象存儲(chǔ)的情況。但很多內(nèi)容和結(jié)論可以外推到塊存儲(chǔ)。

2. 存儲(chǔ)的基礎(chǔ)

云存儲(chǔ)功能非常簡(jiǎn)單,存儲(chǔ)用戶(hù)的數(shù)據(jù)而已。但簡(jiǎn)單歸簡(jiǎn)單,幾個(gè)要點(diǎn)還是需要做的。當(dāng)用戶(hù)將一個(gè)key-value對(duì)上傳至存儲(chǔ)時(shí),存儲(chǔ)系統(tǒng)必須找合適的服務(wù)器,保存數(shù)據(jù)。通常會(huì)保存在多臺(tái)服務(wù)器上,以防止數(shù)據(jù)丟失。這叫多副本。

于是,一個(gè)關(guān)鍵的問(wèn)題就是如何選擇存放數(shù)據(jù)的服務(wù)器。服務(wù)器的選擇是很有技術(shù)含量的事,需要兼顧到幾個(gè)要點(diǎn):首先,數(shù)據(jù)必須在服務(wù)器之間平衡。不能把數(shù)據(jù)集中到少數(shù)幾臺(tái)服務(wù)器,造成一部分服務(wù)器撐死,而另一部分餓死。其次,在用戶(hù)讀取數(shù)據(jù)時(shí),可以方便快捷定位。隨后,滿足云存儲(chǔ)服務(wù)高可靠高可用大規(guī)模的特點(diǎn)。***,盡可能簡(jiǎn)單。

于是,對(duì)于每個(gè)對(duì)象,都有一個(gè)key到數(shù)據(jù)存儲(chǔ)位置的映射: key->pos。映射方式很多,最直接的,就是將每一個(gè)對(duì)象的key->pos數(shù)據(jù)對(duì)保存下來(lái)。這些數(shù)據(jù)通常被稱(chēng)為"元數(shù)據(jù)"。

但還有一些更巧妙的方式:根據(jù)key的特征,將key空間劃分成若干分組,并將這些分組對(duì)應(yīng)到不同的存儲(chǔ)節(jié)點(diǎn)上。這種方式可以籠統(tǒng)地成為”Sharding"。如此,可以直接按照一個(gè)簡(jiǎn)單規(guī)則定位到服務(wù)器。常用的分組方式之一是按key的區(qū)間劃分,比如a開(kāi)頭的是一組,b開(kāi)頭的是一組等等。而另一種更具"現(xiàn)代感"的分組方式,就是對(duì)key哈希后取模。哈希方案實(shí)際上就是哈希表的自然延伸,將桶分布到多臺(tái)服務(wù)器中。

這兩大類(lèi)映射方式實(shí)質(zhì)上是在不同的粒度上進(jìn)行映射。"元數(shù)據(jù)"在對(duì)象粒度上,而sharding則是在一組對(duì)象的粒度。這兩種不同的粒度,決定了它們有著完全不同的特性。也決定了它們?cè)趯?shí)際應(yīng)用中的表現(xiàn)。#p#

3. 元數(shù)據(jù)和一致性哈希

于是,在云存儲(chǔ)方案中產(chǎn)生了兩大流派:元數(shù)據(jù)模型和Sharding模型。而Sharding模型中,一致性哈希最為流行。一致性哈希本身很難直接用作實(shí)際使用,進(jìn)而產(chǎn)生了很多衍生方案,其中包括著名的"Dynamo"。這里用“一致性哈希方案”指代所有基于一致性哈希的設(shè)計(jì)。

元數(shù)據(jù)方案是對(duì)象級(jí)別的key->pos映射,也就是一個(gè)會(huì)無(wú)休止增長(zhǎng)的"map"。每多一個(gè)對(duì)象,就會(huì)多一條元數(shù)據(jù)。通常會(huì)將元數(shù)據(jù)保存在一組數(shù)據(jù)庫(kù)中,方便檢索和查詢(xún)。元數(shù)據(jù)方案沒(méi)有什么特別的地方,其核心是元數(shù)據(jù)存儲(chǔ)部分。這部分設(shè)計(jì)的好壞,關(guān)系到系統(tǒng)整體的特性。關(guān)于元數(shù)據(jù)存儲(chǔ)的設(shè)計(jì)不是本文的重點(diǎn),本文將集中探討元數(shù)據(jù)方案和一致性哈希方案的比較。

標(biāo)準(zhǔn)的一致性哈希模型是對(duì)key進(jìn)行哈希運(yùn)算,然后投射到一個(gè)環(huán)形的數(shù)值空間上。與此同時(shí),對(duì)節(jié)點(diǎn)(存儲(chǔ)服務(wù)器)進(jìn)行編碼,然后也做哈希運(yùn)算,并投射到哈希環(huán)上。理論上,只要哈希算法合適,節(jié)點(diǎn)可以均勻地分布在哈希環(huán)上。節(jié)點(diǎn)根據(jù)自身在哈希環(huán)上的位置,占據(jù)一個(gè)哈希值區(qū)間,比如從本節(jié)點(diǎn)到下一個(gè)節(jié)點(diǎn)間的區(qū)間。所有落入這個(gè)區(qū)間的key,都保存到該節(jié)點(diǎn)上。

在這個(gè)模型中,key到數(shù)據(jù)存儲(chǔ)邏輯位置的映射不通過(guò)存儲(chǔ),而是通過(guò)算法直接得到。但是,邏輯位置(哈希環(huán)上的位置)到物理位置(節(jié)點(diǎn))的轉(zhuǎn)換無(wú)法直接得到。標(biāo)準(zhǔn)的做法是任選一個(gè)節(jié)點(diǎn),然后順序?qū)ふ夷繕?biāo)節(jié)點(diǎn),或者采用二分法在節(jié)點(diǎn)之間跳轉(zhuǎn)查找。這種查找方式在實(shí)際的存儲(chǔ)系統(tǒng)中是無(wú)法忍受的。所以,實(shí)用的存儲(chǔ)系統(tǒng)往往采用的是一個(gè)混合模型(暫且稱(chēng)之為“混合方案”):系統(tǒng)維護(hù)一個(gè)哈希區(qū)間->節(jié)點(diǎn)的映射表。這個(gè)映射本質(zhì)上也是一種元數(shù)據(jù),但是它是大粒度的元數(shù)據(jù),更像是一個(gè)路由表。由于粒度大,變化很少,所以即便用文本文件都可以。這個(gè)映射表也需要多份,通常可以存放在入口服務(wù)器上,也可以分散到所有的存儲(chǔ)節(jié)點(diǎn)上,關(guān)鍵是保持一致即可,這相對(duì)容易。

一致性哈希解決了標(biāo)準(zhǔn)哈希表改變大小時(shí)需要重新計(jì)算,并且遷移所有數(shù)據(jù)的問(wèn)題,只需遷移被新加節(jié)點(diǎn)占據(jù)的哈希區(qū)間所包含的數(shù)據(jù)。但是,隨著新節(jié)點(diǎn)的加入,數(shù)據(jù)量的分布會(huì)變得不均勻。為了解決這個(gè)問(wèn)題,包括Dynamo在內(nèi)的諸多模型,都采用了"虛擬結(jié)點(diǎn)"的方案:將一個(gè)節(jié)點(diǎn)分成若干虛擬節(jié)點(diǎn)。當(dāng)節(jié)點(diǎn)加入系統(tǒng)時(shí),把虛擬節(jié)點(diǎn)分散到哈希環(huán)上,如此可以更加"均勻地"添加一個(gè)節(jié)點(diǎn)。

一致性哈希及其衍生方案,將數(shù)據(jù)按一定規(guī)則分片,按一定規(guī)則將分片后的數(shù)據(jù)映射到相應(yīng)的存儲(chǔ)服務(wù)器上。因此,它只需要維護(hù)一個(gè)算法,或者一個(gè)簡(jiǎn)單的映射表,便可直接定位數(shù)據(jù)。更加簡(jiǎn)單,并且由于少了查詢(xún)?cè)獢?shù)據(jù),性能上也更有優(yōu)勢(shì)。

但是,這只是理論上的。

如果我們只考慮存儲(chǔ)的功能(get,put,delete),一致性哈希非常***。但實(shí)際情況是,真正主宰云存儲(chǔ)架構(gòu)的,是那些非功能性需求:

1、 大規(guī)模和擴(kuò)展性

2、 可靠性和一致性

3、 可用性和可管理

4、 性能

在實(shí)際的云存儲(chǔ)系統(tǒng)中,非功能需求反而主導(dǎo)了架構(gòu)和設(shè)計(jì)。并且對(duì)key-pos映射的選擇起到?jīng)Q定性的作用。

4 規(guī)模和擴(kuò)展

首先,云存儲(chǔ)最明顯的特點(diǎn)是規(guī)模巨大。對(duì)于一個(gè)公有云存儲(chǔ)服務(wù),容納用戶(hù)數(shù)據(jù)是沒(méi)有限度的。不可能以"容量已滿"作為理由,拒絕用戶(hù)存放數(shù)據(jù)。因此,云存儲(chǔ)是“規(guī)模無(wú)限”的。意思就是說(shuō),云存儲(chǔ)系統(tǒng),必須保證任何時(shí)候都能夠隨意擴(kuò)容,而不會(huì)影響服務(wù)。

另一方面,云存儲(chǔ)作為服務(wù),都是由小到大。一開(kāi)始便部署幾千臺(tái)服務(wù)器,幾十P的容量,毫無(wú)意義。資源會(huì)被閑置而造成浪費(fèi),對(duì)成本和現(xiàn)金流量產(chǎn)生很大的負(fù)面作用。通常,我們只會(huì)部署一個(gè)小規(guī)模的系統(tǒng),滿足初始的容量需求。然后,根據(jù)需求增長(zhǎng)的情況,逐步擴(kuò)容。

于是,云存儲(chǔ)系統(tǒng)必須是高度可擴(kuò)展的。

面對(duì)擴(kuò)展,元數(shù)據(jù)方案沒(méi)有什么困難。當(dāng)節(jié)點(diǎn)增加時(shí),系統(tǒng)可以更多地將新來(lái)的寫(xiě)請(qǐng)求引導(dǎo)到新加入的節(jié)點(diǎn)。合適的調(diào)度平衡策略可以確保系統(tǒng)平衡地使用各節(jié)點(diǎn)的存儲(chǔ)空間。

但對(duì)于一致性哈希和它的衍生方案而言,卻麻煩很多。原始的哈希表一旦需要擴(kuò)容,需要rehash。在基于哈希的分布式存儲(chǔ)系統(tǒng)中,這就意味著所有數(shù)據(jù)都必須重新遷移一遍。這當(dāng)然無(wú)法忍受的。一致性哈希的出現(xiàn),便可以解決此問(wèn)題。由于對(duì)象和服務(wù)器都映射到哈希環(huán)上,當(dāng)新節(jié)點(diǎn)加入后,同樣會(huì)映射到哈希環(huán)上。原來(lái)的區(qū)段會(huì)被新節(jié)點(diǎn)截?cái)啵录尤氲墓?jié)點(diǎn),會(huì)占據(jù)被切割出來(lái)的哈希值區(qū)間。為了完成這個(gè)轉(zhuǎn)換,這部分?jǐn)?shù)據(jù)需要遷移到新服務(wù)器上。相比原始的哈希,一致性哈希只需要傳輸被新服務(wù)器搶走的那部分?jǐn)?shù)據(jù)。

但是終究需要進(jìn)行數(shù)據(jù)遷移。數(shù)據(jù)遷移并非像看上去那樣,僅僅是從一臺(tái)服務(wù)器向另一臺(tái)服務(wù)器復(fù)制數(shù)據(jù)。云存儲(chǔ)是一個(gè)在線系統(tǒng),數(shù)據(jù)遷移不能影響系統(tǒng)的服務(wù)。但遷移數(shù)據(jù)需要時(shí)間,為了確保數(shù)據(jù)訪問(wèn)的延續(xù)性,在遷移開(kāi)始時(shí),寫(xiě)入操作被引導(dǎo)到目標(biāo)服務(wù)器,而源節(jié)點(diǎn)的待遷移部分切換至只讀狀態(tài)。與此同時(shí),開(kāi)始從源節(jié)點(diǎn)遷移數(shù)據(jù)。當(dāng)用戶(hù)試圖讀取遷移范圍內(nèi)的數(shù)據(jù)時(shí),需要嘗試在源和目標(biāo)節(jié)點(diǎn)分別讀取。這種單寫(xiě)雙讀的模式可以保證服務(wù)不受影響。但是,必須控制數(shù)據(jù)遷移的速率。如果遷移操作將磁盤(pán)吞吐能力跑滿,或者網(wǎng)絡(luò)帶寬耗盡,服務(wù)必然受到影響。

另一個(gè)問(wèn)題是,除非成倍地增加節(jié)點(diǎn),否則會(huì)存在數(shù)據(jù)不平衡的問(wèn)題。為了平衡數(shù)據(jù),需要遷移更多的數(shù)據(jù),每臺(tái)節(jié)點(diǎn)都需要遷出一些,以確保每個(gè)節(jié)點(diǎn)的數(shù)據(jù)量都差不多。虛擬節(jié)點(diǎn)的引入便是起到這個(gè)作用。于是實(shí)際的數(shù)據(jù)遷移量同增加的容量數(shù)成正比,系數(shù)是當(dāng)前存儲(chǔ)系統(tǒng)的空間使用率。

于是,一個(gè)1P的系統(tǒng),三副本,70%的消耗,擴(kuò)容200T,那么需要遷移大約140T*3=420T的數(shù)據(jù),才能使數(shù)據(jù)存儲(chǔ)量得到平衡。如果使用現(xiàn)在常用的存儲(chǔ)服務(wù)器(2T*12),需要新增21臺(tái)。如果它們都并發(fā)起來(lái)參與遷移,單臺(tái)遷移速率不超過(guò)50MBps,那么這次擴(kuò)容所需的時(shí)間為420T/(50M*21)=400000秒,大約4.6天。這是理想狀況,包括軟硬件異常,用戶(hù)訪問(wèn)壓力,遷移后的檢驗(yàn)等情況,都會(huì)延長(zhǎng)遷移時(shí)間。很可能十天半月泡在這些任務(wù)上。而在數(shù)據(jù)遷移完成,老服務(wù)器的存儲(chǔ)空間回收出來(lái)之前,實(shí)際上并未擴(kuò)容。那么萬(wàn)一擴(kuò)容實(shí)在系統(tǒng)空間即將耗盡時(shí)進(jìn)行,(別說(shuō)這事不會(huì)碰到,一個(gè)懶散的供貨商,或者廠家被水淹,都可能讓這種事情發(fā)生。云計(jì)算什么事都會(huì)遇到),那么很可能會(huì)因?yàn)閬?lái)不及完成擴(kuò)容而使系統(tǒng)停服。云存儲(chǔ),特別是公有云存儲(chǔ),擴(kuò)容必須是快速而便捷的。

更復(fù)雜的情況是遷移過(guò)程中出錯(cuò),硬件失效等異常情況的處理過(guò)程會(huì)很復(fù)雜,因?yàn)榇藭r(shí)數(shù)據(jù)分布處于一種中間狀態(tài),后續(xù)處理必須確保系統(tǒng)數(shù)據(jù)安全一致。

系統(tǒng)的擴(kuò)容規(guī)模越大,困難程度越大。當(dāng)系統(tǒng)有100P的規(guī)模(很多系統(tǒng)宣稱(chēng)可以達(dá)到的規(guī)模),而用戶(hù)數(shù)據(jù)增長(zhǎng)迅猛(公有云存儲(chǔ)有明顯的馬太效應(yīng),規(guī)模越大,增長(zhǎng)越快),在幾百上千臺(tái)服務(wù)器之間遷移成P的數(shù)據(jù),是多么駭人的場(chǎng)景。

數(shù)據(jù)遷移會(huì)消耗網(wǎng)絡(luò)帶寬,吃掉磁盤(pán)負(fù)載,攪亂服務(wù)器的cache等等,都是云存儲(chǔ)的大忌,能不做盡量不做。

元數(shù)據(jù)方案一般情況下不需要做遷移。遷移只有存儲(chǔ)服務(wù)器新舊更替,或者租借的服務(wù)器到期歸還時(shí)進(jìn)行。由于數(shù)據(jù)對(duì)象可以放置在任何節(jié)點(diǎn)上,因而可以把一臺(tái)節(jié)點(diǎn)需要遷移的數(shù)據(jù)分散到其他節(jié)點(diǎn)上。并且可以從其他副本那里多對(duì)多并發(fā)地傳輸數(shù)據(jù)。負(fù)載被分散到整個(gè)集群,對(duì)服務(wù)的影響更小,也更快捷。實(shí)際上,這個(gè)邏輯和數(shù)據(jù)副本修復(fù)是一樣的。

很顯然,相比一致性哈希方案動(dòng)不動(dòng)來(lái)回遷移數(shù)據(jù)的做法,元數(shù)據(jù)方案提供一個(gè)動(dòng)態(tài)平衡的機(jī)制,可以無(wú)需數(shù)據(jù)遷移,服務(wù)器一旦加入集群,可以立刻生效,實(shí)現(xiàn)平靜地?cái)U(kuò)容。#p#

5 可靠性和一致性

可靠性(本文特指數(shù)據(jù)的可靠性,即不丟失數(shù)據(jù))無(wú)疑是云存儲(chǔ)的根本。用戶(hù)將數(shù)據(jù)托付給你,自然不希望隨隨便便地丟失。維持可靠性是云存儲(chǔ)最困難的部分。(當(dāng)然,更難的是在保持高可靠性的前提下確保高可用)。

在任何一個(gè)系統(tǒng)中,硬件和軟件都無(wú)法保障完全可靠。芯片會(huì)被燒毀,電路可能短路,電壓可能波動(dòng),老鼠可能咬斷網(wǎng)線,供電可能中斷,軟件會(huì)有bug,甚至宇宙射線會(huì)干擾寄存器…。作為存儲(chǔ)的核心部件,硬盤(pán)反而更加脆弱。在標(biāo)準(zhǔn)的服務(wù)器中,除了光驅(qū)和風(fēng)扇以外,硬盤(pán)是唯一的機(jī)電元件。由于存在活動(dòng)部件,其可靠性不如固態(tài)電路,更容易受到外界的干擾。所以,硬盤(pán)時(shí)常被看作消耗品。在一個(gè)有幾萬(wàn)塊硬盤(pán)的存儲(chǔ)集群中,每周壞上幾塊硬盤(pán)是再尋常不過(guò)的事。運(yùn)氣不好的時(shí)候,一天中都可能壞上2、3塊。

因此,只把數(shù)據(jù)保存在一塊盤(pán)中是無(wú)法保障數(shù)據(jù)可靠的。通常我們都會(huì)將數(shù)據(jù)在不同的服務(wù)器上保存多份,稱(chēng)之為“副本”。原則上,副本越多,越可靠。但是,過(guò)多的副本會(huì)造成存儲(chǔ)成本的增加,并且降低性能,增加維持一致性的難度。一般會(huì)保持3副本,是一個(gè)比較均衡的數(shù)字。

但是,在確定的副本數(shù)下,真正對(duì)可靠性起到關(guān)鍵作用的,是副本丟失后的恢復(fù)速度。比如,一個(gè)3副本存儲(chǔ)系統(tǒng)中,當(dāng)一個(gè)磁盤(pán)損壞后,它所承載的數(shù)據(jù)對(duì)象就只剩2個(gè)副本了。在這塊盤(pán)修復(fù)之前,如果再壞一塊盤(pán),恰巧和尚未修復(fù)的盤(pán)有共同的數(shù)據(jù)對(duì)象,那么這些數(shù)據(jù)就只剩一個(gè)副本在支撐著,這是非常危險(xiǎn)的狀態(tài)。更有甚者,一個(gè)3副本的存儲(chǔ)系統(tǒng),在運(yùn)行過(guò)程中,即便沒(méi)有硬盤(pán)損壞,總會(huì)有一些對(duì)象由于種種原因處于兩副本狀態(tài),尚未來(lái)得及修復(fù)。比如寫(xiě)入數(shù)據(jù)時(shí),有一個(gè)副本寫(xiě)完后發(fā)現(xiàn)校驗(yàn)碼不對(duì),需要重寫(xiě)。此時(shí),如果一塊盤(pán)損壞了,上面正好有這些2副本的對(duì)象。于是,從這一刻開(kāi)始,這個(gè)對(duì)象只有1副本。壞盤(pán)上的數(shù)據(jù)被修復(fù)之前,另一塊盤(pán)包含此對(duì)象的硬盤(pán)也壞了,那么數(shù)據(jù)就丟了。盡管這種概率很小,但是云存儲(chǔ)系統(tǒng)是經(jīng)年累月地運(yùn)行,大規(guī)模加上長(zhǎng)時(shí)間,任何小概率事件都會(huì)發(fā)生。而且在實(shí)際運(yùn)行的系統(tǒng)中,很多因素會(huì)導(dǎo)致硬盤(pán)壽命遠(yuǎn)小于理論值,比如機(jī)架震動(dòng)、電源不穩(wěn)、意外失電、輻射等等。而且,對(duì)于成批采購(gòu)的硬盤(pán),通常都會(huì)集中在一段時(shí)間內(nèi)一起進(jìn)入失效期,多塊磁盤(pán)同時(shí)損壞的概率會(huì)大幅提高。

如果數(shù)據(jù)修復(fù)的速度足夠快,可以搶在另一塊盤(pán)損壞之前,修復(fù)丟失的副本,那么數(shù)據(jù)丟失的概率會(huì)大大減小。(嚴(yán)格地講,無(wú)論修復(fù)時(shí)間有多短,在修復(fù)期間壞第二塊盤(pán)的概率始終存在,只是修復(fù)時(shí)間越短,這個(gè)概率越小。關(guān)鍵是要讓它小到我們可以接受的程度)。

一致性哈希方案中,如果將一塊磁盤(pán)同一個(gè)hash區(qū)間一一綁定。因此,數(shù)據(jù)恢復(fù)時(shí),只能先更換壞盤(pán),然后從其他副本處讀取數(shù)據(jù),寫(xiě)入新磁盤(pán)。但是,磁盤(pán)的持續(xù)寫(xiě)入能力通常也只有50-60MBps。如果是一塊有1.5T數(shù)據(jù)的硬盤(pán)失效,那么恢復(fù)起來(lái)至少需要30000秒,將近9個(gè)小時(shí)。考慮到服務(wù)器的整體負(fù)載和網(wǎng)絡(luò)狀況,時(shí)間可能會(huì)接近12小時(shí)。在這個(gè)時(shí)間尺度里,第二塊盤(pán),甚至第三塊盤(pán)損壞的概率還是相當(dāng)大的。而且,硬盤(pán)更換的時(shí)間取決于機(jī)房管理的響應(yīng)能力,這往往是一個(gè)薄弱環(huán)節(jié)。

如果方案中讓節(jié)點(diǎn)同hash區(qū)間一一對(duì)應(yīng),在節(jié)點(diǎn)內(nèi)部,再將數(shù)據(jù)分散存儲(chǔ)到一塊磁盤(pán)中,那么當(dāng)需要恢復(fù)副本時(shí),節(jié)點(diǎn)將損壞的磁盤(pán)上的數(shù)據(jù)對(duì)象分散存放到其他磁盤(pán)上。這樣,可以先發(fā)起修復(fù),從其他副本那里都到數(shù)據(jù),并發(fā)地向多個(gè)磁盤(pán)恢復(fù)數(shù)據(jù),磁盤(pán)的吞吐限制會(huì)得到緩解。但問(wèn)題的解決并不徹底。首先,網(wǎng)絡(luò)會(huì)成為瓶頸。1個(gè)千兆網(wǎng)口最多支持到120MBps,這個(gè)速率也僅僅比磁盤(pán)快一倍,而且實(shí)際使用中也不能將帶寬全部用光,否則影響服務(wù),畢竟其他硬盤(pán)還是好的,還需要正常工作。原則上可以通過(guò)增加網(wǎng)口數(shù)量拓寬吞吐量,但這增加了網(wǎng)絡(luò)設(shè)備方面的成本。而且這也僅僅是增加3、4倍的吞吐能力,我們真正需要的是近10倍地縮小恢復(fù)時(shí)間。至于光纖,那不是普通公有云存儲(chǔ)所能奢望的。即便網(wǎng)絡(luò)吞吐問(wèn)題解決了,還有一個(gè)更核心的問(wèn)題。因?yàn)閿?shù)據(jù)在節(jié)點(diǎn)內(nèi)部任意分散到各磁盤(pán)上,那么節(jié)點(diǎn)就需要維護(hù)一個(gè)key->磁盤(pán)的映射,也就是節(jié)點(diǎn)內(nèi)的局部元數(shù)據(jù)。這個(gè)元數(shù)據(jù)需要服務(wù)器自己維護(hù),由于單臺(tái)服務(wù)器的資源有限,元數(shù)據(jù)的可靠性、可用性和一致性的維持非常麻煩。一套存儲(chǔ)一套元數(shù)據(jù)存儲(chǔ)已經(jīng)夠麻煩的了,何況每個(gè)節(jié)點(diǎn)一套元數(shù)據(jù)。一旦這個(gè)元數(shù)據(jù)丟失了,這個(gè)節(jié)點(diǎn)上所有的數(shù)據(jù)都找不到了。理論上,這個(gè)元數(shù)據(jù)丟失了,也不會(huì)影響全局,可以利用一致性哈希算法到其他副本那里恢復(fù)出丟失的數(shù)據(jù)。但不得不將原來(lái)服務(wù)器上的所有數(shù)據(jù)都傳輸一遍,這個(gè)數(shù)據(jù)量往往有一二十T,恢復(fù)起來(lái)更困難。更現(xiàn)實(shí)的做法是直接掃描各磁盤(pán),逆向地重建元數(shù)據(jù)。當(dāng)然,這將是一個(gè)漫長(zhǎng)的過(guò)程,期間整臺(tái)節(jié)點(diǎn)是不可用的,此間發(fā)生的寫(xiě)入操作還需的事后重新恢復(fù)(具體參見(jiàn)本文“可用性”部分)。

副本恢復(fù)最快,影響最小的方法就是,不讓數(shù)據(jù)對(duì)象副本綁死在一臺(tái)節(jié)點(diǎn)上,只要數(shù)據(jù)對(duì)象可以存放到任意一臺(tái)節(jié)點(diǎn),那么便可以在節(jié)點(diǎn)之間做多對(duì)多的數(shù)據(jù)副本恢復(fù)。集群規(guī)模越大,速度越快,效果越好。基于元數(shù)據(jù)的方案,每一個(gè)對(duì)象同節(jié)點(diǎn),乃至硬盤(pán)的映射是任意的,在副本恢復(fù)方面,有得天獨(dú)厚的優(yōu)勢(shì)。而一致性哈希嚴(yán)格地將數(shù)據(jù)同節(jié)點(diǎn)或磁盤(pán)綁定,迫使這種并發(fā)無(wú)法進(jìn)行。

有一些基于混合方案的衍生方案可以解決一致性哈希在副本修復(fù)速度問(wèn)題:將哈希環(huán)劃分成若干slot(bucket,或者其他類(lèi)似的稱(chēng)謂),數(shù)量遠(yuǎn)遠(yuǎn)大于將來(lái)集群可能擁有的節(jié)點(diǎn)數(shù),或磁盤(pán)數(shù)。(好吧,我們說(shuō)過(guò)規(guī)模無(wú)限,無(wú)限自然不可能,只要足夠大就行了,比如2^32)。slot到節(jié)點(diǎn)或者磁盤(pán)的映射,通過(guò)一個(gè)映射表維護(hù)。各副本集群中的slot分布互不相同。當(dāng)一個(gè)磁盤(pán)損壞時(shí),找出所包含的slot,將這些slot分散到其他節(jié)點(diǎn)和磁盤(pán)上去,這樣便可以并發(fā)地從其他節(jié)點(diǎn)以slot為單位恢復(fù)副本。在損壞磁盤(pán)更換之后,再將一些slot,可以是原來(lái)的,也可以是隨意的,遷移到新硬盤(pán),以平衡整體的數(shù)據(jù)分布。遷移的時(shí)候,副本已經(jīng)恢復(fù),遷移操作的時(shí)間壓力就很小了,可以慢慢來(lái),磁盤(pán)吞吐的瓶頸也不會(huì)有什么的影響。

但相比之下,元數(shù)據(jù)方案修復(fù)副本之后不存在數(shù)據(jù)遷移這一步,在這方面對(duì)象級(jí)元數(shù)據(jù)的存在使副本恢復(fù)簡(jiǎn)單很多。

同數(shù)據(jù)可靠性相關(guān)的一個(gè)問(wèn)題是一致性。一致性問(wèn)題可以看作可靠性問(wèn)題的一個(gè)部分。因?yàn)楫?dāng)各副本的數(shù)據(jù)版本不一致時(shí),便意味著數(shù)據(jù)對(duì)象的當(dāng)前版本是缺少副本的。(實(shí)際上,從存儲(chǔ)角度來(lái)講,一個(gè)數(shù)據(jù)對(duì)象的不同版本,就是不同的數(shù)據(jù))。確保一個(gè)數(shù)據(jù)對(duì)象的一致性最實(shí)用的方法是所謂W+R>N。即N個(gè)副本中,一個(gè)版本寫(xiě)入時(shí)確保有W個(gè)成功,而讀取時(shí)確保有R個(gè)成功,只要滿足W+R>N的情況,便可以保證始終可以讀到***寫(xiě)入成功的版本。

W+R>N的使用有一個(gè)問(wèn)題,需要并發(fā)地從所有副本上嘗試讀取數(shù)據(jù),然后通過(guò)讀取的數(shù)據(jù)對(duì)象版本(或者時(shí)間戳)的比對(duì),以確定是否滿足一致性公式的要求。如果所讀取的數(shù)據(jù)有幾十上百M(fèi)B,甚至上G的對(duì)象,一口氣讀出所有副本,而最終只取其中一個(gè),著實(shí)浪費(fèi),系統(tǒng)壓力會(huì)整整大上N倍。解決的方法是先做一次預(yù)讀,讀出所有副本的版本信息,進(jìn)行一致性比對(duì),確定有效副本后,再行數(shù)據(jù)本身的讀取。

元數(shù)據(jù)方案在一致性上簡(jiǎn)單的多。元數(shù)據(jù)為了保證可靠,也會(huì)使用多副本。因?yàn)樵獢?shù)據(jù)很小,可以保持更多的副本數(shù),比如5個(gè),甚至7個(gè)。如此多的副本,基本上不必?fù)?dān)心其可靠性。重點(diǎn)在于一致性。同樣也是采用W+R>N的策略,但卻將元數(shù)據(jù)讀取和一致性保障在一次訪問(wèn)中解決。對(duì)于數(shù)據(jù)存儲(chǔ)服務(wù)器而言,任務(wù)更多地是在保障每一個(gè)副本和版本的完整。

隨著時(shí)間的推移,數(shù)據(jù)會(huì)發(fā)生退化,有各種原因造成副本的丟失。一致性也是一樣。對(duì)于熱數(shù)據(jù),經(jīng)常被訪問(wèn),存儲(chǔ)數(shù)據(jù)出錯(cuò)很快就會(huì)發(fā)現(xiàn)。但冷數(shù)據(jù)需要依靠定期檢查發(fā)現(xiàn)錯(cuò)誤。這個(gè)核對(duì)工作在元數(shù)據(jù)方案里,就是比對(duì)元數(shù)據(jù)和節(jié)點(diǎn)的每個(gè)盤(pán)上的對(duì)象清單,元數(shù)據(jù)保存的永遠(yuǎn)是***版本,只要不匹配,就可以認(rèn)定出錯(cuò),立刻加以修復(fù)。但在一致性哈希方案中,需要交叉核對(duì)一個(gè)哈希區(qū)間的三個(gè)副本所包含的對(duì)象清單,以確定哪個(gè)對(duì)象是***副本。然后再修正數(shù)據(jù)問(wèn)題。

當(dāng)一個(gè)節(jié)點(diǎn)由于種種原因下線,那么期間的所有寫(xiě)入操作都無(wú)法完成。此時(shí),元數(shù)據(jù)方案處理起來(lái)很簡(jiǎn)單:另外挑選一臺(tái)合適的節(jié)點(diǎn),寫(xiě)入副本,更新相應(yīng)的元數(shù)據(jù)項(xiàng)后,操作完成,一切太平。

一致性哈希方案要復(fù)雜得多。對(duì)于一個(gè)哈希區(qū)間的一個(gè)副本,被固定在一個(gè)節(jié)點(diǎn)上。換句話說(shuō),一組副本必須存放在特定的一個(gè)節(jié)點(diǎn)上,不能隨意放置。如果需要定位到其他節(jié)點(diǎn)上,必須整區(qū)間的遷移。這個(gè)特性的結(jié)果就是,當(dāng)這臺(tái)節(jié)點(diǎn)下線后,無(wú)法寫(xiě)入相應(yīng)的副本,也無(wú)法隨意地將副本寫(xiě)到其他節(jié)點(diǎn)上。后續(xù)處理有2種方法:1、將副本或者key寫(xiě)入一個(gè)隊(duì)列,等節(jié)點(diǎn)恢復(fù)后,發(fā)起修復(fù)操作,從其他的副本獲得數(shù)據(jù),補(bǔ)上缺失的副本。問(wèn)題是這個(gè)隊(duì)列必須有足夠的可靠性,否則待修復(fù)key丟失,相應(yīng)的對(duì)象會(huì)長(zhǎng)時(shí)間缺少副本,直到數(shù)據(jù)一致性檢測(cè)發(fā)現(xiàn)問(wèn)題。這會(huì)增加一致性檢測(cè)的壓力,使得原本就復(fù)雜的過(guò)程雪上加霜;2、按一定規(guī)則寫(xiě)入其他節(jié)點(diǎn),待恢復(fù)后原樣遷移回來(lái)。這個(gè)方案相對(duì)簡(jiǎn)單些,但整個(gè)調(diào)度邏輯比較復(fù)雜,涉及到數(shù)據(jù)節(jié)點(diǎn)之間的協(xié)調(diào)。但是這種點(diǎn)到點(diǎn)的數(shù)據(jù)恢復(fù),會(huì)給暫存服務(wù)器產(chǎn)生壓力,不利于穩(wěn)定運(yùn)行。不管哪種方案,數(shù)據(jù)遷移或者復(fù)制都是免不了的。這中間的異常處理,負(fù)載控制等都需要花費(fèi)心思。

元數(shù)據(jù)方案在節(jié)點(diǎn)失效時(shí)的處理要比一致性哈希方案單純簡(jiǎn)潔的多。節(jié)點(diǎn)失效是云存儲(chǔ)的常態(tài),處理方式越簡(jiǎn)潔越好。在大集群中,幾個(gè)節(jié)點(diǎn)同時(shí)下線都是很平常的事,一致性哈希如此復(fù)雜的節(jié)點(diǎn)失效管理,就是運(yùn)維的地獄。#p#

6. 可用性和可管理性

可用性在某些方面同可靠性有著共同的解決方案,比如多副本可以消除單點(diǎn),提高可用性。但是它們?cè)谄渌矫鎱s存在著矛盾。當(dāng)一個(gè)副本寫(xiě)入失敗,從可靠性角度而言,應(yīng)當(dāng)設(shè)法重試,或者索性告訴用戶(hù)寫(xiě)入失敗。但這樣勢(shì)必造成響應(yīng)變慢,或者可用性降低。(響應(yīng)變慢超過(guò)一個(gè)程度后,便會(huì)被認(rèn)為是失敗,不管最終是否成功)。此外,為了保障可靠性的諸多措施,比如副本修復(fù),數(shù)據(jù)遷移等,會(huì)消耗系統(tǒng)資源,從而影響到可用性。

在上面對(duì)于可靠性的分析中可以看到,由于副本被綁定在特定節(jié)點(diǎn)上,一致性哈希要確保同元數(shù)據(jù)相當(dāng)?shù)目煽啃缘脑挘坏貌环艞壱恍┛捎眯裕瑢⒂懈北緦?xiě)入出錯(cuò)的操作返回失敗。因?yàn)樵獢?shù)據(jù)方案的數(shù)據(jù)存儲(chǔ)位置沒(méi)有限制,對(duì)于多數(shù)的副本寫(xiě)入失敗可以通過(guò)重選服務(wù)器得到更正。一致性哈希則無(wú)此便利,要么放棄一定的可用性,要么承擔(dān)可靠性的風(fēng)險(xiǎn)。

根本上而言,一致性哈希在副本寫(xiě)入上制造了局部的隱式單點(diǎn),盡管是短期的或者臨時(shí)的,但依舊會(huì)對(duì)系統(tǒng)產(chǎn)生影響。一個(gè)設(shè)計(jì)良好的分布式系統(tǒng)會(huì)盡量地減少單點(diǎn)出現(xiàn)的可能性,這直接關(guān)系到系統(tǒng)的持續(xù)和瞬時(shí)可用性。元數(shù)據(jù)方案可以確保數(shù)據(jù)分布上不存在任何形式的單點(diǎn)。對(duì)于一個(gè)對(duì)象而言,任何節(jié)點(diǎn)都沒(méi)有特殊性,這種無(wú)差別化才能真正保證消除單點(diǎn)。

在云存儲(chǔ)系統(tǒng)中,使用公式R+W>N的地方,便是影響系統(tǒng)可用性的核心要點(diǎn)。可用性和一致性往往是一對(duì)冤家。在這個(gè)地方,需要向N臺(tái)服務(wù)器同時(shí)發(fā)出請(qǐng)求,而最終的有效性取決于服務(wù)器反饋的情況。一般來(lái)說(shuō),N越大,越容易在確保一致性的前提下,維持可用性。(實(shí)際上是取決于X=R+W-N的值,越大越好。這個(gè)值表示當(dāng)X+1個(gè)副本下線或丟失后,系統(tǒng)將不能保證臨時(shí)的或***的一致性)。但是,N-R和N-W越小,對(duì)可用性的影響越大。如果N=R,那么只要有一臺(tái)服務(wù)器下線,會(huì)造成系統(tǒng)不可讀取。如果N-R=3,那么即便是3臺(tái)服務(wù)器下線,系統(tǒng)還能正確讀取。對(duì)于W也一樣。在這里,一致性和可用性是一對(duì)矛盾。當(dāng)副本數(shù)足夠多(N數(shù)可以很大),可以很容易地獲得較高的X數(shù)。比如N=7, R=W=5,X=3,N-R=2,N-W=2,意味著即便有2臺(tái)服務(wù)器下線,也能保證讀寫(xiě)的有效性,同時(shí)確保一致性。

但如果N=3,無(wú)論如何也只能讓R=3或者W=3,此時(shí)盡管可以獲得X=3的一致性保障級(jí)別,但即便一臺(tái)服務(wù)器下線,也會(huì)造成系統(tǒng)不可用。如果R=W=2,可以保證1臺(tái)服務(wù)器下線,系統(tǒng)還是可用,但一致性保障級(jí)別降低到了X=1。

在元數(shù)據(jù)方案中,元數(shù)據(jù)的副本數(shù)(N)可以大些,故障和異常造成的副本下線,或者丟失,對(duì)系統(tǒng)的可用性和一致性產(chǎn)生的影響很小,對(duì)于這類(lèi)問(wèn)題的處理的緊迫性會(huì)低一些。相反,一致性哈希的一致性依賴(lài)于數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),面對(duì)大大小小的數(shù)據(jù)對(duì)象,無(wú)法使用很多副本,通常都會(huì)用3。在這個(gè)N數(shù)下,無(wú)論一致性還是可用性,都很脆弱。

對(duì)于可用性而言,***,也是最重要的一點(diǎn)是運(yùn)維管理。運(yùn)維的好壞直接決定了可用性。前文已述,一致性哈希在一些關(guān)鍵的系統(tǒng)維護(hù)點(diǎn)上相比元數(shù)據(jù)方案多出不少環(huán)節(jié)。在同樣運(yùn)維水平和強(qiáng)度下,一致性哈希更加容易出現(xiàn)可用性問(wèn)題。這方面對(duì)可用性的影響很難明確地給出量化的評(píng)判,但是運(yùn)維是云存儲(chǔ)系統(tǒng)高可用保障的核心,運(yùn)維的復(fù)雜性往往決定了最終9的個(gè)數(shù)。

現(xiàn)在來(lái)看看元數(shù)據(jù)方案的運(yùn)維特點(diǎn)。元數(shù)據(jù)方案相比標(biāo)準(zhǔn)一致性哈希方案多出了一個(gè)元數(shù)據(jù)存儲(chǔ)系統(tǒng)。元數(shù)據(jù)通常有更多的副本,副本數(shù)越多,一致性的維持越發(fā)困難。一般的方案都是依賴(lài)異步執(zhí)行的版本同步機(jī)制,盡快同步各副本。但是,為防止同步失效,會(huì)定期全面掃描核對(duì)所有元數(shù)據(jù),確保元數(shù)據(jù)不會(huì)退化。這個(gè)過(guò)程伴隨者很大的數(shù)據(jù)吞吐和計(jì)算量。但這個(gè)過(guò)程是離線操作,并且沒(méi)有非常嚴(yán)格的時(shí)間要求,即便失敗,也不會(huì)過(guò)多地影響系統(tǒng)的運(yùn)行。它的時(shí)間裕度比較大。元數(shù)據(jù)量不會(huì)很大,在合適的算法下,一致性比對(duì)的時(shí)間也不會(huì)很長(zhǎng),通常不超過(guò)2、3小時(shí)。并且可以根據(jù)需要增減所需的服務(wù)器數(shù)量。

一致性哈希運(yùn)維的重點(diǎn)則在另一頭。一致性哈希模型及其各種變形由于需要確保數(shù)據(jù)平衡,不得不在擴(kuò)容時(shí)進(jìn)行大范圍的數(shù)據(jù)遷移。在不影響服務(wù)的情況下,遷移速率必須受到限制,導(dǎo)致遷移時(shí)間很長(zhǎng)。但有時(shí)數(shù)據(jù)遷移的時(shí)間要求很高。因?yàn)樵谶w移完成之前,遷移的數(shù)據(jù)源所占的空間還不能回收。此時(shí)所添加的空間暫時(shí)無(wú)法使用。而且數(shù)據(jù)回收也需要花費(fèi)時(shí)間。在可用空間緊迫的情況下,遷移速度的壓力會(huì)很大。一旦遷移過(guò)程中出現(xiàn)異常,將會(huì)雪上加霜。在長(zhǎng)達(dá)幾天的數(shù)據(jù)遷移過(guò)程中發(fā)生磁盤(pán)損壞的可能性非常大,修復(fù)操作將迫使數(shù)據(jù)遷移減速,甚至停止。修復(fù)的優(yōu)先級(jí)更高。遷移操作涉及很多服務(wù)器的并發(fā),協(xié)調(diào)和控制工作很復(fù)雜。而且不同的遷移原因會(huì)有不同的遷移策略。再加上各種異常處理,運(yùn)維管理內(nèi)容很多,將是非常痛苦的事。隨著規(guī)模越來(lái)越大,最終可能超出運(yùn)維能力的極限,無(wú)力維持存儲(chǔ)的可用性。

元數(shù)據(jù)方案在絕大多數(shù)情況下不會(huì)進(jìn)行數(shù)據(jù)遷移。少掉這樣一個(gè)復(fù)雜重載的環(huán)節(jié),對(duì)于系統(tǒng)維護(hù)的壓力會(huì)小很多。

因此,盡管元數(shù)據(jù)方案多出了一個(gè)元數(shù)據(jù)的存儲(chǔ)集群,但它相比一致性哈希方案反而更容易維持可用性。#p#

7. 性能

性能是大多數(shù)程序員都關(guān)心的東西,往往被放在很高的位置。但在云存儲(chǔ)中,性能反倒是級(jí)別較低的問(wèn)題。存儲(chǔ)是io密集型的系統(tǒng),無(wú)論如何優(yōu)化代碼,都不可避免地受到物理設(shè)備的限制。

云存儲(chǔ)的性能要點(diǎn)首先在于并發(fā)。做好并發(fā),確保所有請(qǐng)求不會(huì)相互間阻塞,便可以從大的方面保證性能。元數(shù)據(jù)方案中,元數(shù)據(jù)存取存在大量的并發(fā)訪問(wèn)。每個(gè)用戶(hù)的數(shù)據(jù)訪問(wèn)請(qǐng)求,在這里會(huì)轉(zhuǎn)化成N個(gè)并發(fā)請(qǐng)求。系統(tǒng)不得不管理巨大數(shù)量的并發(fā)操作,并且小心維護(hù)并發(fā)之間的邏輯關(guān)系。傳統(tǒng)上使用的線程池很難滿足需要,不得不采用異步模型,從而增加開(kāi)發(fā)難度。

一致性哈希在這方面有自身的優(yōu)勢(shì)。因?yàn)镹數(shù)不大,并發(fā)的放大效應(yīng)相比元數(shù)據(jù)方案要小很多。當(dāng)然前面也說(shuō)了,小N數(shù)會(huì)減小一致性的裕度,也不利于可用性。

云存儲(chǔ)性能優(yōu)化另一個(gè)重要的要點(diǎn)是,減少一次用戶(hù)請(qǐng)求中跨服務(wù)器訪問(wèn)的次數(shù)。跨越網(wǎng)絡(luò)的訪問(wèn)必然存在延遲,跨的次數(shù)越多,整體延遲越大。同時(shí)也會(huì)增加網(wǎng)絡(luò)的負(fù)擔(dān)。元數(shù)據(jù)方案天生多一次元數(shù)據(jù)檢索操作,因而在這方面處于劣勢(shì)。但一致性哈希在讀取對(duì)象時(shí),也沒(méi)有好到哪里去。前面討論一致性的時(shí)候已經(jīng)說(shuō)過(guò),為了執(zhí)行W+R>N的邏輯,又不能讀取所有副本,只能采取一次并發(fā)預(yù)讀操作。這樣一致性哈希的跨服務(wù)器訪問(wèn)次數(shù)也同元數(shù)據(jù)方案扯平了。只是并發(fā)數(shù)少一些。這是以降低容錯(cuò)能力為代價(jià)的。

元數(shù)據(jù)在性能方面的主要劣勢(shì)是元數(shù)據(jù)的訪問(wèn)。系統(tǒng)對(duì)元數(shù)據(jù)的訪問(wèn)主要是檢索操作,因此通常會(huì)采用數(shù)據(jù)庫(kù),或者具備檢索功能的數(shù)據(jù)存儲(chǔ)引擎。這些模塊在重載情況下有性能限制。由于副本數(shù)多,簡(jiǎn)單地?cái)U(kuò)展服務(wù)器數(shù)量代價(jià)較大。好在這些部分的優(yōu)化,特別是數(shù)據(jù)庫(kù)優(yōu)化,有很成熟的經(jīng)驗(yàn),花些功夫也是能做好的。

8. 其他

在功能方面,一致性哈希還有一個(gè)不足。盡管一致性哈希可以實(shí)現(xiàn)對(duì)象存儲(chǔ)的基本功能,但存儲(chǔ)服務(wù)有時(shí)需要提供一些額外的功能,比如列出一個(gè)用戶(hù)所保存的對(duì)象key清單。如果有元數(shù)據(jù),那么這些用戶(hù)的信息可以保存在元數(shù)據(jù)里,需要的時(shí)候檢索這些信息即可。但是,在一致性哈希方案中,所有的key在系統(tǒng)中已經(jīng)被哈希,分散到所有服務(wù)器上。如果要獲得用戶(hù)的對(duì)象清單,那么就不得不在所有存儲(chǔ)節(jié)點(diǎn)上執(zhí)行相應(yīng)的檢索操作,想象一下一個(gè)幾千,甚至幾萬(wàn)臺(tái)節(jié)點(diǎn)的存儲(chǔ)集群,執(zhí)行一次這樣的操作,會(huì)是什么結(jié)果?

對(duì)于存放了大量數(shù)據(jù)對(duì)象的用戶(hù),列出對(duì)象清單的操作可能沒(méi)有什么直接意義。或許不提供此類(lèi)功能,用戶(hù)也能忍受。但是,另一個(gè)用戶(hù)相關(guān)的問(wèn)題卻無(wú)法回避。這就是計(jì)費(fèi)。計(jì)費(fèi)就是計(jì)算出一個(gè)用戶(hù)所有的對(duì)象所占據(jù)的容量,然后制作成費(fèi)用清單,提供給計(jì)費(fèi)系統(tǒng)。

計(jì)費(fèi)最簡(jiǎn)單的辦法是通過(guò)用戶(hù)的訪問(wèn)記錄,累積出來(lái),寫(xiě)入就加,刪除就減。但是實(shí)際沒(méi)那么簡(jiǎn)單。對(duì)于一個(gè)key的覆蓋寫(xiě)入,那么必須先扣除原有的對(duì)象大小,然后再加上新對(duì)象的大小。

更重要的,由于訪問(wèn)記錄可能出錯(cuò)或者丟失,這種相對(duì)計(jì)算方式隨著時(shí)間的增長(zhǎng)會(huì)產(chǎn)生累積誤差。需要定期校準(zhǔn)。校準(zhǔn)的方式就是統(tǒng)計(jì)所有用戶(hù)的對(duì)象大小,做絕對(duì)容量的計(jì)算。由于對(duì)象大小存放在所有數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中,這又是一個(gè)恐怖的全系統(tǒng)的數(shù)據(jù)掃描。同時(shí)還必須確保對(duì)象屬性的一致性,以免計(jì)費(fèi)出錯(cuò)。

計(jì)費(fèi)涉及到錢(qián),通常用戶(hù)會(huì)非常敏感,應(yīng)當(dāng)盡可能不出錯(cuò)。校準(zhǔn)需要盡量頻繁。但是全集群的計(jì)費(fèi)校準(zhǔn)代價(jià)實(shí)在太高,還是應(yīng)當(dāng)盡量少做。于是這對(duì)矛盾怎么調(diào)和,對(duì)于開(kāi)發(fā)運(yùn)維人員都是個(gè)巨大的挑戰(zhàn)。

在元數(shù)據(jù)方案中,計(jì)費(fèi)所需信息都可以保存在元數(shù)據(jù)中,計(jì)費(fèi)操作只局限在元數(shù)據(jù)上。元數(shù)據(jù)量少,可以直接將數(shù)據(jù)dump出來(lái),在額外的服務(wù)器上計(jì)算。這種操作相對(duì)輕量很多,可以更頻繁地執(zhí)行,提高用戶(hù)賬單的準(zhǔn)確性。

9. 總結(jié)

經(jīng)過(guò)大體的分析,可以看到在僅考慮云存儲(chǔ)功能需求的情況下,一致性哈希具備簡(jiǎn)單高效的優(yōu)勢(shì)。但是,大型的云存儲(chǔ)系統(tǒng)的功能不是影響其架構(gòu)的主要因素。包括規(guī)模、可擴(kuò)展性、可靠性、可用性和一致性等方面的非功能性需求才是云存儲(chǔ)需要重點(diǎn)考慮的地方。一致性哈希及其各種變形方案,在這些方面存在諸多缺陷。盡管每個(gè)方面的缺陷并非不可逾越的障礙,往往都可以通過(guò)一些設(shè)計(jì)和運(yùn)維手段加以解決。但是系統(tǒng)復(fù)雜度和運(yùn)維難度隨之增加。最關(guān)鍵的,每個(gè)方面的問(wèn)題整合起來(lái)所產(chǎn)生的疊加效應(yīng),會(huì)輕而易舉地摧垮一個(gè)云存儲(chǔ)系統(tǒng)。

一般而言,一致性哈希適合一些有既定規(guī)模,不太需要擴(kuò)展,數(shù)據(jù)尺寸不大的場(chǎng)合。這些特性意味著一致性哈希無(wú)法很好地適用于大型的云存儲(chǔ)系統(tǒng)。元數(shù)據(jù)方案盡管在架構(gòu)上復(fù)雜些,但其優(yōu)點(diǎn)是靈活。而這種靈活性更加適合云存儲(chǔ)的需要。

責(zé)任編輯:張浩 來(lái)源: 莫華楓的博客
相關(guān)推薦

2015-08-06 10:54:04

云存儲(chǔ)元數(shù)據(jù)元數(shù)據(jù)保障

2015-11-10 18:18:01

京東云何剛

2023-05-26 06:49:44

2018-10-29 12:51:35

分布式存儲(chǔ)元數(shù)據(jù)

2017-03-08 10:29:06

HBase大數(shù)據(jù)存儲(chǔ)

2016-09-22 11:01:42

云存儲(chǔ) 領(lǐng)域

2018-03-14 09:30:06

云存儲(chǔ)數(shù)據(jù)安全

2018-08-22 16:35:31

存儲(chǔ)

2013-08-08 10:14:52

云存儲(chǔ)云計(jì)算

2018-03-12 08:17:27

分布式存儲(chǔ)

2016-06-28 11:20:42

云計(jì)算云備份

2014-11-05 10:20:35

馬云庫(kù)克

2021-07-26 10:30:26

云計(jì)算數(shù)據(jù)存儲(chǔ)云應(yīng)用

2018-08-24 09:42:05

云存儲(chǔ)存儲(chǔ)大數(shù)據(jù)

2011-01-04 10:00:41

云計(jì)算YunTable

2012-06-08 09:15:35

云計(jì)算數(shù)據(jù)存儲(chǔ)公有云

2018-12-19 16:37:09

華為

2018-12-21 10:46:43

華為《營(yíng)贏》雜志

2018-05-22 08:57:31

開(kāi)源軟件定義存儲(chǔ)

2014-11-04 09:14:58

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

曰批又黄又爽免费视频| 免费视频91蜜桃| 日韩欧美精品一区二区三区| 久久免费看少妇高潮| 国产玖玖精品视频| 久一视频在线观看| 欧美三级三级| 亚洲精品一区二区三区在线观看 | 日本五码在线| 精品一区二区久久| 午夜精品美女自拍福到在线| 成人激情五月天| 亚洲专区**| 欧美日韩一卡二卡| 国产无限制自拍| 日本天堂在线观看| 久久亚洲精品小早川怜子| 国产综合久久久久| 欧美精品一二三四区| 午夜视频一区| 亚洲欧美日韩一区二区在线 | www.亚洲人| 国产剧情久久久久久| 精品不卡一区二区| 亚洲午夜一区| 久久国产精品亚洲| 天堂av网手机版| 伊人春色精品| 亚洲成人精品视频在线观看| 99精品999| 日本精品裸体写真集在线观看| 亚洲高清视频中文字幕| 日本三日本三级少妇三级66| 95在线视频| 久久久午夜精品理论片中文字幕| 国产精品二区二区三区| 国产伦一区二区| 久久精品国产一区二区三 | 亚洲视频一区二区三区| 国产黑丝在线观看| 日韩精品一区国产| 日韩欧美高清一区| 亚洲视频在线不卡| 成人豆花视频| 91精品国产综合久久久久久久久久| 女人另类性混交zo| 范冰冰一级做a爰片久久毛片| 午夜视频一区二区| 少妇人妻无码专区视频| 免费看电影在线| 亚洲线精品一区二区三区八戒| 妞干网这里只有精品| 黄色片网站在线| 亚洲欧洲99久久| 天天做天天爱天天高潮| 麻豆视频在线观看免费网站| 成人免费在线视频| 免费的av在线| 蜜臀av在线播放| 午夜伊人狠狠久久| av天堂永久资源网| 最新欧美电影| 91麻豆精品91久久久久同性| www.久久av.com| 日韩精品视频一区二区三区| 欧美videos中文字幕| 黄色性视频网站| 图片婷婷一区| 中文字幕国产亚洲| 成年人二级毛片| 欧美日本一区二区视频在线观看 | 国产精品日本一区二区不卡视频 | 日韩av中文| 亚洲欧美一区二区三区极速播放| 久久国产精品免费观看| 国产盗摄在线视频网站| 欧美午夜美女看片| 亚洲人视频在线| 日韩成人在线看| 亚洲国产欧美久久| 欧美激情 一区| 亚洲经典一区| 69久久夜色精品国产69| 五月婷婷丁香在线| 国产盗摄一区二区三区| 久久www免费人成精品| 在线免费黄色| 亚洲电影在线播放| 国产自偷自偷免费一区| av日韩一区| 亚洲激情免费观看| 老司机深夜福利网站| 国色天香一区二区| 国产精品成人久久久久| av官网在线观看| 国产亚洲精品资源在线26u| 99亚洲精品视频| 亚洲天堂av影院| 在线电影院国产精品| 中文字幕在线播放一区| 欧美国产偷国产精品三区| 久久久久久中文| 一二三四区视频| 99re66热这里只有精品3直播| 一区二区国产日产| 新版的欧美在线视频| 91精选在线观看| 在哪里可以看毛片| 亚洲午夜电影| 91久久国产精品| 日韩大胆人体| 亚洲成人激情自拍| 中文字幕在线视频一区二区三区| 天堂俺去俺来也www久久婷婷 | 欧美成人aa大片| 538精品视频| 国产一区二区三区成人欧美日韩在线观看 | 亚洲国产精彩中文乱码av| 亚洲欧美另类日本| 久久国产欧美| 精品乱码一区| 女子免费在线观看视频www| 欧美日本韩国一区| 精品无码国产污污污免费网站| 伊人久久大香线蕉综合热线| 成人黄色影片在线| av在线播放免费| 色综合天天综合网天天看片| 国产+高潮+白浆+无码| 欧美精品成人| 114国产精品久久免费观看| 成人午夜在线观看视频| 日本精品一区二区三区四区的功能| 韩国一区二区三区四区| 正在播放日韩欧美一页| 国产精品自产拍在线观看中文| 黄色影院在线播放| 日韩欧美中文在线| 激情综合丁香五月| 国产欧美成人| 久久亚洲国产精品日日av夜夜| 国产在线xxx| 日韩精品一区二区三区视频播放| 国产稀缺精品盗摄盗拍| 黄色资源网久久资源365| 一区二区免费在线观看| 欧美亚洲综合视频| 精品国产一区二区三区久久| 一级片一区二区三区| 中文天堂在线一区| 亚洲黄色片免费| 欧美一区二区三区免费看| 亚洲综合精品一区二区| 新版中文在线官网| 精品国产免费视频| 成年人免费看毛片| 久久综合av免费| 成人三级视频在线播放| 日韩av有码| 成人免费视频a| 污污视频在线| 亚洲第一男人天堂| 日韩色图在线观看| 日本一区二区三区高清不卡| 在线观看国产一级片| 99久精品视频在线观看视频| 成人女保姆的销魂服务| 欧洲在线视频| 亚洲精品在线视频| 中文在线字幕av| 一区二区三区资源| 亚洲一级av无码毛片精品| 欧美亚洲视频| 亚洲欧洲精品一区| 在线精品视频一区| 国产成人高清激情视频在线观看| 91吃瓜网在线观看| 日韩免费在线观看| 99精品人妻国产毛片| 亚洲国产激情av| 99热这里只有精品2| 99热这里只有成人精品国产| 少妇特黄a一区二区三区| 四虎影视国产精品| 91精品国产高清久久久久久久久| 国产小视频免费在线网址| 欧美日本不卡视频| 国产一级在线播放| 国产精品私人自拍| 黑森林av导航| 免费精品视频在线| 日韩精品一区二区在线视频| 久久99国内| 亚洲综合色av| 亚洲第一会所001| 欧美片一区二区三区| 久久精品国产亚洲a∨麻豆| 91精品国产麻豆| 视频一区二区三区四区五区| 国产精品高潮久久久久无| xxxxxx黄色| 国产真实乱对白精彩久久| 免费看国产曰批40分钟| 国产精品伦理久久久久久| 精品91免费| 国产午夜亚洲精品一级在线| 日本精品性网站在线观看| av官网在线播放| 国产一区二区三区日韩欧美| 亚洲成熟女性毛茸茸| 欧美性色黄大片| 五月婷婷亚洲综合| 亚洲免费观看高清完整| 日本性高潮视频| 成人国产精品免费观看视频| 五月天中文字幕在线| 日韩制服丝袜先锋影音| 国产黄色片免费在线观看| 性xxxx欧美老肥妇牲乱| 日本一区二区三区www| 日韩av影院| 成人动漫在线视频| 亚洲精品大全| 国产日韩精品入口| 姬川优奈av一区二区在线电影| 韩剧1988免费观看全集| gogo在线高清视频| 日韩中文第一页| av福利在线播放| 一区二区国产精品视频| 国产三级在线观看| 亚洲欧美综合图区| 青青久在线视频免费观看| 亚洲高清av在线| 欧美一区二区三区黄片| 日韩欧美视频在线| 国产黄色片免费观看| 91精品国产91综合久久蜜臀| 国产精品怡红院| 欧美二区三区的天堂| 国产又粗又猛又黄又爽| 欧美日韩午夜在线视频| 在线免费看毛片| 欧美丰满嫩嫩电影| 国产精品久久久久久久久毛片 | 中文字幕欧美一区| 成年人视频软件| 最新国产精品久久精品| 亚洲人与黑人屁股眼交| 国产精品久久久久久久久久久免费看| 天天操天天干天天操天天干| 久久久99久久精品欧美| 无码少妇一区二区| 国产精品免费丝袜| √天堂中文官网8在线| 亚洲狠狠丁香婷婷综合久久久| 国产大学生自拍| 亚洲观看高清完整版在线观看| 国产午夜激情视频| 一本色道综合亚洲| 中文字幕一区二区三区四区视频 | 亚洲一区二区精品视频| 久久精品免费在线| 无码av免费一区二区三区试看 | 911精品产国品一二三产区 | 亚洲国产精品久久久久秋霞蜜臀| 神马午夜电影一区二区三区在线观看| 日韩高清人体午夜| 二区在线视频| 美乳少妇欧美精品| 韩国成人二区| 国产精品久久久久久久久久东京 | 欧美18视频| 欧美hd在线| 日韩一级性生活片| 亚洲三级观看| 蜜臀av免费观看| 国产伦精品一区二区三区视频青涩| 一本色道久久hezyo无码| 91美女精品福利| 一二三四在线观看视频| 一区二区三区不卡在线观看| 免费日韩一级片| 欧美日韩一二三| 免费av一级片| 中文字幕亚洲图片| 91美女主播在线视频| 国产精品嫩草影院一区二区| 日韩在线成人| 日本精品一区二区| 欧美激情aⅴ一区二区三区| 国产超级av在线| 国内精品视频一区二区三区八戒| 国产精品一区二区人妻喷水| 国产精品对白交换视频| 91九色丨porny丨肉丝| 欧美日韩成人在线| 日韩精品系列| 欧美国产日韩二区| 日本一区二区中文字幕| 久久精品国产美女| 欧美女人交a| jizzzz日本| 91免费版在线| 久久精品这里只有精品| 欧美亚洲国产bt| 天天色棕合合合合合合合| 久久久精品国产一区二区| 老司机2019福利精品视频导航| 91在线观看免费| 欧美一二区在线观看| 欧美一级视频免费看| 久久se这里有精品| 国产精品免费无码| 精品magnet| 亚洲av无码一区二区三区dv| 中文字幕日韩精品在线| 日韩大片免费观看| 国产精品一区二区三区在线| 天天综合一区| 男女视频在线看| 91网上在线视频| 精品无码m3u8在线观看| 91精品国产品国语在线不卡| yiren22综合网成人| 欧美一级在线亚洲天堂| 国产精品自在| 久久久久久av无码免费网站下载| 久久99国产精品免费网站| 中文字幕在线观看免费高清| 欧美视频在线观看 亚洲欧| 成人免费一级视频| 九九久久综合网站| 久久久久久久久成人| 日本特级黄色大片| 极品少妇一区二区三区精品视频 | 亚洲综合视频在线观看| 国产免费黄色网址| 久久精品成人欧美大片| 日韩精品一页| 欧美h视频在线观看| 久久成人久久鬼色| 萌白酱视频在线| 欧美人妖巨大在线| 男人的天堂在线视频免费观看| 国产精品免费一区豆花| 久久国产小视频| 亚洲精品第三页| 亚洲色图在线播放| www.黄色av| 欧美激情亚洲激情| 久久激情av| 国产99久久九九精品无码| 2023国产精品自拍| 国产又黄又猛又粗又爽| 亚洲日本中文字幕| 狂野欧美性猛交xxxx| 色中文字幕在线观看| 国产精品夜夜嗨| 日韩久久精品视频| 亚洲精品永久免费精品| 成人做爰视频www| 国产精品美女在线播放| 高清国产午夜精品久久久久久| 精品在线免费观看视频| 日韩激情在线视频| 另类中文字幕国产精品| 国产精品12p| 成人深夜视频在线观看| 色av性av丰满av| 日韩视频免费大全中文字幕| 激情不卡一区二区三区视频在线| 无码粉嫩虎白一线天在线观看| 久久综合狠狠综合| 国产尤物视频在线观看| 欧美极品在线视频| 在线视频亚洲专区| 57pao国产成永久免费视频| 一区二区三区不卡视频| 免费播放片a高清在线观看| 成人深夜直播免费观看| 亚洲第一黄色| 欧美日韩生活片| 日韩精品专区在线影院重磅| 91精品产国品一二三产区| 亚洲三区四区| 波多野结衣中文字幕一区二区三区| 亚洲大片免费观看| 美女视频黄免费的亚洲男人天堂| 欧美三级电影在线| 爱豆国产剧免费观看大全剧苏畅 | 销魂美女一区二区| 欧美疯狂xxxx大交乱88av| 国产尤物久久久| jjzz黄色片| 欧美日韩成人一区| 夜鲁夜鲁夜鲁视频在线播放| 米仓穗香在线观看| 国产欧美日韩在线观看| 免费观看黄色一级视频|