成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Riak 中的 CAP - 分布式數(shù)據(jù)庫相關(guān)理論 Part4

yearsj / 716人閱讀

摘要:和上一篇博文一樣,這次我們依舊以為案例,來分析理論在一個實(shí)際的分布式數(shù)據(jù)庫中的作用。這次我們來看看,在這樣的分布式數(shù)據(jù)庫中,理論是怎么起作用的。需要最終包含正確的值的服務(wù)器節(jié)點(diǎn)總數(shù)正確的冗余數(shù)據(jù)拷貝數(shù)。其實(shí)這就是關(guān)系型數(shù)據(jù)庫的做法。

和上一篇博文一樣,這次我們依舊以 Riak 為案例,來分析 CAP 理論在一個實(shí)際的分布式數(shù)據(jù)庫中的作用。

如果你還不熟悉 CAP,可以參考我之前的兩篇博客 理解 CAP 理論, 最終一致性.html)。

這次我們來看看,在 Riak 這樣的分布式key-value數(shù)據(jù)庫中,CAP理論是怎么起作用的。

Nodes/Writes/Reads

首先還是讓我們來明確幾個概念。

N odes

需要"最終"包含正確的值的服務(wù)器節(jié)點(diǎn)總數(shù)(正確的冗余數(shù)據(jù)拷貝數(shù))。

W rites

每次寫操作,我們需要確保最少有多少節(jié)點(diǎn)被更新。也就是說,我們在執(zhí)行寫操作的時候,不需要等待 N 個節(jié)點(diǎn)都成功被寫入,
而只需要 W 個節(jié)點(diǎn)成功寫入,這次寫操作就返回成功,而其他節(jié)點(diǎn)是在后臺進(jìn)行同步。

R eads

每次讀操作,我們需要確保最少讀到幾份冗余數(shù)據(jù)。也就是說,我們在執(zhí)行讀操作的時候,需要讀到 R 個節(jié)點(diǎn)的數(shù)據(jù)才算讀成功,否則讀取失敗。

為什么要這三個變量?其實(shí)這三個變量直接關(guān)系到了 Riak 的 CAP 特性。下面我們就來一一說明:

Eventual Consistency(W + R <= N)

如下圖所示:假設(shè)我們的 N=3, 設(shè)置 W + R <= N(例如:R=2, W=1)。這樣我們的系統(tǒng)可以相對保證讀寫性能。
因?yàn)閷懖僮髦恍枰粋€節(jié)點(diǎn)寫入就返回成功。

然而這里有機(jī)率發(fā)生這樣的情況:就像圖中所示,我寫入的是node1(versionB),然后進(jìn)行了一次讀操作。
恰好這時候新數(shù)據(jù)尚未同步到node2, node3,而讀操作又是從node2,node3取的值。由于這兩個節(jié)點(diǎn)的值都是 version A,
所以得到的值便是 version A。

不過隨著時間的推移,node1 中的 versionB 會被同步到 node2 以及 node3 中。
這時候,再有讀操作,得到的值便是最新值(versionB)了。

這就是所謂的 Eventual Consistency。整個系統(tǒng)有著較高的讀寫性能,但一致性有所犧牲。

如果我們需要加強(qiáng)一致性,可以通過調(diào)整 W, R, N 來實(shí)現(xiàn)。

接下來我們會討論如何調(diào)整 W,R,N 的關(guān)系來平衡讀寫性能和一致性(即 A 和 C 的平衡)。

通過調(diào)節(jié) W,R,N 的關(guān)系來調(diào)節(jié)一致性和讀寫性能的關(guān)系

一種極端做法(下圖所示),我們可以設(shè) W=N, R=1。其實(shí)這就是關(guān)系型數(shù)據(jù)庫的做法。
通過確保每次寫操作時,所有相關(guān)節(jié)點(diǎn)都被成功寫入,來確保一致性。這樣可以保證一致性,但是犧牲了寫操作的性能。

還有一種極端做法,我們可以設(shè)W=1, R=N。這樣,無論你向哪個node寫入了數(shù)據(jù),都會被讀到。
然后你讀到的N個值也可能包含舊的值,只要有辦法分辨出哪個是最新的值就可以了
(Riak 是用一直叫向量鐘(Vector Clock)的技術(shù)來判斷的,我們會在后面的博客中做介紹)
這樣可以保證一致性,但是犧牲了讀操作的性能。

最后再給出一種被稱作 quorum 的做法。如下圖所示,可以設(shè)置 W + R > N (例如 W=2, R=2)。這樣同樣可以保證一致性。
然而性能的損失由寫操作和讀操作共同承擔(dān)。這種做法叫做 quorum。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/17458.html

相關(guān)文章

  • Riak布式數(shù)據(jù)庫模型 - 布式數(shù)據(jù)庫相關(guān)理論 Part3

    摘要:在分布式數(shù)據(jù)庫中,一份數(shù)據(jù)往往會存儲多份拷貝所謂冗余,或者現(xiàn)在,假設(shè)我們有一個服務(wù)器節(jié)點(diǎn),存有三個數(shù)據(jù)分別是,。 Riak 是什么 Riak 是一個 erlang 開發(fā)的開源的分布式 key-value 數(shù)據(jù)庫,在 High Availability, Fault Tolerance, Scalability 方面表現(xiàn)優(yōu)異。其實(shí)現(xiàn)受 Amazon Dynamodb 啟發(fā),是一個很有代...

    wthee 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<