一、概述
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等其他雲計算服務的調用。
