揭开亚马逊S3云存储平台的神秘面纱

谈到云存储,第一个想到的一定是Amazon,也就是当初那个网上卖图书的亚马逊,.COM的先驱。不知道从什么时候起,亚马逊也开始卖起了存储服务,又成为了云存储服务的先驱。

  亚马逊提供一种称为弹性计算云(Amazon EC2,Amazon Elastic Compute Cloud)的服务。用户可在亚马逊的云计算平台上创建自己的操作系统、应用程序和配置设置等机器映像;然后上载至亚马逊简单存储服务(Amazon S3,Amazon Simple Storage Service)并注册。

  Amazon EC2所提供的处理能力可实时增减,少则1台虚拟机,多至1000台以上,总之,由亚马逊提供用户所需要的计算能力,用户按照其计算和所消耗的网络资源来付费;存储也是如此,用户根据自己存储在其S3平台的数据资源以及消耗的网络资源付费。如此一来,用户的信息化应用就转变成为一种购买服务的方式。而亚马逊的S3云存储服务已经成为目前运作最成熟的云存储平台之一。

  那么亚马逊究竟如何构建其S3云存储平台呢,如何应对海量数据的管理压力,并提供合适的服务水准给不同级别的用户呢?本文将详细解析亚马逊云存储平台的关键技术:Dynamo分布式存储引擎。实际上,亚马逊的分布式文件引擎并没有太多的新的思想,其关键性贡献在于将非常多的技术结合到了一起,最终构建了一个庞大的数据云。下面我们开始走进亚马逊的云世界:

  Dynamo 是个什么东东呢?他是 Amazon 公司的一个分布式存储引擎。那么这个什么引擎又是什么?

  首先,假设一个场景,你的网站要存储用户登陆的IP。这个问题怎么解决呢?传统的方法是用数据库。数据库提供了方便的操作接口,复杂的查询能力以及事物的保证。

  好,现在假设大家都很喜欢你的网站,访问的人越来越多。一个数据库已经处理不过来了。于是你安装了3台数据库主机,把用户分成了三类(男人,女人,IT人;总是有某种方法把用户分成数目大致差不多的几个部分吧)。

  每次访问的时候,先看用户属于哪一类,然后直接访问存储那类用户数据的数据库。于是处理能力增加了三倍。这个时候你已经实现了一个分布式的存储引擎,Dynamo 就是一个类似的东西。只是它的可靠性,可用性等方面更好一点而已。下面我们看看那个简单的分布式存储系统有什么不方便的地方,而Dynamo是如何解决的。

  简单分布式系统实现云存储可能存在的问题

  先列举一下简单的分布式系统可能存在的问题吧:

  1 很难扩容:如果现在业务发展迅速,3台主机撑不住了,需要加到5台主机,那要如何处理呢?首先要更改分类方法,把用户分成5类,然后重新迁移已经存在的数据。你要在网站上贴个条子,“系统维护中”,然后开始伟大的迁移工程,等到终于迁移完成,发现其实3台也不用了,用户都走光了。

  2 数据可靠性无法保证:有一天,发现有一台数据库服务器的硬盘坏了,这下麻烦就来了,本来网站就不赚钱,没用什么高档机器,只有一个定期的增量备份而已。经过一天复杂的恢复工作,你还要对部分用户说,麻烦你们把做过的事情再做一遍啊。

  3 单点问题:负责把用户分类,然后决定使用哪个数据服务器的那台主机是网站的命根子啊,它如果宕机,所有的数据都不能访问了,它如果满负荷了,增加数据服务器也不会对整体性能有帮助。我好像看到一台贴满着驱邪保平安符咒的pc server。

  这几个问题,看似不大,解决起来还真的不容易呢。尤其是想到自己的网站也许有一天也会和google有一样多的用户(可能因为你是天才或者google快倒闭了)。现在我们看看 Dynnamo 是怎么解决的吧。