使用Amazon S3做资料存储

IceskYsl@1sters!
(2008.05.10)

一、S3概要介绍和其规范说明

1、什么是S3
2、S3的功能

3、S3的价格
S3的收费规则是用多少付多少钱,你可以使用“AWS Simple Monthly Calculator” 来计算您的大概花费,S3的价格会逐步下调,目前的价格为:

美国价格:

数据传输"in" 和"out"代表外部系统和S3直接的数据传输,另外EC2和S3之间的数据传输时免费的。

4、S3中的概念
本节介绍S3中常见的一些概念。

Account
注册Amazon,申请开通S3后,得到AccessKey和Secret Key,你必须使用这两个key来调用API。

Bucket:
是S3中存储对象的容器,对应一个S3的域名,Bucket的名字不能重复,每个Bucket中可以存储无限个对象。

Object:
是S3中的基本存储单元,单个Object最大5G,放在Bucket中,由Key唯一标识,有ObjectData和metaData组成,metaData可以是标准的metadata或者自定义的metadata。

KEY
KEY在Bucket中用来唯一标识一个Object,也就是说使用Bucket+KEY可以在S3中唯一标识一个Object,例如:
Bucket
KEY
Object
1sters
pic/logo.png
http://1sters.s3.amazonaws.com/pic/logo.png




5、S3中的操作

6、S3的API和库

7、S3客户端工具

8、存在的问题
在中国访问速度一般,2M独享带宽的上传、下载速度差不多100K/S,且凌晨2点到7点异常的慢。速度还可以! 临晨访问速度慢估计是美国那边的访问高峰引起的? -Pengshourong 5/8/08 8:45 PM

二、实际测试

环境:深圳电信ADSL2M

1、测试代码:
require 'rubygems'
require 'right_aws'
require 'yaml'

class Up2S3
 
  def initialize
    puts "start..."
    start = Time.now
    conf_file = YAML.load_file(File.expand_path('amazon_conf.yml'))
    @@s3 =  RightAws::S3Interface.new(conf_file['access_key_id'], conf_file['secret_access_key'])
    puts "@@s3=#{@@s3.to_s}"
    puts "Init Spend Time #{Time.now - start}"
  end
 
  #下载测试代码
  def self.download(bucket,key)
    start = Time.now
    foo = File.new(key, "wb+")
    @@s3.get(bucket, key) do |chunk|
      foo.write(chunk)
    end
    foo.close
    puts "Download Spend Time #{Time.now - start}"
  end
 
  #上传测试代码
  def self.upload(bucket,key,filename)
    start = Time.now
    @@s3.put(bucket,key, File.open(filename)) #=> true
    puts "Upload Spend Time #{Time.now - start}"
  end
 
end

Up2S3.new
Up2S3.upload("tango-icon-theme-0.8.1.tar-2.gz","tango-icon-theme-0.8.1.tar.gz")

2、测试过程和结果:
测试文件


文件名称
大小
metadata

Screenshot-1.png 263K

tango-icon-theme-0.8.1.tar.gz 1.72 MB

Manning.Flexible.Rails.Flex.3.on.Rails.2.Jan.2008.pdf 8.98 MB



S3上传/下载文件速度测试



文件名称 Screenshot-1.png tango-icon-theme-0.8.1.tar.gz Manning.Flexible.Rails.Flex.3.
on.Rails.2.Jan.2008.pdf
文件大小(K)
263K
1.72 MB * 1024 8.98 MB * 1024
耗时(S){上传/下载}
16.484
10.672
58.400234
44.406
216.639289 : 249.234
平均速度(K/S){上传/下载} 263 / 16.484 = 15.95486
263 / 10.672 = 24.64392
1.72 MB * 1024 / 58.40023430.158
1.72 MB * 1024 / 44.406 = 39.66310
8.98*1024/216.639289 = 42.44628
8.98*1024/249.234 = 36.8951
结论:上传速度受文件大小影响较大,但是下载速度受此影响并不大。

综上所测,基本上还可以接受。

参考资料:
  1. Amazon S3介绍及应用
  2. 讨论:不断上传的图片的存储架构 
  3. Amazon S3 vs DreamHost 
  4. Replacing my home backup server with Amazon's S3 
  5. Thoughts on rsync and S3 
  6. amazon-sdb 
  7. rightaws