一、概述
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++的接口libAWS,Java接口,Ruby接口,PHP接口,等等。这些API不仅仅用于S3,也可以用于EC2等其他云计算服务的调用。