热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

亚马逊云存储之S3(SimpleStorageService简单存储服务)

(转 ) S3是Simple Storage Service的缩写,即简单存储服务。亚马逊的名词缩写也都遵循这个习惯,例如Elastic Compute Cloud缩写为E

(转 )
S3是Simple Storage Service的缩写,即简单存储服务。亚马逊的名词缩写也都遵循这个习惯,例如Elastic Compute Cloud缩写为EC2等等。其他组织类似的命名有W3C,如果我们也follow这个习惯则IEEE会被写为IE3,CCTV就是C2TV,好像有点罗嗦了。

S3说的玄乎一点可以叫云存储,通俗一点就是大网盘。其概念类似于分布式文家系统,同Google的GFS应该在一个层面。

S3的定义如下

Amazon S3 is a web service that enables you to store data in the cloud. You can then download the data or use the data with other AWS services, such as Amazon Elastic Cloud Computer (EC2).

看来除了做网盘只用,S3存储的数据还可以被其他的亚马逊高层服务直接引用,这一点比国内的简单的网盘提供商高不少,亚马逊大网盘是其整体Solution中的有机组成部分。

基本概念


1。bucket – 类比于文件系统的目录

A bucket is a Container for objects stored in Amazon S3. Every object is contained in a bucket. For example, if the object named photos/puppy.jpg is stored in the johnsmith bucket, then it is addressable using the URL http://johnsmith.s3.amazonaws.com/photos/puppy.jpg

似乎目录不能嵌套,也就是不能有子目录,官方的说法是起到namespace的作用,是访问控制的基本单位,其实丫还是个目录。

2。Object – 类比文件系统的文件

对象中带有对象名名,对象属性,对象本身最大5G,其实也还是个文件。

目前object有Versioning的属性(即对象不同历史版本的cache概念),这个是文件系统不具备的,在早期看到的S3资料中没有这一概念,应该是演进的结果,其面对的应该是有版本控制的需求的用户。

3。Keys – 类比文件名

key的样式也是URL,记住亚马逊的服务都是使用Web Service或REST方式访问的。

例如,http://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl

其中‘doc’就是目录名(桶名),”2006-03-01/AmazonS3.wsdl”是文件名(对象名)。

如果引入了version则bucket + key + version唯一标示一个版本的文件。

4。Versioning – 类比CVS中的一个版本

下面是一些实现原理的描述。

<图片缺失…>

同名文件的写入&#xff0c;并不覆盖已有文件而是增加了一个最新的文件版本。

同样下面的删除也不真正删除&#xff0c;而是mark了删除标记。

<图片缺失…>

当最新版本mark为deleted之后&#xff0c;对该对象的get操作返回404错误&#xff0c;除非明确指定一个历史版本。

当然也可以指定版本永久删除其中一个拷贝。

5。Regions – 文件存储的地理位置

这个也是文件系统中不存在的&#xff0c;就是不同的地理区域&#xff0c;用户可以指定将文件存在某个国家的服务器。我个人认为&#xff0c;这不是一个很好的概念&#xff0c;作为云的提供商&#xff0c;应该对于应用屏蔽这些部署细节。工程实现同技术理想还是有差距。目前其可以指定的server位置有美国、爱尔兰、新加坡等地。

接口API

常用的API就是读、写、增、删、改、查等等。使用标准的SOAP和REST定义。

尤其一提的是对于对象的获取&#xff0c;除了用http直接按照C/S方式获取之外&#xff0c;亚马逊支持BT协议&#xff0c;也就是说提供种子。从用户角度想&#xff0c;亚马逊会 charge更少的钱&#xff0c;但同时亚马逊自身也会减负。bt下载的速度就不太稳定了&#xff0c;基本取决于种子“质量”也就是取决于对文件感兴趣的人的多寡。例如命名为 “XX门”估计文件下载能够快很多。

数据有什么用

当数据上传到aws云之后&#xff0c;可以很多服务可以使用例如。

Amazon ElasticCompute Cloud

Amazon Elastic MapReduce

Amazon Import/Export等。

一点遗憾

没有看到如何实现分布式文件系统的资料&#xff0c;这是了解其Scale以及可靠性等的关键&#xff0c;或许亚马逊没有google大方&#xff0c;没有提供类似GFS之类的底层机制实现文档。

参考

http://aws.amazon.com/s3/#functionality

http://docs.amazonwebservices.com/AmazonS3/2006-03-01/

http://developer.amazonwebservices.com/connect/forum.jspa?forumID&#61;24

http://www.kernelchina.org/content/%E4%BA%9A%E9%A9%AC%E9%80%8A%E4%BA%91%E5%AD%98%E5%82%A8%E4%B9%8Bs3simple-storage-service%E7%AE%80%E5%8D%95%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1

三个理由告诉你对象存储替换HDFS还不错

原因一&#xff1a;对象存储可提供更好的数据保护 虽然HDFS能够利用内部的服务器级存储&#xff0c;它实际上是按照其标准的数据保护策略将所有数据做了三个副本。因此&#xff0c;尽管可以使用较便宜的服务器内部的硬盘驱动器&#xff0c;它可能并不像最初希望的那样经济&#xff0c;因为容量需求要乘以3。

一种替代方案是使用基于对象的存储系统&#xff0c;提供亚马逊简单存储服务&#xff08;S3&#xff09;协议访问&#xff0c;这是Hadoop除了HDFS也同样支持的。这些系统可以是纯软件&#xff0c;因此可以使用商用服务器和服务器级存储。但不同于默认的HDFS&#xff0c;许多对象存储系统都提供纠删编码。这种数据保护机制类似于RAID但粒度更细&#xff0c;可以在对象或子对象的层面操作&#xff0c;把数据和奇偶校验位分布到存储集群的各个节点上。其结果是&#xff0c;可以达到相似或更高水平的数据冗余性&#xff0c;而只需大约25&#xff05;至30&#xff05;的额外开销。相比之下&#xff0c; HDFS的标准三副本配置下的额外容量开销为200&#xff05;。

原因二&#xff1a;HDFS会暴露主节点

HDFS具有一个主节点和一系列从节点。从节点处理数据并将结果发送给主节点。主节点还需要维护数据复制策略以及基本的集群管理。如果主节点发生故障&#xff0c;集群的其余节点将不能被访问。 HDFS对主节点只提供了有限的保护&#xff0c;所以企业需要采取特殊措施来实现主节点的高可用性。

如上所述&#xff0c;在对象存储系统中&#xff0c;主节点与从节点都能受到相同的纠删编码的数据保护。此外&#xff0c;由主节点维护的管理Hadoop集群所需的所有元数据(metadata)都可以存储在集中化的对象存储系统中。这样当主节点发生故障时&#xff0c;从节点或备用节点可以迅速变成为主节点。

原因三&#xff1a;HDFS不能进行单独扩展

像任何其他架构一样&#xff0c;Hadoop对计算和存储容量也会有不同程度的需求。问题是&#xff0c;HDFS要求计算能力和存储容量需要按比例进行扩展&#xff0c;这意味着你不能单独对某一种资源进行扩充。

要说明这一点最常见的方式是当一个Hadoop架构的存储容量用尽时&#xff0c;因为增加更多容量就意味着加入另一个装满硬盘的节点&#xff0c;这也增加了更多的计算能力。反之亦如此&#xff0c;作为Hadoop基础设施&#xff0c;往往需要更多的处理能力&#xff0c;但存储空间却很充裕。大多数时候&#xff0c;当购置了一个新的服务器以增加计算能力时&#xff0c;它也带来了新的存储空间。其结果是&#xff0c;Hadoop架构总是在某种资源上浪费金钱&#xff0c;而对另一种资源却总是缺乏。

对象存储允许容量和计算能力各自独立地进行扩展。计算节点可以是1U或2U的机箱&#xff0c;通过固态存储引导。对象存储系统可以装满高容量驱动器&#xff0c;从而保持每GB成本最低。更重要的是&#xff0c;随着应用环境的变化&#xff0c;每一层都可以独立扩展。

HDFS之于Hadoop的主要优点是低成本和高性能&#xff0c;这得益于数据存放于本地。而利用商业存储硬件的对象存储系统同样可以提供类似的低成本&#xff0c;尤其是当采用纠删编码来提高数据保护效率时更是如此。10 GbE的高速网络现在已经很实惠&#xff0c;这些都使HDFS将数据和计算放在一起所带来的性能优势不复存在。对象存储提供了一种更具成本效益&#xff0c;更可靠&#xff0c;而且性能至少跟HDFS相当的基础架构&#xff0c;它理所当然应该成为一种可行的HDFS替代解决方案。


推荐阅读
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 解决java.lang.IllegalStateException: ApplicationEventMulticaster not initialized错误的方法和原因
    本文介绍了解决java.lang.IllegalStateException: ApplicationEventMulticaster not initialized错误的方法和原因。其中包括修改包名、解决service name重复、处理jar包冲突和添加maven依赖等解决方案。同时推荐了一个人工智能学习网站,该网站内容通俗易懂,风趣幽默,值得一看。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
author-avatar
帝·姬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有