日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Riak - 背景篇(1)

發(fā)布時(shí)間:2024/1/1 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Riak - 背景篇(1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

分布式高可用鍵值對(duì)數(shù)據(jù)庫(kù)Riak - 背景篇(1)

Riak簡(jiǎn)介

典型的現(xiàn)代關(guān)系數(shù)據(jù)庫(kù)在某些類型的應(yīng)用程序中表現(xiàn)平平,難以滿足如今的互聯(lián)網(wǎng)應(yīng)用程序的性能和可擴(kuò)展性要求。因此,需要采用不同的方法。在過(guò)去幾年中,一種新的數(shù)據(jù)存儲(chǔ)類型變得非常流行,通常稱為 NoSQL,因?yàn)樗梢灾苯咏鉀Q關(guān)系數(shù)據(jù)庫(kù)的一些缺陷。Riak 就是這類數(shù)據(jù)存儲(chǔ)類型中的一種。
Riak 并不是惟一的一種 NoSQL 數(shù)據(jù)存儲(chǔ)。另外兩種較流行的數(shù)據(jù)存儲(chǔ)是 MongoDB 和 Cassandra。盡管在許多方面十分相似,但是它們之間也存在明顯的不同。例如,Riak 是一種分布式系統(tǒng),而 MongoDB 是一種單獨(dú)的系統(tǒng)數(shù)據(jù)庫(kù),也就是說(shuō),Riak 沒(méi)有主節(jié)點(diǎn)的概念,因此在處理故障方面有更好的彈性。盡管 Cassandra 同樣是基于 Amazon 的 Dynamo 描述,但是它在組織數(shù)據(jù)方面摒棄了向量時(shí)鐘和相容散列等特性。Riak 的數(shù)據(jù)模型更加靈活。在 Riak 中,在第一次訪問(wèn) bucket 時(shí)會(huì)動(dòng)態(tài)創(chuàng)建這些 bucket;Cassandra 的數(shù)據(jù)模型是在 XML 文件中定義的,因此在修改它們過(guò)后需要重啟整個(gè)集群。
Riak 是用 Erlang 編寫(xiě)的。而 MongoDB 和 Cassandra 是用通用語(yǔ)言(分別為 C++和 Java)編寫(xiě),因此 Erlang 從一開(kāi)始就支持分布式、容錯(cuò)應(yīng)用程序,所以更加適用于開(kāi)發(fā) NoSQL 數(shù)據(jù)存儲(chǔ)等應(yīng)用程序,這些應(yīng)用程序與使用 Erlang 編寫(xiě)的應(yīng)用程序有一些共同的特征。
Riak支持Map/Reduce 作業(yè),但是Map/Reduce 作業(yè)只能使用 Erlang 或 JavaScript 編寫(xiě)。

分布式存儲(chǔ)?一個(gè)頭疼的問(wèn)題

目前,基于互聯(lián)網(wǎng)的業(yè)務(wù)都處于量級(jí)高速變化的狀態(tài)(要么增長(zhǎng)特別快,要么萎縮特別快)。一個(gè)比較頭疼的問(wèn)題就是如何存儲(chǔ)并保持高速訪問(wèn)業(yè)務(wù)數(shù)據(jù)。很多公司采用了分布式存儲(chǔ)的解決方案,這帶來(lái)了一些更令人頭疼的問(wèn)題:

  • 很難擴(kuò)容:如果現(xiàn)在業(yè)務(wù)發(fā)展迅速,3臺(tái)主機(jī)撐不住了,需要加到5臺(tái)主機(jī),那要如何處理呢?首先要更改分類方法,把用戶分成5類,然后重新遷移已經(jīng)存在的數(shù)據(jù)。你要在網(wǎng)站上貼個(gè)條子,“系統(tǒng)維護(hù)中”,然后開(kāi)始偉大的遷移工程,等到終于遷移完成,發(fā)現(xiàn)其實(shí)3臺(tái)也不用了,用戶都走光了-_-。
  • 數(shù)據(jù)高可用性無(wú)法保證:有一天,發(fā)現(xiàn)有一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的硬盤(pán)壞了,這下麻煩就來(lái)了,本來(lái)網(wǎng)站就不賺錢,沒(méi)用什么高檔機(jī)器,只有一個(gè)定期的增量備份而已。經(jīng)過(guò)一天復(fù)雜的恢復(fù)工作,你還要對(duì)部分用戶說(shuō),麻煩你們把做過(guò)的事情再做一遍啊。然后用戶對(duì)你說(shuō)go fuck yourself,你發(fā)現(xiàn)你再也不用維護(hù)或者恢復(fù)用戶數(shù)據(jù)了,因?yàn)樗麄冇肿吖饬恕?/li>
  • 單點(diǎn)問(wèn)題:負(fù)責(zé)把用戶分類,然后決定使用哪個(gè)數(shù)據(jù)服務(wù)器的那臺(tái)主機(jī)是網(wǎng)站的命根子啊,它如果宕機(jī),所有的數(shù)據(jù)都不能訪問(wèn)了,它如果滿負(fù)荷了,增加數(shù)據(jù)服務(wù)器也不會(huì)對(duì)整體性能有幫助。我好像看到一臺(tái)貼滿著驅(qū)邪保平安符咒的pc server。
  • 寫(xiě)入還要重試:倘若你后臺(tái)某個(gè)用戶對(duì)應(yīng)的存儲(chǔ)介質(zhì)因?yàn)槟巢豢芍驋斓袅?#xff0c;用戶發(fā)現(xiàn)無(wú)論發(fā)送什么請(qǐng)求后臺(tái)都沒(méi)反應(yīng),也不知道自己的請(qǐng)求到底成功沒(méi)有。這時(shí)考驗(yàn)用戶忠誠(chéng)度和心理素質(zhì)的時(shí)候到了,想想如果是像支付寶買一件奢侈品的時(shí)候,你敢重試好幾次么。
  • 接下來(lái)我們將針對(duì)每個(gè)問(wèn)題將Dynamo的解決方案展示給大家。

    Dynamo擴(kuò)容與一致性哈希

    我們運(yùn)用快遞員與運(yùn)單的場(chǎng)景,假設(shè)我們的數(shù)據(jù)庫(kù)存儲(chǔ)每個(gè)快遞員的所有運(yùn)單記錄。現(xiàn)在有A,B,C,D,E這五臺(tái)機(jī)器,有200個(gè)快遞員,有2000條運(yùn)單記錄。我們很容易想到通過(guò)哈希取模來(lái)平均分配這200個(gè)快遞員與2000個(gè)運(yùn)單對(duì)應(yīng)關(guān)系。通過(guò)快遞員對(duì)5取模,即A(1,6,11,16…), B(2,7,12,17…), C(3,8,13,18…), D(4,9,14,19…), E(5,10,15,20…),保存對(duì)應(yīng)的快遞員與運(yùn)單關(guān)系(其實(shí)就是快遞員為key運(yùn)單為value)。
    如果這時(shí),我們想擴(kuò)容到六臺(tái),那么變成A(1,7,13,19…), B(2,8,14,20…), C(3,9,15…), D(4,10,16…), E(5,11,17…), F(6,12,18…). 遷移量非常大。如何減少遷移量呢?
    Dynamo采用一致性哈希的方法,首先,我們假設(shè)有S=20個(gè)邏輯分片。然后200個(gè)快遞員的哈希值處理之后落到的區(qū)域正好如下圖所示:

    每個(gè)快遞員的鍵值對(duì)都會(huì)落到這個(gè)環(huán)上,假設(shè)我們這里一致哈希算法是按快遞員號(hào)碼進(jìn)行的。Shard1負(fù)責(zé)1-10,Shard2負(fù)責(zé)11-20,以此類推。因?yàn)榭爝f員的能力是差不多的,所以當(dāng)資源節(jié)點(diǎn)的數(shù)量足夠多的時(shí)候,可以認(rèn)為每個(gè)節(jié)點(diǎn)的負(fù)載基本是均衡的。這是原始的consistent hashing。
    Dynamo并沒(méi)有采用這個(gè)模型。這個(gè)理想的理論模型跟現(xiàn)實(shí)之間有一個(gè)問(wèn)題,在這個(gè)理論模型上,每個(gè)資源節(jié)點(diǎn)的能力是一樣的。我的意思是,他們有相同的cpu,內(nèi)存,硬盤(pán)等,也就是有相同的處理能力。可現(xiàn)實(shí)世界,我們使用的資源卻各有不同,新買的n核機(jī)器和老的奔騰主機(jī)一起為了節(jié)約成本而合作。如果只是這么簡(jiǎn)單的把機(jī)器直接分布上去,性能高的機(jī)器得不到充分利用,性能低的機(jī)器處理不過(guò)來(lái)。
    所以,Dynamo使每個(gè)物理機(jī)器按照能力包含不同個(gè)分片節(jié)點(diǎn)。假設(shè)還是剛才那5臺(tái)機(jī)器, 一種分配方案就是:

    這樣,即是一臺(tái)機(jī)器掛了,所做的遷移量也只是那臺(tái)機(jī)器上的數(shù)據(jù)。新加入的機(jī)器所要遷移的數(shù)據(jù)也只是他所要保存的數(shù)據(jù)。但是,這種方案還是有問(wèn)題,假設(shè)A機(jī)器掛了,那么他的所有數(shù)據(jù)全都跑到了B上,而從上圖可以看出,B的性能不是很好。所以,最好還是采用下種方案避免這種現(xiàn)象:

    采用這種方法的前提是邏輯分片個(gè)數(shù)S要大于物理機(jī)個(gè)數(shù)P(如果P>S,不是不可以,就是多余出來(lái)機(jī)器沒(méi)有分片需要它去承載)。這里就是20>5. 假設(shè)考慮到高可用一份數(shù)據(jù)要復(fù)制n份,那么我們就要保證S>n*P.

    <script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

    總結(jié)

    以上是生活随笔為你收集整理的Riak - 背景篇(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。