版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、DynamoDynamo 簡(jiǎn)介四 20TH由道安 道安發(fā)表在 Dynamo8個(gè)評(píng)論 個(gè)評(píng)論這個(gè)小文打算寫成入門級(jí)的介紹,所以很多語(yǔ)言不追求準(zhǔn)確性。本介紹參考 Amazon 的 Dynamo 論文。需要更詳細(xì)更準(zhǔn)確信息的同學(xué)請(qǐng)直接閱讀原文。(原文地址http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) 這篇論文本身沒(méi)提出什么新的思想
2、,正如論文中所說(shuō),貢獻(xiàn)在于把非常多的技術(shù)結(jié)合到了一起,來(lái)完成一個(gè)系統(tǒng)。Dynamo 是個(gè)什么東東呢?他是 Amazon 公司的一個(gè)分布式 key/value 存儲(chǔ)引擎。那么這個(gè)什么引擎又是什么?首先,假設(shè)一個(gè)場(chǎng)景,你的網(wǎng)站要存儲(chǔ)用戶登陸的 ip。這個(gè)問(wèn)題怎么解決呢?傳統(tǒng)的方法是用數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)提供了方便的操作接口,復(fù)雜的查詢能力以及事物的保證。多好的解決方案啊。盡管應(yīng)用不需要什么復(fù)雜查詢,也不需要事物。好,現(xiàn)在假設(shè)大家都很喜歡你的網(wǎng)站,
3、訪問(wèn)的人越來(lái)越多。一個(gè)數(shù)據(jù)庫(kù)已經(jīng)處理不過(guò)來(lái)了。于是你安裝了3臺(tái)數(shù)據(jù)庫(kù)主機(jī),把用戶分成了三類(男人,女人,it 人;總是有某種方法把用戶分成數(shù)目大致差不多的幾個(gè)部分吧) 。每次訪問(wèn)的時(shí)候,先看用戶屬于哪一類,然后直接訪問(wèn)存儲(chǔ)那類用戶數(shù)據(jù)的數(shù)據(jù)庫(kù)。于是處理能力增加了三倍。這個(gè)時(shí)候你已經(jīng)實(shí)現(xiàn)了一個(gè)分布式的存儲(chǔ)引擎,Dynamo 就是一個(gè)類似的東西。只是它的可靠性,可用性等方面更好一點(diǎn)而已。下面我們看看那個(gè)簡(jiǎn)單的分布式存儲(chǔ)系統(tǒng)有什么不方便的地方
4、,而Dynamo 是如何解決的。先列舉一下簡(jiǎn)單的分布式系統(tǒng)可能存在的問(wèn)題吧:1 很難擴(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)也不用了,用戶都走光了。2 數(shù)據(jù)可靠性無(wú)法保證:有一天,發(fā)現(xiàn)有一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的硬盤壞了。麻煩了,本來(lái)網(wǎng)站就不賺錢,沒(méi)用
5、什么高檔機(jī)器,只有一個(gè)定期的增量備份而已。經(jīng)過(guò)一天復(fù)雜的恢復(fù)工作,你還要對(duì)部分用戶說(shuō),麻煩你們把做過(guò)的事情再做一遍啊3 單點(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。這幾個(gè)問(wèn)題,看似不大,解決起來(lái)還真的不容易呢。尤其是想到自己的網(wǎng)站也許有一天也會(huì)和 goog
6、le 有一樣多的用戶(可能因?yàn)槟闶翘觳呕蛘?google 快倒閉了) ?,F(xiàn)在我們衡。這要怎么辦呢?我們可以把那個(gè)數(shù)據(jù)圓分成 Q 等份(每一個(gè)等份就是一個(gè)虛節(jié)點(diǎn)) ,這個(gè) Q 要遠(yuǎn)大于我們的資源數(shù)?,F(xiàn)在假設(shè)我們有 S 個(gè)資源,那么每個(gè)資源就承擔(dān) Q/S 個(gè)等份。 當(dāng)一個(gè)資源節(jié)點(diǎn)離開(kāi)系統(tǒng)的時(shí)候,它所負(fù)責(zé)的等份要重新均分到其他資源節(jié)點(diǎn)上, 一個(gè)新節(jié)點(diǎn)加入的時(shí)候,要從其他的節(jié)點(diǎn)”偷”到一定數(shù)額的等份。 這個(gè)策略下,當(dāng)一個(gè)節(jié)點(diǎn)離開(kāi)系統(tǒng)的時(shí)候,雖
7、然需要影響到很多節(jié)點(diǎn),但是注意,遷移的數(shù)據(jù)總量只是離開(kāi)那個(gè)節(jié)點(diǎn)的數(shù)據(jù)量。同樣,一個(gè)新節(jié)點(diǎn)的加入,遷移的數(shù)據(jù)總量也只是一個(gè)新節(jié)點(diǎn)的數(shù)據(jù)量。之所以有這個(gè)效果是因?yàn)?Q 的存在,使得增加和減少機(jī)器的時(shí)候不需要對(duì)已有的數(shù)據(jù)做重新哈希。這個(gè)策略的要求是 Q>>S(其實(shí)還有存儲(chǔ)備份的問(wèn)題,現(xiàn)在還沒(méi)介紹到,假設(shè)每個(gè)數(shù)據(jù)存儲(chǔ) N 個(gè)備份 則要滿足 Q>>S*N)。如果業(yè)務(wù)快速發(fā)展,使得不斷的增加主機(jī),從而導(dǎo)致 Q 不再滿足 Q&
8、gt;>S,那么這個(gè)策略將不斷的退化。(Dynamo 論文在 section 6。2 比較了三種策略的狀況 ,本文只是簡(jiǎn)單介紹其思想,不是詳細(xì)翻譯)2 數(shù)據(jù)的可靠性:因?yàn)槲覀兪褂玫氖橇畠r(jià)的 pc 機(jī),硬盤損毀或者是其他原因?qū)е碌闹鳈C(jī)不可用是很經(jīng)常的事情。做這樣一個(gè)估算,假設(shè)一臺(tái) pc 機(jī)平均三年就會(huì)有一次失效,不可用。那么當(dāng)一個(gè)一千臺(tái)機(jī)器的集群,基本上每天都有機(jī)器壞掉,所以某主機(jī)不可用是常態(tài),系統(tǒng)必須可以在這樣的情況下繼續(xù)提供服
9、務(wù)(哦 雖然你的網(wǎng)站現(xiàn)在剛剛只需要4臺(tái)主機(jī),可是別忘了,它要成長(zhǎng)成為 google 的)。當(dāng)然,廉價(jià) pc 的好處就是便宜。所以我們可以增加系統(tǒng)中數(shù)據(jù)的備份來(lái)使得系統(tǒng)在某臺(tái)機(jī)器掛掉的時(shí)候仍舊可用。大家最先想到的方案可能就是對(duì)每個(gè)節(jié)點(diǎn),建立一個(gè)備份節(jié)點(diǎn),如果主節(jié)點(diǎn)壞掉了,備份節(jié)點(diǎn)可以立刻頂上去(雙機(jī)熱備)。但是仔細(xì)想一下,這個(gè)方案是讓人不放心的。因?yàn)楫?dāng)一主一備中的某一臺(tái)機(jī)器壞掉,另外一臺(tái)就成了一個(gè)單點(diǎn)運(yùn)行的節(jié)點(diǎn)。這個(gè)時(shí)候另外一個(gè)節(jié)點(diǎn)一旦
10、發(fā)生錯(cuò)誤,服務(wù)就變得不可用,數(shù)據(jù)也有可能丟失。在一個(gè)要求高可靠性的系統(tǒng)上,這是不可忍受的。我們剛剛估算了一個(gè)大的集群每天都有機(jī)器掛掉。而這種錯(cuò)誤,一定要人工介入才能解決。想想系統(tǒng)管理員每天在機(jī)房里更換主機(jī)的情景以及其他不可預(yù)料情況(系統(tǒng)管理員休假或者新買的主機(jī)沒(méi)按時(shí)到貨等),再想想系統(tǒng)每天都有節(jié)點(diǎn)在單點(diǎn)運(yùn)行,真的是很可怕的事情。事實(shí)上,一般工業(yè)界認(rèn)為比較安全的備份數(shù)應(yīng)該是3份。好,那么我們看看做這個(gè)備份的時(shí)候需要注意的問(wèn)題。首先,如何選
11、擇備份節(jié)點(diǎn)。我們可以簡(jiǎn)單的選擇順序上的后兩個(gè)節(jié)點(diǎn)為備份節(jié)點(diǎn),比如存在節(jié)點(diǎn) A 的數(shù)據(jù),備份到節(jié)點(diǎn) B 和 C。但是當(dāng)我們前面引入了虛節(jié)點(diǎn)的概念的時(shí)候就要注意了,有可能 C 節(jié)點(diǎn)和 A 節(jié)點(diǎn)在同一臺(tái)物理機(jī)器上,這個(gè)時(shí)候就不能選擇 C 做為 A 的備份了。下一個(gè)問(wèn)題,當(dāng)一個(gè)節(jié)點(diǎn)離開(kāi)系統(tǒng)的時(shí)候,比如宕機(jī),這個(gè)節(jié)點(diǎn)上存儲(chǔ)的信息需要繼續(xù)備份到其它節(jié)點(diǎn)上。雖然節(jié)點(diǎn)離開(kāi)了系統(tǒng),但是因?yàn)閭浞莸拇嬖?我們通過(guò)其他節(jié)點(diǎn)可以恢復(fù)出本節(jié)點(diǎn)的所有信息,因?yàn)樵摴?jié)點(diǎn)
12、的離開(kāi),這部分信息的備份數(shù)會(huì)比要求的備份數(shù)少一,所以需要把這部分?jǐn)?shù)據(jù)做再備份。同樣,當(dāng)一個(gè)節(jié)點(diǎn)加入系統(tǒng),從其他節(jié)點(diǎn)偷了數(shù)據(jù)后,其他節(jié)點(diǎn)也需要相應(yīng)減少備份數(shù)。而一個(gè)節(jié)點(diǎn)如果只是暫時(shí)性的不可達(dá),也就是失效一個(gè)很短的時(shí)間(這種情況是最常發(fā)生的) ,那么需要其他節(jié)點(diǎn)暫時(shí)接管這個(gè)節(jié)點(diǎn)的工作,在其可用的時(shí)候,把數(shù)據(jù)增量傳送回該節(jié)點(diǎn)。在設(shè)計(jì)上述需求的解決方案的時(shí)候,還要考慮一個(gè)問(wèn)題,各個(gè)節(jié)點(diǎn)間數(shù)據(jù)備份是同步還是異步。假設(shè)我們要求寫請(qǐng)求總是盡可能的成功
13、,那么我們的策略是寫任何一個(gè)節(jié)點(diǎn)成功就認(rèn)為成功。節(jié)點(diǎn)之間的數(shù)據(jù)通過(guò)異步形式達(dá)成一致。這個(gè)時(shí)候讀請(qǐng)求可能讀不到最新寫進(jìn)去的信息,比如我們一個(gè)數(shù)據(jù)在 A B C 三個(gè)節(jié)點(diǎn)各存一份(系統(tǒng)中有三個(gè)備份的時(shí)候,下面的討論都是基于這個(gè)假設(shè)的) ,那么當(dāng)寫 A 成功后,另外一個(gè)進(jìn)程從節(jié)點(diǎn) C 讀數(shù)據(jù),這個(gè)時(shí)候 C 還沒(méi)收到最新的數(shù)據(jù),只能給讀請(qǐng)求一個(gè)較老的版本。這個(gè)可能會(huì)帶來(lái)大問(wèn)題;同樣,如果我們希望讀請(qǐng)求總能讀到正確的數(shù)據(jù),那我們的策略是寫的時(shí)候要
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
評(píng)論
0/150
提交評(píng)論