CAP理論與分布式數(shù)據(jù)庫(kù)_第1頁(yè)
CAP理論與分布式數(shù)據(jù)庫(kù)_第2頁(yè)
CAP理論與分布式數(shù)據(jù)庫(kù)_第3頁(yè)
CAP理論與分布式數(shù)據(jù)庫(kù)_第4頁(yè)
CAP理論與分布式數(shù)據(jù)庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、根據(jù)CAP理論,一致性(C),可用性(A),分區(qū)容錯(cuò)性(P),三者不可兼得,必須有所取舍。 而傳統(tǒng)數(shù)據(jù)庫(kù)保證了強(qiáng)一致性(ACID模型)和高可用性,所以要想實(shí)現(xiàn)一個(gè)分布式數(shù)據(jù)庫(kù)集 群非常困難,這也解釋了為什么數(shù)據(jù)庫(kù)的擴(kuò)展能力十分有限。而近年來(lái)不斷發(fā)展壯大的 NoSQL運(yùn)動(dòng),就是通過(guò)犧牲強(qiáng)一致性,采用BASE模型,用最終一致性的思想來(lái)設(shè)計(jì)分布 式系統(tǒng),從而使得系統(tǒng)可以達(dá)到很高的可用性和擴(kuò)展性。但是,對(duì)于CAP理論也有一些不同的聲音,數(shù)據(jù)庫(kù)大師Michael Stonebraker就撰文Errors in Database Systems, Eventual Consistency, and the

2、 CAP Theorem,表示為了 P 而犧牲 C 是不 可取的。事實(shí)上,數(shù)據(jù)庫(kù)系統(tǒng)最大的優(yōu)勢(shì)就對(duì)一致性的保證,如果我們放棄了一致性,也許 NoSQL比數(shù)據(jù)庫(kù)更有優(yōu)勢(shì)。那么,有沒(méi)有可能實(shí)現(xiàn)一套分布式數(shù)據(jù)庫(kù)集群,即保證可用性 和一致性,又可以提供很好的擴(kuò)展能力呢?回答是:有的。目前,有很多分布式 數(shù)據(jù)庫(kù)的產(chǎn)品,但是絕大部分是面向DSS類(lèi)型的應(yīng)用,因?yàn)橄啾容^ OLTP應(yīng)用,DSS應(yīng)用更容易做到分布式擴(kuò)展。Michael Stonebraker提到了一種新型的數(shù)據(jù) 庫(kù) VoltDB,它的定義是 Next-Generation SQL Database for Fast-Scaling OLTP Ap

3、plications 雖 然產(chǎn)品還沒(méi)有問(wèn)世,但是從技術(shù)資料上來(lái)看,它有幾個(gè)特點(diǎn):采用Share nothing架構(gòu),將物理服務(wù)器劃分為以CPU core為單位的Virtual node,采用 Sharding技術(shù),將數(shù)據(jù)自動(dòng)分布到不同的Virtual node,最大限度的利用機(jī)器的計(jì)算資源;采用內(nèi)存數(shù)據(jù)訪(fǎng)問(wèn)技術(shù),類(lèi)似于內(nèi)存數(shù)據(jù)庫(kù)(In-memory database),區(qū)別于傳統(tǒng)的數(shù)據(jù)庫(kù) (Disk-based database),消除了傳統(tǒng)數(shù)據(jù)庫(kù)內(nèi)存管理的開(kāi)銷(xiāo),而且響應(yīng)速度非??欤幻總€(gè)Virtual node上的操作是自治的,利用隊(duì)列技術(shù)將并發(fā)訪(fǎng)問(wèn)變?yōu)榇性L(fǎng)問(wèn),消除了傳 統(tǒng)數(shù)據(jù)庫(kù)串行控制的開(kāi)

4、銷(xiāo)(比如Latch和Lock);數(shù)據(jù)同步寫(xiě)多個(gè)副本,不存在單點(diǎn)故障,而且消除了傳統(tǒng)數(shù)據(jù)庫(kù)需要記錄redo log的開(kāi)銷(xiāo)。Sharednothing OLTP DBMS Rijn?5CindLJSrcif nodes connectedbyLANSingie4hreaded execution engines3 deployed to each coreTables automatically partitioned & distributed to engines where theyre processed at main memory speedDistributed execution

5、planner assigns work to engines, which ope rate exclusively on their assigned partitionsAuto replicabon & recovery across nodes for high availability d across casters for disaster recoveryVoltDB與傳統(tǒng)數(shù)據(jù)庫(kù)的對(duì)比,可以看到VoltDB即支持傳統(tǒng)數(shù)據(jù)庫(kù)的ACID模型,又提供了 類(lèi)似NoSQL產(chǎn)品很高的擴(kuò)展能力。mysqldmysqldCastons Ciients CNDBAPI)這個(gè)產(chǎn)品,讓我想到了 M

6、ySQL cluster,同樣是shared-nothing架構(gòu),NDB存儲(chǔ)引擎也要求 將數(shù)據(jù)存放在內(nèi)存中,數(shù)據(jù)根據(jù)PK被分布到多個(gè)不同的節(jié)點(diǎn)上,同一份數(shù)據(jù)可以保存多個(gè) 副本,防止單點(diǎn)故障。(NDBManagement I-勰mJMySQLC APINDB Management Server ndb_ingmdClients / APIsPHPmysqldData NodesI iCon nector/ N ET| / /J Connector/JNoSQLVoltDBTraditionalDBMSScale-outgrowth Clustered high availability Inte

7、grated replication ACID compliant SQL interface Single-threadedAgile schema.Cross-partition joinsIn app codeIn app code AutomaticCost at web scaleB中MySQL cluster目前的主要問(wèn)題是性能不佳,但是我認(rèn)為MySQL cluster的架構(gòu)是分布式數(shù) 據(jù)庫(kù)未來(lái)的趨勢(shì),Oracle收購(gòu)MySQL后,很多人對(duì)MySQL的前途表示擔(dān)憂(yōu),而我作為一 個(gè)用戶(hù),除了可能會(huì)收費(fèi)這件事以外,我一點(diǎn)也不擔(dān)心MySQL的前景,反而有所期待,因 為在數(shù)據(jù)庫(kù)領(lǐng)域沒(méi)有任何

8、一個(gè)公司比Oracle更懂?dāng)?shù)據(jù)庫(kù),而Oracle也正在大力發(fā)展MySQL cluster,MySQL cluster一定會(huì)成為分布式數(shù)據(jù)庫(kù)領(lǐng)域內(nèi)最好的解決方案之一。NoSQL數(shù)據(jù)庫(kù)異軍突起,隨著Digg和大型應(yīng)用不斷采取NoSQL,NoSQL運(yùn)動(dòng) 已經(jīng)蓬勃發(fā)展,NoSQL數(shù)據(jù)庫(kù)很多,如何對(duì)他們分類(lèi),以便方便地根據(jù)自己應(yīng)用特色選擇 不同的NoSQL數(shù)據(jù)庫(kù)呢?NoSQL = HVSP無(wú)(傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)的)join或明顯事務(wù)的高容量簡(jiǎn)單處理。按照數(shù)據(jù)模型保存性質(zhì)將當(dāng)前NoSQL分為四種:Key-value stores 鍵值存儲(chǔ),保存 keys+BLOBs (二進(jìn)制大對(duì)象 Binary Large

9、OBjects)Table-oriented 面向表,主要有 Google 的 BigTable 和 Cassandra.Document-oriented面向文本,文本是一種類(lèi)似XML文檔,MongoDB和CouchDBGraph-oriented 面向圖論.如 Neo4J.NoSQL 一般都是分布式數(shù)據(jù)庫(kù),高性能是其特點(diǎn),因此,數(shù)據(jù)是如何被分布、復(fù)制/碎片 以及合成就成為關(guān)鍵,這其中涉及你的應(yīng)用對(duì)數(shù)據(jù)一致性的要求,見(jiàn)CAP原理,不同一致 性處理方式?jīng)Q定不同類(lèi)型:基本上基于Dynamo.核心思想就是在多個(gè)節(jié)點(diǎn)之間獲得最終一致性就可以,即使你有 時(shí)會(huì)讀到臟數(shù)據(jù).好處是寫(xiě)數(shù)據(jù)時(shí)從來(lái)不會(huì)阻塞。那種

10、強(qiáng)制性節(jié)點(diǎn)一致性,如2PC,兩段事 務(wù)提交將會(huì)讓你的寫(xiě)關(guān)閉停頓,使用Dynamo-like風(fēng)格你能將數(shù)據(jù)寫(xiě)到多個(gè)節(jié)點(diǎn)中,通過(guò) 一致hashing,然后你可以從這些節(jié)點(diǎn)讀取數(shù)據(jù),返回正確結(jié)果給用戶(hù)?;净贐igTable.這種模型中,使用常用方式保持節(jié)點(diǎn)充分的一致性。比如同步復(fù)制, 由數(shù)據(jù)自己活或數(shù)據(jù)所在位置來(lái)實(shí)現(xiàn)一致性,不同產(chǎn)品實(shí)現(xiàn)細(xì)節(jié)不一樣。比如:MongoDB有一個(gè)面向文本類(lèi)型的數(shù)據(jù)模型,它采取類(lèi)似BigTable-like復(fù)制策略; Cassandra有面向表table-like數(shù)據(jù)模型,采取的是Dynamo-like風(fēng)格.以后應(yīng)該有數(shù)據(jù)是如何被持久化保存到磁盤(pán)上的區(qū)分,不同NoSQL

11、處理策略不一樣,有 的是寫(xiě)一次保存一次;有的是定期保存,后者性能要好些。_ NoSQL數(shù)據(jù)庫(kù)最終一致性/BASE VS ACIDCAP理論六月 22nd, 2010 No Comments 存儲(chǔ)&NoSQL作者:閻斌|可以轉(zhuǎn)載,但必須以超鏈接形式標(biāo)明文章原始出處和作者信息網(wǎng)址:http:/UltimateA10年前,Eric Brewer教授提出了非常著名的CAP理論,后人也論證了 CAP理論的正確性。CAP理論指出:一個(gè)分布式系統(tǒng)不可能同時(shí)滿(mǎn)足一致性(Consistency),可用性(Availibility) 和分區(qū)容忍性(Partition Tolerance)這三個(gè)需求。最多只能同時(shí)滿(mǎn)

12、足其中的兩個(gè)。 一致性(Consistency):對(duì)于分布式的存儲(chǔ)系統(tǒng),一個(gè)數(shù)據(jù)往往會(huì)存在多份。簡(jiǎn)單的說(shuō),一致性會(huì)讓 客戶(hù)對(duì)數(shù)據(jù)的修改操作(增/刪/改)要么在所有的數(shù)據(jù)副本(在英文文獻(xiàn)中 常稱(chēng)為Replica)全部成功,要么全部失敗。即,修改操作對(duì)于一份數(shù)據(jù)的所 有副本而言,是原子(Atomic)的操作。如果一個(gè)存儲(chǔ)系統(tǒng)可以保證一致性,那么則客戶(hù)讀寫(xiě)的數(shù)據(jù)完全可以保證是 最新的。不會(huì)發(fā)生兩個(gè)不同的客戶(hù)端在不同的存儲(chǔ)節(jié)點(diǎn)中讀取到不同副本的 情況。 可用性(Availability):可用性很簡(jiǎn)單,顧名思義,就是指在客戶(hù)端想要訪(fǎng)問(wèn)數(shù)據(jù)的時(shí)候,可以得到 響應(yīng)。但是注意,系統(tǒng)可用(Available)

13、并不代表存儲(chǔ)系統(tǒng)所有節(jié)點(diǎn)提供的 數(shù)據(jù)是一致的。比如客戶(hù)端想要讀取文章評(píng)論,存儲(chǔ)系統(tǒng)可以返回客戶(hù)端數(shù) 據(jù),但是評(píng)論缺少最新的一條。這種情況,我們?nèi)匀徽f(shuō)系統(tǒng)是可用的。往往我們會(huì)對(duì)不同的應(yīng)用設(shè)定一個(gè)最長(zhǎng)響應(yīng)時(shí)間,超過(guò)這個(gè)響應(yīng)時(shí)間的服務(wù) 我們?nèi)匀环Q(chēng)之為不可用的。分區(qū)容忍性(Partition Tolerance):如果你的存儲(chǔ)系統(tǒng)只運(yùn)行在一個(gè)節(jié)點(diǎn)上,要么系統(tǒng)整個(gè)崩潰,要么全部運(yùn)行 良好。一旦針對(duì)同一服務(wù)的存儲(chǔ)系統(tǒng)分布到了多個(gè)節(jié)點(diǎn)后,整個(gè)存儲(chǔ)系統(tǒng)就 存在分區(qū)的可能性。比如,兩個(gè)存儲(chǔ)節(jié)點(diǎn)之間聯(lián)通的網(wǎng)絡(luò)斷開(kāi)(無(wú)論長(zhǎng)時(shí)間 或者短暫的),就形成了分區(qū)。對(duì)當(dāng)前的互聯(lián)網(wǎng)公司(例如Google)來(lái)說(shuō),為了提高服務(wù)質(zhì)量

14、,同一份數(shù)據(jù) 放置在不同城市乃至不同國(guó)家是非常正常的。因此節(jié)點(diǎn)之間形成分區(qū)也很正 常。Gilbert和Lynch將分區(qū)容忍性定義如下:No set of failures less than total network failure is allowed to cause the system to respond incorrectly除全部網(wǎng)絡(luò)節(jié)點(diǎn)全部故障以外,所有子節(jié)點(diǎn)集合的故障都不允許導(dǎo)致整個(gè)系 統(tǒng)不正確響應(yīng)。我在另外一篇文章(BASE: An Acid Alternative)中找到了一個(gè)對(duì)分區(qū)容忍性更為恰當(dāng)好理解的解釋?zhuān)篛perations will complete, even

15、 if individual components are unavailable.(即使部分的組件不可用,施加的操作也可以完成)CAP說(shuō)明:在設(shè)計(jì)一個(gè)分布式存儲(chǔ)系統(tǒng)時(shí),你不得不在三個(gè)特性中選擇放棄 一個(gè)。如果選擇Partition Tolerance和Consistency,那么即使壞了節(jié)點(diǎn),操作必須 又一致,又能順利完成。所以就必須100%保證所有節(jié)點(diǎn)之間有很好的連通 性。這是很難做到的。最好的辦法就是將所有數(shù)據(jù)放到同一個(gè)節(jié)點(diǎn)中。但是 顯然這種設(shè)計(jì)是不滿(mǎn)足Availability的。如果要滿(mǎn)足Availability和Consistency,那么,為了保證可用,數(shù)據(jù)必須要 有Replica。這樣,系統(tǒng)顯然無(wú)法容忍Partitiono當(dāng)同一數(shù)據(jù)的兩個(gè)副本(Replica)分配到了兩個(gè)無(wú)法通信的Partition上時(shí),顯然會(huì)返回錯(cuò)誤的數(shù)據(jù)。最后看一下滿(mǎn)足Availability和Partition Tolerance的情況。滿(mǎn)足可用,就說(shuō) 明數(shù)據(jù)必須要在不同節(jié)點(diǎn)中有replica。然而還必須保證在產(chǎn)生Partition的時(shí) 候仍然操作可以完成。那么,必然操作

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論