所屬欄目:知識(shí)產(chǎn)權(quán)論文 發(fā)布日期:2010-10-16 16:51 熱度:
【摘要】:本文簡(jiǎn)要介紹了Cassandra分布存儲(chǔ)系統(tǒng)的設(shè)計(jì)理念及其使用的各種分布存儲(chǔ)技術(shù)。文章首先分析了Cassandra分布存儲(chǔ)系統(tǒng)出現(xiàn)的緣由——Facebook社交網(wǎng)絡(luò)的系統(tǒng)需求,然后著重介紹了Cassandra系統(tǒng)中區(qū)別傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu),并且簡(jiǎn)要分析了其分區(qū)技術(shù)在分布存儲(chǔ)系統(tǒng)中的應(yīng)用,同時(shí),介紹了基于數(shù)據(jù)的復(fù)制機(jī)制來(lái)達(dá)到數(shù)據(jù)高度的可獲得性、安全性和系統(tǒng)良好的擴(kuò)展性的方式。最后,本文宏觀的總結(jié)了Cassandra系統(tǒng)的運(yùn)行過(guò)程及適用范圍。
【關(guān)鍵詞】:分布存儲(chǔ),網(wǎng)絡(luò),數(shù)據(jù)庫(kù)。
前言
Cassandra是一種分布存儲(chǔ)系統(tǒng),很多商業(yè)服務(wù)網(wǎng)站使用它來(lái)對(duì)大量的結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行管理。在對(duì)大量數(shù)據(jù)的管理中,Cassandra可以提供高速有效的服務(wù)并從未出現(xiàn)過(guò)錯(cuò)誤。Cassandra運(yùn)行于數(shù)百個(gè)節(jié)點(diǎn)的結(jié)構(gòu)之上,而在這類規(guī)模的系統(tǒng)中,各類組件,無(wú)論規(guī)模大小,都會(huì)持續(xù)的拋出異常。然而,Cassandra保持?jǐn)?shù)據(jù)持久性的方式很好的應(yīng)對(duì)了這些異常,為存儲(chǔ)系統(tǒng)提高了強(qiáng)大的可靠性和擴(kuò)展性。盡管Cassandra在一些設(shè)計(jì)和實(shí)施等方面與傳統(tǒng)的數(shù)據(jù)庫(kù)存在相似之處,但是Cassandra并不完全支持關(guān)系數(shù)據(jù)模型,即它不是一個(gè)傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)。Cassandra提供給客戶端一個(gè)相對(duì)比較簡(jiǎn)單的數(shù)據(jù)模型,這種數(shù)據(jù)模型支持對(duì)數(shù)據(jù)的布局和格式動(dòng)態(tài)的控制。Cassandra系統(tǒng)旨在高效迅速的處理大量的寫操作,與此同時(shí)不會(huì)犧牲讀操作的效率,因而確保具有這種特性的商業(yè)網(wǎng)站能夠?yàn)榭蛻籼岣吒咝П憬莸姆⻊?wù)。
簡(jiǎn)介
Cassandra最初是由AvinashLakshman和PrashantMalik在Facebook開發(fā)設(shè)計(jì),在2008年,F(xiàn)acebook將它貢獻(xiàn)給了開源社區(qū)。Cassandra的出現(xiàn)與Facebook的系統(tǒng)特性息息相關(guān)。Facebook是世界最大的社交網(wǎng)絡(luò)平臺(tái),在高峰時(shí)段,F(xiàn)acebook要向數(shù)億的用戶提供服務(wù),而Facebook數(shù)萬(wàn)臺(tái)的服務(wù)器也遍布了全世界的各個(gè)數(shù)據(jù)中心。基于以上對(duì)海量數(shù)據(jù)處理的需求,F(xiàn)acebook想要為用戶提供優(yōu)質(zhì)的、可靠的和高效的服務(wù),一個(gè)必要的條件在于其系統(tǒng)平臺(tái)應(yīng)具有高度的擴(kuò)展性以應(yīng)對(duì)不斷增長(zhǎng)的用戶數(shù)量和數(shù)據(jù)處理需求數(shù)量。因此,處理一個(gè)包含大量組件的系統(tǒng)可能出現(xiàn)的各種異常現(xiàn)象是Facebook系統(tǒng)平臺(tái)維護(hù)人員的常規(guī)工作:在任意時(shí)間點(diǎn)上,總會(huì)有少量卻很關(guān)鍵的服務(wù)器和網(wǎng)絡(luò)組件出現(xiàn)錯(cuò)誤。在這種情形下,軟件系統(tǒng)應(yīng)該以某種容錯(cuò)的機(jī)制處理錯(cuò)誤,而不是將錯(cuò)誤當(dāng)作異常來(lái)處理。因此,為了達(dá)到以上指出的系統(tǒng)的可靠性和擴(kuò)展性,F(xiàn)acebook開發(fā)了Cassandra。
數(shù)據(jù)結(jié)構(gòu)
在Cassandra這種分布存儲(chǔ)系統(tǒng)中,類似于關(guān)系數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)是一個(gè)多維分布映射圖,并且以一個(gè)主鍵作為索引。在這種映射圖中,一個(gè)對(duì)象的值是高度結(jié)構(gòu)化的,其中,行主鍵是一個(gè)沒(méi)有長(zhǎng)度限制的字符串——通常情況下為16-36個(gè)字節(jié)。需要注意的是,在數(shù)據(jù)的任一副本中,針對(duì)任何一個(gè)行主鍵的操作都是原子的,即使多個(gè)列被同時(shí)讀或者寫。在Cassandra中,列的結(jié)構(gòu)近似于Bigable中的列結(jié)構(gòu)——列被組合在一起,并被稱為一個(gè)ColumnFamily或者SuperColumnFamily。下面詳細(xì)介紹Cassandra的列結(jié)構(gòu)。
Column
一個(gè)Column是一個(gè)包含名稱、值和時(shí)間戳的元組。它是最小的數(shù)據(jù)容器,其中,名稱和值通常沒(méi)有長(zhǎng)度限制。Column相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的字段,不同的是,每一行中的Column內(nèi)容可以不同,而關(guān)系數(shù)據(jù)庫(kù)中一張表內(nèi)每行所對(duì)應(yīng)的列字段都是相同的。這種方式相對(duì)比較靈活,對(duì)于具有少量字段,并且訪問(wèn)時(shí)通常只需要通過(guò)Key/Value配對(duì)的數(shù)據(jù)非常適用。
SuperColumn
一個(gè)SuperColumn是包含名稱和值的元組,它并不包含Column中的時(shí)間戳。SuperColumn的值并不是一個(gè)二進(jìn)制字節(jié)而是映射容器——包含“Key/Value”的組合。簡(jiǎn)而言之,SuperColumn是一個(gè)包含多個(gè)Column的容器,在被包含的每個(gè)Column中,其Key值與其名稱一致。SuperColumn可以表達(dá)一個(gè)object的多個(gè)屬性,每個(gè)屬性用一個(gè)Column表示。
ColumFamily
一個(gè)ColumFamily結(jié)構(gòu)類似于關(guān)系型數(shù)據(jù)庫(kù)中的表結(jié)構(gòu),它可以包含任意數(shù)量的行(row)。一個(gè)ColumFamily有一個(gè)名稱(類似于關(guān)系數(shù)據(jù)庫(kù)表的名稱),和若干行。在每一行中,分別包含各自的key(類似于行主鍵)和值(value)——包含多個(gè)Column的映射表,其結(jié)構(gòu)與之前介紹的SuperColumn一致。
API
Cassandra的API提供如下三種方法:
insert(table;key;rowMutation)
get(table;key;columnName)
delete(table;key;columnName)
columnName可以指ColumnFamily或者SuperColumnFamily中的任意一個(gè)Column或者任意一個(gè)SuperColumn中的Column的名稱。
系統(tǒng)架構(gòu)
一個(gè)存儲(chǔ)系統(tǒng)的結(jié)構(gòu)通常比較復(fù)雜,除去保證真實(shí)數(shù)據(jù)持久性的必要組件,存儲(chǔ)系統(tǒng)還應(yīng)該具有如下特性和功能:擴(kuò)展性和平衡負(fù)荷的有效解決方案、伙伴關(guān)系管理(membership)和錯(cuò)誤檢測(cè)、錯(cuò)誤恢復(fù)、同步化復(fù)制、超負(fù)荷處理、狀態(tài)轉(zhuǎn)移、并行和任務(wù)排序、請(qǐng)求配置、請(qǐng)求路由、系統(tǒng)監(jiān)視與警告,以及系統(tǒng)配置管理。而在Cassandra系統(tǒng)的搭建過(guò)程中,所應(yīng)用的核心分布存儲(chǔ)技術(shù)主要包括:存儲(chǔ)空間分區(qū),數(shù)據(jù)復(fù)制,伙伴關(guān)系管理,錯(cuò)誤處理和系統(tǒng)擴(kuò)展增容,所有的這些模塊協(xié)同工作,一起處理用戶的讀寫請(qǐng)求。以下分別介紹在Cassandra中應(yīng)用的各種分布存儲(chǔ)技術(shù)。
1. 分區(qū)(partition)
Cassandra最重要的設(shè)計(jì)特性之一即為可擴(kuò)展性。為了達(dá)到這一目標(biāo),Cassandra分布存儲(chǔ)系統(tǒng)使用分區(qū)技術(shù)。具體而言,在Cassandra分布存儲(chǔ)系統(tǒng)中,存在多個(gè)位于不同地理位置的存儲(chǔ)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)按照某種算法和方式復(fù)制存儲(chǔ)一定量的數(shù)據(jù)。新加入的數(shù)據(jù)以某種方式被分配到系統(tǒng)中的任一節(jié)點(diǎn)中。當(dāng)數(shù)據(jù)量不斷增多時(shí),可以通過(guò)增加節(jié)點(diǎn)的書目來(lái)提高系統(tǒng)的容量。當(dāng)然,在Cassandra系統(tǒng)中,新增一個(gè)或多個(gè)節(jié)點(diǎn)并不會(huì)對(duì)已存在的絕大多數(shù)節(jié)點(diǎn)造成影響,它只會(huì)改變一個(gè)局部的存儲(chǔ)狀況。以上存儲(chǔ)方式的實(shí)現(xiàn)是通過(guò)動(dòng)態(tài)分區(qū)的方式達(dá)到的,下面詳細(xì)介紹這一技術(shù)。
為了達(dá)到以上目標(biāo),存儲(chǔ)系統(tǒng)應(yīng)該可以將數(shù)據(jù)動(dòng)態(tài)的分配給集群中的不同的節(jié)點(diǎn),或者說(shuō)能夠動(dòng)態(tài)的對(duì)存儲(chǔ)空間進(jìn)行分區(qū),并將節(jié)點(diǎn)存入。Cassandra使用一致性哈希函數(shù)對(duì)數(shù)據(jù)進(jìn)行分區(qū):哈希函數(shù)的輸出范圍是一個(gè)固定的圓環(huán)空間,稱為“ring”。在這個(gè)圓環(huán)中,最大的哈希輸出值與最小的哈希輸出值相毗鄰。系統(tǒng)中的任一節(jié)點(diǎn)被分配一個(gè)隨機(jī)的值,這個(gè)隨機(jī)的值代表了其在圓環(huán)空間上的位置。同時(shí),對(duì)任一的數(shù)據(jù)的Key值做哈希運(yùn)算,輸出的結(jié)果代表這個(gè)數(shù)據(jù)在圓環(huán)空間上的位置。與此同時(shí),從任一數(shù)據(jù)在圓環(huán)上的位置為起點(diǎn),沿著圓環(huán)順時(shí)針移動(dòng)找到第一個(gè)節(jié)點(diǎn),那么這個(gè)節(jié)點(diǎn)即為負(fù)責(zé)這個(gè)數(shù)據(jù)的存儲(chǔ)容器。因此,圓環(huán)空間上的任一節(jié)點(diǎn)都負(fù)責(zé)存儲(chǔ)其前一個(gè)節(jié)點(diǎn)和它之間的所有數(shù)據(jù)。這樣的好處是增加或者刪除一個(gè)節(jié)點(diǎn)只會(huì)影響其周圍的小范圍空間,而對(duì)圓環(huán)空間上的絕大多數(shù)其他節(jié)點(diǎn)沒(méi)有任何影響,進(jìn)而達(dá)到了較好的擴(kuò)展性。然而,這種隨機(jī)分配的機(jī)制并沒(méi)有考慮到不同節(jié)點(diǎn)的存儲(chǔ)能力,Cassandra解決這個(gè)問(wèn)題的方法是分析圓環(huán)空間上的各節(jié)點(diǎn)的負(fù)載情況,并且使信息負(fù)荷量比較小的節(jié)點(diǎn)向負(fù)荷量比較大的節(jié)點(diǎn)移動(dòng),以緩解其存儲(chǔ)壓力。
2. 復(fù)制
Cassandra使用數(shù)據(jù)復(fù)制的方法來(lái)保證數(shù)據(jù)高度的可用性和持久性。在Cassandra系統(tǒng)中,每個(gè)數(shù)據(jù)都會(huì)在N個(gè)主機(jī)上進(jìn)行復(fù)制,每個(gè)Key值,k,會(huì)被指定給集群中的一個(gè)節(jié)點(diǎn)。如前所述,每個(gè)節(jié)點(diǎn)負(fù)責(zé)其控制范圍內(nèi)的數(shù)據(jù)的副本,并且,為了在本地存儲(chǔ)其控制范圍內(nèi)的Key值,節(jié)點(diǎn)會(huì)將其控制的Key值在圓環(huán)空間上的其他N-1個(gè)節(jié)點(diǎn)上進(jìn)行復(fù)制,當(dāng)然,Cassandra為客戶端提供了很多可供選擇的數(shù)據(jù)復(fù)制策略,比如“架構(gòu)不可知”(RackUnaware),“架構(gòu)可知”(RackAware)(同一數(shù)據(jù)中心內(nèi))和“數(shù)據(jù)中心可知”(DatacenterAware)。應(yīng)用程序可以根據(jù)需要選擇自己復(fù)制數(shù)據(jù)的策略。如果一個(gè)特定的應(yīng)用程序選擇了“架構(gòu)不可知”的數(shù)據(jù)復(fù)制策略,那么那些被復(fù)制的但尚未指派存儲(chǔ)節(jié)點(diǎn)的副本會(huì)選擇圓環(huán)空間上初始節(jié)點(diǎn)的前N-1個(gè)節(jié)點(diǎn)。而對(duì)于“架構(gòu)可知”和“數(shù)據(jù)中心可知”復(fù)制策略,則需要涉及比較復(fù)雜的算法。具體而言,Cassandra使用Zookeeper系統(tǒng)③在其集群中選擇一個(gè)領(lǐng)導(dǎo)節(jié)點(diǎn)(leader),。新加入集群的任一節(jié)點(diǎn)都要與領(lǐng)導(dǎo)節(jié)點(diǎn)進(jìn)行通信,領(lǐng)導(dǎo)節(jié)點(diǎn)會(huì)告知其負(fù)責(zé)的副本的所在區(qū)域,同時(shí)領(lǐng)導(dǎo)節(jié)點(diǎn)要確保每個(gè)節(jié)點(diǎn)不會(huì)負(fù)責(zé)多于N-1的圓環(huán)空間上的區(qū)域。記錄每個(gè)節(jié)點(diǎn)負(fù)責(zé)的圓環(huán)區(qū)域的元數(shù)據(jù)會(huì)緩存在所有節(jié)點(diǎn)上并且在Zookeeper中做容錯(cuò)處理——這種方式可以確保當(dāng)某個(gè)節(jié)點(diǎn)癱瘓后再恢復(fù)時(shí),它能夠了解到其原本負(fù)責(zé)的區(qū)域。例如,當(dāng)集群的一個(gè)節(jié)點(diǎn)崩潰后返回時(shí),它同Zookeeper與領(lǐng)導(dǎo)節(jié)點(diǎn)或者其他節(jié)點(diǎn)進(jìn)行通信,領(lǐng)導(dǎo)節(jié)點(diǎn)或其他節(jié)點(diǎn)返回存儲(chǔ)在他們內(nèi)部的關(guān)于這個(gè)節(jié)點(diǎn)崩潰前的存儲(chǔ)信息,這個(gè)節(jié)點(diǎn)通過(guò)這些信息恢復(fù)其存儲(chǔ)功能,重新負(fù)責(zé)原來(lái)的圓環(huán)區(qū)域。相似的概念可以借鑒Dynamo中的“偏好列表”(preferencelist),即負(fù)責(zé)給定區(qū)域的節(jié)點(diǎn)列表。
基于以上的介紹,我們了解到,Cassandra節(jié)點(diǎn)簇中的每個(gè)節(jié)點(diǎn)都了解系統(tǒng)中的其他節(jié)點(diǎn)和其負(fù)責(zé)的存儲(chǔ)區(qū)域。通過(guò)這種方式,Cassandra可以在節(jié)點(diǎn)癱瘓和網(wǎng)絡(luò)分區(qū)的情況發(fā)生變化時(shí)保證數(shù)據(jù)的持久性。數(shù)據(jù)中心會(huì)因?yàn)楹芏嘁蛩囟V构ぷ鳎热缤k姡瑪嗑W(wǎng)或者自然災(zāi)害。而Cassandra系統(tǒng)中數(shù)據(jù)的每個(gè)行(row)都會(huì)在多個(gè)節(jié)點(diǎn)被復(fù)制。實(shí)際上,一個(gè)Key的“偏好列表”就是保證擁有這個(gè)Key副本的N各節(jié)點(diǎn)分布在不同的數(shù)據(jù)中心。這些數(shù)據(jù)中心通過(guò)高速的網(wǎng)絡(luò)相連接。這種跨越多個(gè)數(shù)據(jù)中心的復(fù)制機(jī)制保證了在某些數(shù)據(jù)中心癱瘓時(shí),系統(tǒng)不會(huì)受到很大影響,數(shù)據(jù)也不會(huì)丟失。
3. 伙伴關(guān)系(Membership)
Cassandra節(jié)點(diǎn)集群中的節(jié)點(diǎn)間關(guān)系——我們稱之為“伙伴關(guān)系”(Membership),是建立在Scuttlebutt的基礎(chǔ)之上的——一種非常高效的、基于“Gossip”的關(guān)系機(jī)制。Scuttlebutt顯著的特性在于其高效的CPU利用率和“Gossip”通道的利用率。下面通過(guò)錯(cuò)誤檢測(cè)的機(jī)制來(lái)進(jìn)一步理解Cassandra中的伙伴關(guān)系。
錯(cuò)誤檢測(cè)(FailureDetection)是一種利用節(jié)點(diǎn)間關(guān)系的模塊,通過(guò)錯(cuò)誤檢測(cè),一個(gè)節(jié)點(diǎn)可以判斷系統(tǒng)中的其他節(jié)點(diǎn)是否在正常的工作。在Cassandra系統(tǒng)中,錯(cuò)誤檢測(cè)也用來(lái)避免一個(gè)節(jié)點(diǎn)試圖同一個(gè)無(wú)法到達(dá)的錯(cuò)誤或者癱瘓的節(jié)點(diǎn)進(jìn)行交互。Cassandra利用一個(gè)改進(jìn)版本的AccrualFailureDetector去完成錯(cuò)誤檢測(cè)。AccrualFailureDetector的觀念在于,錯(cuò)誤檢測(cè)模塊并不是通過(guò)返回一個(gè)布爾值來(lái)表示一個(gè)節(jié)點(diǎn)工作與否,而是返回一個(gè)代表每個(gè)被檢測(cè)節(jié)點(diǎn)的質(zhì)疑等級(jí)值,這個(gè)值被定義為Φ,Φ值可以動(dòng)態(tài)的調(diào)整以反應(yīng)被檢測(cè)節(jié)點(diǎn)的網(wǎng)絡(luò)和加載的條件。AccrualFailureDetector的方法類似于統(tǒng)計(jì)學(xué)中的建設(shè)檢驗(yàn)問(wèn)題,而Φ相當(dāng)于檢驗(yàn)的統(tǒng)計(jì)量。在Cassandra系統(tǒng)中,Φ有如下的意義:給定一個(gè)具體的Φ值,我們?cè)跈z測(cè)節(jié)點(diǎn)時(shí),會(huì)以某個(gè)對(duì)應(yīng)的概率錯(cuò)誤的認(rèn)為這個(gè)節(jié)點(diǎn)存在錯(cuò)誤。例如假設(shè)當(dāng)Φ=1時(shí)我們檢測(cè)節(jié)點(diǎn)A,那么錯(cuò)誤的判斷節(jié)點(diǎn)A工作狀況的概率為10%。同理,當(dāng)Φ=2時(shí),對(duì)應(yīng)的概率為1%,當(dāng)Φ=3時(shí),對(duì)應(yīng)的概率為0.1%,依次類推。每個(gè)節(jié)點(diǎn)收到系統(tǒng)內(nèi)其他節(jié)點(diǎn)的“Gossip”信息的內(nèi)部到達(dá)時(shí)間都被存儲(chǔ)在各自的節(jié)點(diǎn)的樣本窗口(samplingwindows)中,系統(tǒng)通過(guò)估計(jì)這些內(nèi)部到達(dá)時(shí)間的分布來(lái)計(jì)算Φ值。然后再給定的顯著性要求下(允許犯錯(cuò)誤的概率),用計(jì)算出來(lái)的Φ與分布中的臨界值做比較,如果大于臨界值,則拒絕原假設(shè),即某個(gè)節(jié)點(diǎn)的確存在錯(cuò)誤,針對(duì)這個(gè)節(jié)點(diǎn)的操作被中止;如果計(jì)算出來(lái)的Φ小于臨界值,則接受原假設(shè),即某個(gè)節(jié)點(diǎn)沒(méi)有錯(cuò)誤,可以進(jìn)行對(duì)它的操作。具體過(guò)程見(jiàn)圖1.以前的文獻(xiàn)認(rèn)為內(nèi)部到達(dá)時(shí)間類似服從高斯分布(Gaussian),但是Cassandra使用指數(shù)分布來(lái)更好的估計(jì)這一分布。總的來(lái)說(shuō),AccrualFailureDetector擁有很高的精確度和運(yùn)行速度,并且這種錯(cuò)誤檢測(cè)的機(jī)制可以根據(jù)不同的網(wǎng)絡(luò)條件和服務(wù)器負(fù)荷情況來(lái)進(jìn)行自我調(diào)整。
圖1:AccrualFailureDetector
4. 引導(dǎo)程序(Bootstrapping)
當(dāng)一個(gè)節(jié)點(diǎn)初次運(yùn)行時(shí),它在圓環(huán)空間上隨機(jī)選擇一個(gè)片段作為它的位置。為了使系統(tǒng)能夠容錯(cuò),圓環(huán)上節(jié)點(diǎn)的位置映射永久的保存在本地磁盤上,同時(shí)也存儲(chǔ)在領(lǐng)導(dǎo)節(jié)點(diǎn)上。然后,這個(gè)片段的信息被以“Gossip”的方式傳遞到集群中的其他節(jié)點(diǎn)上。通過(guò)這種方式,圓環(huán)空間上的所有節(jié)點(diǎn)都能夠同時(shí)了解其他節(jié)點(diǎn)的位置及存儲(chǔ)情況。這也保證了在復(fù)制一節(jié)中提到的高度的數(shù)據(jù)可獲得性:因?yàn)槊總(gè)節(jié)點(diǎn)都存有其他所有節(jié)點(diǎn)的信息,因此,當(dāng)任一節(jié)點(diǎn)接受到讀寫請(qǐng)求時(shí),它能夠?qū)⑨槍?duì)某個(gè)Key值的請(qǐng)求正確的傳遞到存儲(chǔ)這個(gè)Key值的其他節(jié)點(diǎn)上。通過(guò)bootstrapping,當(dāng)一個(gè)節(jié)點(diǎn)需要接入集群時(shí),首先它會(huì)讀取其配置文件中的連接點(diǎn)列表。這些集群中初始的連接點(diǎn)被稱為集群的種子,種子也可以來(lái)自配置服務(wù),如領(lǐng)導(dǎo)節(jié)點(diǎn)Zookeeper。
5. 擴(kuò)展增容
在分區(qū)一節(jié)中,曾經(jīng)提到過(guò)Cassandra系統(tǒng)高度的擴(kuò)展性,即新加入的存儲(chǔ)節(jié)點(diǎn)不會(huì)影響整個(gè)系統(tǒng)的正常工作。具體而言,當(dāng)一個(gè)新的節(jié)點(diǎn)加入到系統(tǒng)中時(shí),它被指派一個(gè)圓環(huán)空間上的片段,來(lái)緩解高負(fù)荷的節(jié)點(diǎn)。這種方式的結(jié)果是,新的節(jié)點(diǎn)會(huì)分割其他節(jié)點(diǎn)原來(lái)負(fù)責(zé)的區(qū)域,而新的節(jié)點(diǎn)只會(huì)分割它在圓環(huán)上的位置周圍的節(jié)點(diǎn)的存儲(chǔ)區(qū)域,而不會(huì)影響其他區(qū)域。存儲(chǔ)空間被分割的節(jié)點(diǎn)將其放棄的數(shù)據(jù)使用“kernel-kernel”的復(fù)制技術(shù)傳遞給新的節(jié)點(diǎn)。實(shí)際運(yùn)行情況表明這些數(shù)據(jù)可以以每秒40MB的速度從一個(gè)單一節(jié)點(diǎn)傳遞到其他節(jié)點(diǎn)。Cassandra的開發(fā)人員通過(guò)使多個(gè)副本同時(shí)參與“bootstrap”傳輸來(lái)提高傳輸速度,這種并行傳輸?shù)姆绞降臋C(jī)制與Bittorrent相似。通過(guò)高速的復(fù)制技術(shù),Cassandra系統(tǒng)達(dá)到了高度的擴(kuò)展性。
以上五種技術(shù)是在Cassandra系統(tǒng)中應(yīng)用的比較核心的分布存儲(chǔ)技術(shù),他們協(xié)同工作,保證了數(shù)據(jù)高度的可獲得性和擴(kuò)展性。當(dāng)數(shù)據(jù)量不斷擴(kuò)大時(shí),Cassandra系統(tǒng)能夠使用以上方法很好的保持系統(tǒng)的穩(wěn)定,此外以上方法也保證了數(shù)據(jù)的安全性,基于復(fù)制機(jī)制的存儲(chǔ)方式不僅提高了可獲得性,同時(shí)面對(duì)若干主機(jī)出現(xiàn)癱瘓的情形,也能保持系統(tǒng)的正常工作,并且確保數(shù)據(jù)不會(huì)丟失。同時(shí),Cassandra系統(tǒng)也能夠保證數(shù)據(jù)的持久性,這種數(shù)據(jù)的持久性要依賴本地文件系統(tǒng)。具體而言,對(duì)于寫操作,通常涉及兩個(gè)子操作:1.將寫操作記錄到一個(gè)“commitlog”中;2.當(dāng)前一個(gè)操作成功后,更新內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)。當(dāng)內(nèi)存中的數(shù)據(jù)容量達(dá)到一個(gè)特定值時(shí),它將自己導(dǎo)入本地磁盤中。所有的寫操作都連續(xù)存儲(chǔ)在本地磁盤上,并且建立行主鍵的索引以便查詢,這些索引與數(shù)據(jù)文件一同存儲(chǔ)。對(duì)于讀操作,首先查詢內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),找不到所需信息時(shí)才檢索本地磁盤。這種內(nèi)存—磁盤的雙重存儲(chǔ),和首先將任一寫操作記錄到“commitlog”并存入磁盤的方式,通過(guò)本地文件系統(tǒng)的持久性保證了數(shù)據(jù)的持久性。
總結(jié)
Cassandra分布存儲(chǔ)系統(tǒng)旨在應(yīng)對(duì)海量數(shù)據(jù)的存儲(chǔ)、數(shù)據(jù)的安全性問(wèn)題以及基于Key-value的查詢需求。通過(guò)運(yùn)用上文提到的各種技術(shù),Cassandra將數(shù)據(jù)從傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)單一數(shù)據(jù)中心的存儲(chǔ)方式過(guò)渡到分布的存儲(chǔ)方式。具體而言,Cassandra的系統(tǒng)結(jié)構(gòu)為多個(gè)分布在不同地點(diǎn)的存儲(chǔ)節(jié)點(diǎn),這些節(jié)點(diǎn)通過(guò)高速網(wǎng)絡(luò)相連。數(shù)據(jù)通過(guò)某種哈希算法被指派到系統(tǒng)中的各個(gè)節(jié)點(diǎn)中。同時(shí),系統(tǒng)利用復(fù)制的技術(shù)將存儲(chǔ)在不同節(jié)點(diǎn)內(nèi)的數(shù)據(jù)信息復(fù)制到其他節(jié)點(diǎn)上,這保證了數(shù)據(jù)的安全性,同時(shí)也提高了數(shù)據(jù)的獲取速度,具體的分配機(jī)制見(jiàn)上文“分區(qū)”一節(jié)的介紹。當(dāng)數(shù)據(jù)量不斷擴(kuò)大時(shí),會(huì)有更多的節(jié)點(diǎn)加入到Cassandra系統(tǒng)的集群中,Cassandra節(jié)點(diǎn)集群的圓環(huán)邏輯結(jié)構(gòu)保證了節(jié)點(diǎn)的加入不會(huì)影響系統(tǒng)中其他節(jié)點(diǎn)的工作,這使得系統(tǒng)具有良好的擴(kuò)展性能。這種分區(qū)-復(fù)制的技術(shù)也保證了當(dāng)系統(tǒng)中一個(gè)或多個(gè)節(jié)點(diǎn)癱瘓時(shí),系統(tǒng)仍能正常工作,這是因?yàn)槊總(gè)節(jié)點(diǎn)上不僅存儲(chǔ)了自己復(fù)制的區(qū)域內(nèi)的數(shù)據(jù),還保存著其他節(jié)點(diǎn)內(nèi)數(shù)據(jù)的副本和所有節(jié)點(diǎn)存儲(chǔ)情況的元數(shù)據(jù),進(jìn)而在發(fā)生節(jié)點(diǎn)癱瘓時(shí)保證數(shù)據(jù)的安全。
相對(duì)于關(guān)系型數(shù)據(jù)庫(kù),Cassandra分布存儲(chǔ)系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)并不能很好的支持復(fù)雜的結(jié)構(gòu)關(guān)系查詢,但是對(duì)于一些只針對(duì)某個(gè)Key值進(jìn)行簡(jiǎn)單查詢的數(shù)據(jù),其性能和反應(yīng)時(shí)間要遠(yuǎn)遠(yuǎn)優(yōu)于關(guān)系型數(shù)據(jù)庫(kù)。比如在當(dāng)今流行的各大網(wǎng)絡(luò)社區(qū)或B2B,B2C網(wǎng)站中,面對(duì)海量的數(shù)據(jù)和每天大量的信息吞吐量,Cassandra這類基于Key-value的分布式存儲(chǔ)系統(tǒng)會(huì)逐漸的更加廣泛地得到應(yīng)用。
參考文獻(xiàn):
[1]. GiuseppeDeCandia,DenizHastorun,MadanJampani,GunavardhanKakulapati,AvinashLakshman,AlexPilchin,SwaminathanSivasubramanian,PeterVosshallandWernerVogels,Dynamo:Amazon’sHighlyAvailableKey-valueStore,2007
[2]. FayChang,JeffreyDean,SanjayGhemawat,WilsonC.Hsieh,DeborahA.WallachMikeBurrows,TusharChandra,AndrewFikes,RobertE.Gruber,Bigtable:ADistributedStorageSystemforStructuredData,2006
[3]. AvinashLakshman,PrashantMalik,Cassandra-ADecentralizedStructuredStorageSystem,2009
[4]. ArinSarkissian,WTFisaSuperColumn?AnIntrototheCassandraDataModel,2010-3-22
[5]. MoritzY.BeckerPeterSewell,ComputerLaboratory,UniversityofCambridge,JJThomsonAvenue,Cambridge,UnitedKingdom,Cassandra:DistributedAccessControlPolicieswithTunableExpressiveness
[6]. JonathanEllis,Cassandra_OpenSourceBigtable+Dynamo,2010
[7]. RonaldMathies,InstallingandusingApacheCassandraWithJavaPart1(Installation),InstallingandusingApacheCassandraWithJavaPart2(Datamodel),InstallingandusingApacheCassandraWithJavaPart3(Datamodel2),InstallingandusingApacheCassandraWithJavaPart4(ThriftClient),InstallingandusingApacheCassandraWithJavaPart5(ThriftClient2),2010
[8]. MikePerham,CassandraInternals–WritingandReading,http://www.mikeperham.com,2010
文章標(biāo)題:Cassandra 分布存儲(chǔ)系統(tǒng)簡(jiǎn)介
轉(zhuǎn)載請(qǐng)注明來(lái)自:http://m.anghan.cn/fblw/zf/zhishi/4601.html
攝影藝術(shù)領(lǐng)域AHCI期刊推薦《Phot...關(guān)注:106
Nature旗下多學(xué)科子刊Nature Com...關(guān)注:152
中小學(xué)教師值得了解,這些教育學(xué)...關(guān)注:47
2025年寫管理學(xué)論文可以用的19個(gè)...關(guān)注:192
測(cè)繪領(lǐng)域科技核心期刊選擇 輕松拿...關(guān)注:64
及時(shí)開論文檢索證明很重要關(guān)注:52
中國(guó)水產(chǎn)科學(xué)期刊是核心期刊嗎關(guān)注:54
國(guó)際出書需要了解的問(wèn)題解答關(guān)注:58
合著出書能否評(píng)職稱?關(guān)注:48
電信學(xué)有哪些可投稿的SCI期刊,值...關(guān)注:66
通信工程行業(yè)論文選題關(guān)注:73
SCIE、ESCI、SSCI和AHCI期刊目錄...關(guān)注:121
評(píng)職稱發(fā)論文好還是出書好關(guān)注:68
復(fù)印報(bào)刊資料重要轉(zhuǎn)載來(lái)源期刊(...關(guān)注:51
英文期刊審稿常見(jiàn)的論文狀態(tài)及其...關(guān)注:69
Web of Science 核心合集期刊評(píng)估...關(guān)注:59
政治法律論文范文
軍事論文 城市管理論文 思想政治論文 國(guó)際政治論文 行政管理論文 勞動(dòng)與社會(huì)保障論文 國(guó)際法論文 公司法論文 婚姻家庭法論文 環(huán)境法論文 知識(shí)產(chǎn)權(quán)論文 民事訴訟論文 民商法論文 犯罪學(xué)論文 法律史論文 行政法論文 憲法論文 法理論文 刑法論文 刑事訴訟法論文
SCI期刊分析
copyright © m.anghan.cn, All Rights Reserved
搜論文知識(shí)網(wǎng) 冀ICP備15021333號(hào)-3