Amazon S3架构

问题描述:

虽然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

亚马逊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这样的非关系数据库。迪纳摩充满了这个角色。

它更接近于2,尽管内容存储为“BLOB”而没有系统关心内容,而CouchDB却这样做。后端存储使用本地数据库(BDB?)作为用于存储多个副本的群集节点。读取可以转到任何具有副本的节点(可写入),但需要解决写入以消除冲突。正如凯文提到的,这保证了“最终的一致性”,但并没有严格保证什么时候,哪些写入获胜(来自外部POV;内部定义)。

阅读迪纳摩文档有助于理解许多概念,但AFAIK实现方式不同。 Dynamo由Amazon在内部用于其他用途。还有两个开源实现;一个有趣的是Project Voldemort。 CouchDB显然也很有趣。

Amazon S3的体系结构及其 实现均未公开。因此, 不能用于扩展,以便开发创建任意大小的私有云的能力。

有几篇关于云存储架构主题的论文。你可能会发现它们很有用。 这里是一个:CACSS: Towards a Generic Cloud Storage Service

由不同 技术可被组合以提供一个单一的优异的性能的方法,高度可扩展和可靠的云 存储系统也详细。这项研究为缺乏经验的云提供商提供了知识来源,使他们能够迅速建立自己的云存储服务。