Amazon S3 API - 阳台

时间:2024-02-25 10:51:47

Amazon S3 API

一、概述  

  Amazon s3,全称为Amazon Simple Storage  Service。EC2和S3是Amazon最早推出的两项云服务。

  REST,这也是比较火的一种Web服务架构。简单来说,资源是由URI指定,对资源的操作包括GET、PUT、POST、DELETE和HEAD,返回结果常常是XML或者其他形式。参见维基REST

  Amazon S3的操作包括三部分:Service、Buckets和Objects。

    • Service只包括GET操作,就是返回所有的Buckets列表。
    • Object是指存储在云端的文件的统称。也就是存储在S3里的基本实体。一个object包括object data和metadata。metadata是一些列的name-value键值对,用来描述这个object,默认情况下包含文件类型、最好修改时间等等,当然用户也可以自定义一些metadata;S3没有明确的文件夹的概念,而是通过制定object的路径来实现;例如object可以是“photos/1.jpg”
    • Buckets拥有全局名,名称由用户定义,用来存放Object,由于是全局名,所有要确保名字是唯一的;
    • Keys:即bucket中每一个object的独一无二的标识符。上面例子中提到的photos/1.jpg就是一个key。
    • Access Control Lists:访问控制表ACL。在S3中每一个bucket和object都有一个ACL,并且bucket和object的ACL是相互独立的。当用户发起一个访问请求,S3会检测ACL来核实请求发送者是否有权限访问这个bucket或object。
    • Regions:我们可以指定bucket的具体物理存储区域(Region)。选择适当的区域可以优化延迟、减低成本。Amazon在世界各地建立了数据中心,目前S3支持下列区域:US Standard,US (Northern California),EU (Ireland),APAC (Singapore)。

  云端为了提高数据可靠性,常用手段是在多个不同的服务器建立同一份数据的冗余备份(replica)。这样即使某一个服务器挂了,用户仍然能够从别的服务器取得他的数据。使用多份数据副本将带来数据一致性的问题,如何保证每一份副本的内容是一致的?如何保证多个用户可以并发读写?这在分布式系统设计中是一个经典的问题,

  作为开发人员,我们也可以使用boto提供的API建立与Amazon云计算存储平台S3交互。boto是一个Amazon云计算服务的python接口,当然也有其他语言比如C++的接口libAWSJava接口Ruby接口PHP接口,等等。这些API不仅仅用于S3,也可以用于EC2等其他云计算服务的调用。