2007年的时候,我所属的Chambal.com团队正忙于开发一个桌面及网站搜索产品,它能索引远程数据和本地桌面内容,并提供搜索和统计功能。为此,我们不断探索各类竞争对手尚未触及的数据来源,Amazon S3就是其中之一。它什么都很棒但是我们找不到一个好的接口来有效使用S3。
于此同时,我们小组刚好新加入了两个实习生,让他们以此作为第一个项目真是再好不过了,等到项目完成,我们就会有一个趁手的S3工具。但最后,我们发现这个项目将成为一个优秀的产品,最终我们把大部分精力都放在了它上面,这个产品就是Bucket Explorer。
先说点背景知识,Amazon网络服务(Amazon Web Service,简称AWS)由多个核心服务组成,包括储存、数据库、计算和队列。本文将只讨论S3(Simple Storage Service,简单储存服务)的独特优点,尤其针对独立开发者而言。
Amazon S3这个存储服务有一些错位特性。许多人将其视作Web服务器的替代品,但Amazon S3不是Web服务器。S3有一些融合了Web服务器的特性,正式这些特性使得其定位有些含混不清。我们从一个例子来看,假设有一个叫做"47hats.png"的文件:
每个文件都有一个URI并能通过http协议来访问:
你将文件存放在S3的一个“桶”中。桶是存放文件的容器。S3给每个桶和桶中每个文件分配一个URI地址,因此你可以通过http或者https协议进行访问。如果你把文件上传到一个叫做"mybucket"的桶中,你就可以通过如下URI进行访问:
http://mybucket.s3.amazonaws.com/47hats.png
http://s3.amazonaws.com/mybucket/47hats.png
你还可以在URI末尾加上"?torrent"使之成为一个torrent地址。
允许多层次的权限控制:
你可以将文件上传到S3并且只让自己可以访问。如果你对文件进行过加密,那么事实上除了你没有其他任何人能够读取该文件。相反的,你也可以将文件开放给全世界。一个能用http访问、具备URI地址的对象,其实就和Web服务器上的对象是一样的。
允许DNS别名:
如果桶的名字符合域名规范,那么它就能通过DNS别名被访问。假设创建一个叫images.example.com的桶,将47hats.png放入其中,并将该桶的CNAME指向s3.amazonaws.com,那么我们就能通过这个URI地址访问到它:http://images.example.com/47hats.png
你可以创建最多100个桶:
当我用web-site-grader(一个网站SEO工具)检查47hats.com的主页时,它提示我说“图片太多”。当时的主页上有29张图片,这算是正常的,然而用户访问该页时需要下载各类文件(图片、css、javascript等等)。一般浏览器对同一个站点只能有4个并发连接,所以总体下载速度会变慢。有了S3,你可以将这些文件放在好几个桶里面,一旦它们被当作不同的网站,浏览器的下载速度就能大大加快了。
带有到期时间的认证请求:
注册Amazon S3的时候,你会得到一份公钥和一份私钥。大多数发送至S3的http请求需要携带这些密钥。你可以在S3中为某些文件在其协议请求头部加上“到期时间”信息,这样你就能把这些私人文件的地址提供给其他人,放心,这些文件会在未来某一时刻自动过期。
带范围的GET请求(常用于断点续传):
你可以向S3请求文件的某段数据。所以对于大型文件,你可以做到先下载起初的几兆数据,并在处理的同时下载后续的内容。这一点让S3成了一个完美的Web服务器,因为这都可以被称作多媒体文件服务器了。像Flash这样的播放器就能跳过前面的内容而直接定位到文件后部某一段,从中间开始播放。
文件的用户元数据:
每个文件都可以附加一些由你指定的元数据。用户元数据就是一个个“名-值”对,S3可以在每个文件上都附加这样元数据。人们可以用它来模拟Web服务器所能提供的http应答数据,这里有两个例子:
S3会自动在文件请求的返回头部中加上最后修改(last modified)信息,如果浏览器要访问47hats.png,它会先向S3询问文件是否修改过,以此来决定是否进行下载。你可以在头部加上"过期信息"(Expires),这样浏览器甚至不会每次去检查是否需要下载,而是每隔一段时间进行。
我们还能将47hats.png压缩后上传到S3,并且加上"Content-Encoding: gzip"的头部信息,浏览器就能正确将文件解压缩。这样做能够大大节省带宽和存储空间。
能够扩展(高性能)
S3不仅能够扩展,而且能够扩展到极大的尺度。
所有的Amazon服务都是适合并发访问的,你可以同时发起多个请求,S3能确保正确响应。S3支持RFC 1323所定义的TCP窗口缩放,简而言之,数据将传输得非常快。当你需要发布一个产品的最新版本、突然遭受大规模访问流量时,访问者的请求都会涌向你的服务器,而使用S3,瓶颈将是访问者们自己的连接带宽,而不再是服务器自身。因为Amazon在全球多个区域都部署有数据中心。
就像我一开始所说的,S3不是Web服务器,Amazon还宣称它并不是一个内容递送网(Content Delivery Network,简称CDN),因为他并没有边界缓存功能。不过因其所提供的高性能,和低廉的价格,并被大众成为穷人的CDN。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14985579/viewspace-410352/ ,如需转载,请注明出处,否则将追究法律责任。