亚马逊S3服务介绍

在这篇博文中我们讨论一下Amazon Simple Storage Service(简称S3),这是亚马逊AWS服务在2006年第一个正式对外推出的云计算服务,所以在我们博客中的服务介绍中就从它开始介绍吧,以“纪念”它的历史地位 :-) 。

S3为开发人员提供了一个高度扩展(Scalability)、高持久性(Durability)和高可用(Availability)的分布式数据存储服务。它是一个完全针对互联网的数据存储服务,应用程序可以通过一个简单的Web服务接口就可以通过互联网在任何时候访问S3上的数据。当然你存放在S3上的数据可以进行访问控制以保障数据安全性。这里所说的访问S3包括读、写、删除等多种操作。在刚开始接触S3时要把S3与我们日常所说的网盘区分开来:虽然都属于云存储范畴,但是S3是针对开发人员、主要通过API编程使用的的一个服务,而网盘这样的云存储服务则提供了一个给最终用户使用的服务界面。虽然S3也可以通过AWS的Web管理控制台或命令行使用,但是S3主要是针对开发人员,在理解上可以看成是云存储的后台服务。比如,Dropbox是很多人都喜欢使用的云存储服务,它就是一个典型的AWS客户,其所有的用户文件就是保存在S3存储中的。我们在上一篇博文中提到看到越来越多的客户在加快采用云计算的步伐,一个实际的例子就是S3的使用量。下图显示了S3在过去几年中所存储的数据对象数量增长情况。

亚马逊S3服务介绍_第1张图片

图1:S3的增长

可以看到S3达到第一个万亿对象花费了大约6年时间,而实现第二个万亿对象仅仅用了一年时间!

 

S3的基本数据结构

S3的数据存储结构非常简单,就是一个扁平化的两层结构:一层是存储桶(Bucket,又称存储段),另一层是存储对象(Object,又称数据元)。存储桶是S3中用来归类数据的一个方式,它是数据存储的容器。每一个存储对象都需要存储在某一个存储桶中。存储桶是S3命名空间的最高层,它会成为用户访问数据的域名的一部分,因此存储桶的名字必须是唯一的,而且需要保持DNS兼容,比如采用小写、不能用特殊字符等。例如,你创建了一个名为:zhangsan的存储桶,那么对应的域名就是zhangsan.s3.amazonaws.com,以后你可以通过http://zhangsan.s3.amazonaws.com/来访问其中存储的数据。由于数据存储的地理位置有时对用户来说挺重要,因此在创建存储桶的时候S3会提示选择区域(Region)信息。存储对象就是用户实际要存储的内容,其构成就是对象数据内容再加上一些元数据信息。这里的对象数据通常是一个文件,而元数据就是描述对象数据的信息,比如数据修改的时间等。如果你在zhangsan的存储桶中存放了一个文件picture.jpg,那么你可以通过http://zhangsan.s3.amazonaws.com/picture.jpg这个URL来访问这个文件。从这个URL访问我们可以看到,存储桶名称需要全球唯一,而存储对象的命名则需要在存储桶中唯一。只有这样你才能通过一个全球唯一的URL访问到你指定的数据。S3的数据存储结构如下图所示:

 亚马逊S3服务介绍_第2张图片

图2:S3的基本存储结构

S3存储对象中的数据大小可以从1个字节到5TB。在缺省情况下每个AWS账号最多能创建100个存储桶。不过用户可以在一个存储桶中存放任意多存储对象。理论上存储桶中的对象数是没有限制的,因为S3完全是按照分布式存储方式设计。除了在容量上S3具有很到的扩展性,S3的性能上也具有高度扩展性,允许多个客户端和应用线程并发访问数据。

可能有人会把S3的存储结构与一般的文件系统进行比较,要注意的是S3在架构上只有两层结构,并不支持多层次的树形目录结构。不过你可以通过设计带“/”的存储对象名称来模拟出一个树形结构来。例如有些S3工具就提供了一个操作选项是“创建文件夹”,其实际上就是通过控制存储对象的名称来实现的。

 

 

S3的几个特点

作为云存储的典型代表,Amazon S3在扩展性、持久性和性能等几个方面有自己明显的特点。

1.     耐久性和可用性

保存在S3上的数据会自动的在选定地理区域中进行多个设施(数据中心)和多个设备中进行同步存储。 S3 存储提供了 AWS 平台中最高级别的数据持久性和可用性。除了分布式的数据存储方式之外,S3还内置了数据一致性检查机制来提供错误更正功能。S3 的设计不存在单点故障,可以承受两个设施同时出现数据丢失,因此非常适合用作任务关键型数据的主要数据存储。实际上,Amazon S3 旨在为每个存储对象提供 99.999999999%(“11 个 9”)的年持久性和 99.99% 的年可用性。除了内置冗余外,S3 还可通过使用 S3 版本控制功能使数据免遭应用程序故障和意外删除造成的损坏。对于可以根据需要轻松复制的非关键数据(如转码生成的媒体文件、镜像缩略图等),你可以使用 Amazon S3 中的降低冗余存储 (RRS,ReducedRedundancy Storage) 选项。RRS的持久性为99.99%,当然它存储费用也更低。尽管 RRS 的持久性稍逊于标准 S3,但仍高出一般磁盘驱动器约400 倍。

 

2.     弹性和可扩展性

Amazon S3 的设计能够自动提供高水平的弹性和扩展性。一般的文件系统可能会在一个目录中存储大量文件时遇到问题,但是S3 能够支持在任何存储桶中无限量的存储文件。另外,与磁盘不同的是,磁盘大小会限制可存储的数据总量,而 Amazon S3 存储桶可以存储无限量的数据。在数据大小方面目前S3的唯一限制是单个存储对象的大小不能超过5TB,但是你可以存储任意数量的存储对象,S3会自动将数据的冗余副本扩展和分发到同一地区内其他位置的服务器中,这一切完全通过 AWS 的高性能基础设施来实现。

 

3.     良好的性能

S3是针对互联网的一种存储服务,因此它的数据访问速度不能与本地硬盘的文件访问相比。但是,从同一区域内的 Amazon EC2 可以快速访问 Amazon S3。如果你同时使用多个线程、多个应用程序或多个客户端访问 S3,那S3 累计总吞吐量往往远远超出单个服务器可以生成或消耗的吞吐量。S3在设计上能够保证服务端的访问延时与互联网的延时相比要小很多。

为了加快相关数据的访问速度,许多开发人员将 Amazon S3 与 Amazon DynamoDB或Amazon RDS 配合使用。由S3 存储实际信息,而 DynamoDB或RDS 则充当关联元数据(如存储对象名称、大小、关键字等)的存储。数据库提供索引和搜索的功能,而通过元数据搜索高效地找出存储对象的引用信息。然后,用户可以借助该结果准确定位存储对象本身并从 S3 中获取它。当然,为提高最终用户访问S3中数据的性能,你还可以使用Amazon CloudFront这样的CDN服务。

 

4.     接口简单

Amazon S3 提供基于SOAP 和 REST两种形式的Web服务 API来用作数据的管理操作。这些API所提供的管理和操作既包含针对存储桶也包含了针对存储对象。虽然直接使用基于SOAP或REST的API非常灵活,但是由于这些API相对比较底层,因此实际使用起来相对繁琐。因此,为方便开发人员使用AWS专门基于RESP API为常见的开发语言提供了高级工具包或软件开发包(SDK)。这些SDK支持的语言包括Java、.NET、PHP、Ruby和Python等。另外,如果你需要在操作系统中直接管理和操作S3,那么AWS也为Windows和Linux环境提供了一个集成的AWS命令行接口(CLI)。在这个命令行环境中你可以使用类似Linux的命令来实现常用的操作如ls、cp、mv、sync等。最后,你还可以通过AWS的Web管理控制台来简单的使用S3服务,包括创建存储桶,上传和下载数据对象等操作。当然现在也有很多第三方的工作能够帮助用户通过图形化的界面使用S3服务,比如像S3 Organizer(Firefox的一个免费插件),CloudBerry Explorer for Amazon S3等。

 

关于S3还有许多可以讨论的内容,我们后续博客中将陆续讨论。

 

你可能感兴趣的:(AWS,S3,云服务)