2009-02-19 183 views
9

雖然post @http://highscalability.com/amazon-architecture解釋了Amazon的架構,但我有興趣瞭解如何實現Amazon S3。Amazon S3架構

我的一些猜測是

  1. 分佈式文件系統,如HDFS http://hadoop.apache.org/core/docs/current/hdfs_design.html
  2. 非關係持久DB像CouchDB的 http://couchdb.apache.org/

是否有可能實施類似的東西這在使用Python或PHP等腳本語言的規模要小得多?

+0

至少有[one](https://sourceforge.net/projects/s3mockup/) S3等效解決方案,您可以使用它來測試客戶端。你可以通過研究源代碼找到一些信息,也許你可以在自己的項目中使用它。 – 2009-02-19 07:41:30

+0

看看MogileFS。它與S3不兼容,並且功能比S3更少,但它實現了在一組低成本存儲服務器上分發靜態文件的基本過程。 – melo 2009-02-19 21:13:23

回答

5

亞馬遜S3是利用在發電論文中描述的架構來實現:

http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html

本文介紹一致性哈希,以及如何和爲什麼的保證是「最終一致性」。

他們談到的有關Dynamo的衝突解決方案沒有公開給S3的用戶。它在Amazon的應用程序內部使用,但對於S3,唯一的衝突解決方案是上次寫入勝利。編輯:Werner Vogels曾表示:「Dynamo不直接作爲Web服務在外部暴露,但Dynamo和類似的亞馬遜技術用於爲我們的亞馬遜網絡服務的一部分(如S3)提供動力。」 http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html

我想強調的是,他並不是說S3和Dynamo共享組件,他明確表示Dynamo本身就是S3的強大技術之一。我從S3看到的所有事情,包括警告,都是通過假設S3是Dynamo周圍的一個花哨的Web服務包裝來解決的,它包含身份驗證,記帳和用戶不可見的最後一次寫入衝突解決方案。

最初的問題是關於S3的底層存儲機制。它顯然不是像HDFS這樣的分佈式文件系統,也不是像CouchDB這樣的非關係數據庫。迪納摩充滿了這個角色。

1

它更接近於2,儘管內容存儲爲「BLOB」而沒有系統關心內容,而CouchDB卻這樣做。後端存儲使用本地數據庫(BDB?)作爲用於存儲多個副本的羣集節點。讀取可以轉到任何具有副本的節點(可寫入),但需要解決寫入以消除衝突。正如凱文提到的,這保證了「最終的一致性」,但並沒有嚴格保證什麼時候,哪些寫入獲勝(來自外部POV;內部定義)。

閱讀迪納摩文檔有助於理解許多概念,但AFAIK實現方式不同。 Dynamo由Amazon在內部用於其他用途。還有兩個開源實現;一個有趣的是Project Voldemort。 CouchDB顯然也很有趣。

2

Amazon S3的體系結構及其 實現均未公開。因此, 不能用於擴展,以便開發創建任意大小的私有云的能力。

有幾篇關於雲存儲架構主題的論文。你可能會發現它們很有用。 這裏是一個:CACSS: Towards a Generic Cloud Storage Service

由不同 技術可被組合以提供一個單一的優異的性能的方法,高度可擴展和可靠的雲 存儲系統也詳細。這項研究爲缺乏經驗的雲提供商提供了知識來源,使他們能夠迅速建立自己的雲存儲服務。