談到云存儲,第一個想到的一定是Amazon,也就是當初那個網(wǎng)上賣圖書的亞馬遜,.COM的先驅。不知道從什么時候起,亞馬遜也開始賣起了存儲服務,又成為了云存儲服務的先驅。
亞馬遜提供一種稱為彈性計算云(Amazon EC2,Amazon Elastic Compute Cloud)的服務。用戶可在亞馬遜的云計算平臺上創(chuàng)建自己的操作系統(tǒng)、應用程序和配置設置等機器映像;然后上載至亞馬遜簡單存儲服務(Amazon S3,Amazon Simple Storage Service)并注冊。
Amazon EC2所提供的處理能力可實時增減,少則1臺虛擬機,多至1000臺以上,總之,由亞馬遜提供用戶所需要的計算能力,用戶按照其計算和所消耗的網(wǎng)絡資源來付費;存儲也是如此,用戶根據(jù)自己存儲在其S3平臺的數(shù)據(jù)資源以及消耗的網(wǎng)絡資源付費。如此一來,用戶的信息化應用就轉變成為一種購買服務的方式。而亞馬遜的S3云存儲服務已經成為目前運作最成熟的云存儲平臺之一。
那么亞馬遜究竟如何構建其S3云存儲平臺呢,如何應對海量數(shù)據(jù)的管理壓力,并提供合適的服務水準給不同級別的用戶呢?本文將詳細解析亞馬遜云存儲平臺的關鍵技術:Dynamo分布式存儲引擎。實際上,亞馬遜的分布式文件引擎并沒有太多的新的思想,其關鍵性貢獻在于將非常多的技術結合到了一起,最終構建了一個龐大的數(shù)據(jù)云。下面我們開始走進亞馬遜的云世界:
Dynamo 是個什么東東呢?他是 Amazon 公司的一個分布式存儲引擎。那么這個什么引擎又是什么?
首先,假設一個場景,你的網(wǎng)站要存儲用戶登陸的IP。這個問題怎么解決呢?傳統(tǒng)的方法是用數(shù)據(jù)庫。數(shù)據(jù)庫提供了方便的操作接口,復雜的查詢能力以及事物的保證。
好,現(xiàn)在假設大家都很喜歡你的網(wǎng)站,訪問的人越來越多。一個數(shù)據(jù)庫已經處理不過來了。于是你安裝了3臺數(shù)據(jù)庫主機,把用戶分成了三類(男人,女人,IT人;總是有某種方法把用戶分成數(shù)目大致差不多的幾個部分吧)。
每次訪問的時候,先看用戶屬于哪一類,然后直接訪問存儲那類用戶數(shù)據(jù)的數(shù)據(jù)庫。于是處理能力增加了三倍。這個時候你已經實現(xiàn)了一個分布式的存儲引擎,Dynamo 就是一個類似的東西。只是它的可靠性,可用性等方面更好一點而已。下面我們看看那個簡單的分布式存儲系統(tǒng)有什么不方便的地方,而Dynamo是如何解決的。
簡單分布式系統(tǒng)實現(xiàn)云存儲可能存在的問題
先列舉一下簡單的分布式系統(tǒng)可能存在的問題吧:
1 很難擴容:如果現(xiàn)在業(yè)務發(fā)展迅速,3臺主機撐不住了,需要加到5臺主機,那要如何處理呢?首先要更改分類方法,把用戶分成5類,然后重新遷移已經存在的數(shù)據(jù)。你要在網(wǎng)站上貼個條子,“系統(tǒng)維護中”,然后開始偉大的遷移工程,等到終于遷移完成,發(fā)現(xiàn)其實3臺也不用了,用戶都走光了。
2 數(shù)據(jù)可靠性無法保證:有一天,發(fā)現(xiàn)有一臺數(shù)據(jù)庫服務器的硬盤壞了,這下麻煩就來了,本來網(wǎng)站就不賺錢,沒用什么高檔機器,只有一個定期的增量備份而已。經過一天復雜的恢復工作,你還要對部分用戶說,麻煩你們把做過的事情再做一遍啊。
3 單點問題:負責把用戶分類,然后決定使用哪個數(shù)據(jù)服務器的那臺主機是網(wǎng)站的命根子啊,它如果宕機,所有的數(shù)據(jù)都不能訪問了,它如果滿負荷了,增加數(shù)據(jù)服務器也不會對整體性能有幫助。我好像看到一臺貼滿著驅邪保平安符咒的pc server。
這幾個問題,看似不大,解決起來還真的不容易呢。尤其是想到自己的網(wǎng)站也許有一天也會和google有一樣多的用戶(可能因為你是天才或者google快倒閉了)?,F(xiàn)在我們看看 Dynnamo 是怎么解決的吧。