AWS S3 vs OSS

整体对比

AWS S3 OSS
bucket限制 无限制 同一账号同一地域内bucket不能超过30个,单个bucket的容量不限制
分片上传 支持(文档 支持(文档
文件大小限制 分片5MB~5GB,单个文件不超过5TB 分片100KB~5GB,单个文件不超过48.8TB
断点续传 支持,每个文件使用一个UploadId 支持,默认关闭,上传失败可以根据Checkpoint重传失败的分片
并发上传 默认5MB分片,默认5个routine 需要指定分片大小,默认单个routine
文件元信息 支持,以x-amz-meta-为前缀 支持,以X-Oss-Meta-为前缀
存储类型 标准、不频繁访问(标准、单区)、存档(解冻时间数分钟到数小时) 标准、低频访问、归档(解冻时间1min)
跨区域复制 支持 支持
版本控制 支持,默认检索最新版本,可指定版本ID,版本数量达百万级时写入响应显著变慢 不支持
访问控制 IAM、ACL ACL
带宽 无限制 大陆10Gbps,其他5Gbps
生命周期 支持文件批量处理、自动碎片清理、自动转换存储类型 支持文件批量处理、自动碎片清理、自动转换存储类型
其他 安全性IAM、第三方支持多 抗D能力强、CDN

1. 存储类型

多存储类型选择满足了从热到冷的各种数据存储场景。

a. 标准存储类型(默认)
  • 提供高吞吐和低延时的对象存储服务,支持频繁的数据访问
  • 场景:社交网络、音视频应用、大数据分析
b. 低频访问存储类型
  • 适合保存不经常访问的数据(平均每月1~2次),支持实时数据访问
  • 场景:移动应用、智能设备、企业数据的长期备份
c. 归档存储类型
  • 适合需要长期保存的归档数据(半年以上),解冻后才能访问
  • 场景:档案数据、医疗影像、科学资料、影视素材
对比:

S3在OSS的基础上多提供了一种存储类型:ONEZONE_IAONEZONE_IA与低频访问类似,但不提供多副本冗余备份,只能保证99.5%的可用性(OSS所有类型99.99%)

S3 OSS
标准 无限制 无限制
低频访问 最短存储时间30天,最小计量空间128KB 最短存储时间30天,最小计量空间64KB
低频访问-单区 最短存储时间30天,最小计量空间128KB -
归档 最短存储时间90天,最小计量空间128KB解冻时间:Expedited:15minStandard:35hBulk:5~12h可指定解冻天数 最短存储时间60天,最小计量空间64KB解冻时间:1min每次解冻默认1天,最长可延至7天

建议:训练数据在短期内频繁访问,可在一段时间后自动转换成低频访问或归档存储类型以节省存储成本。

2. 生命周期

通过配置规则自动删除过期的文件和碎片,或将到期的文件转储为低频或归档存储类型,从而节省存储费用。

a. 规则:
  • 对象:整个bucket或者指定key前缀
  • 操作:转化、删除
  • 时间:日期或天数
b. 举例:
  • 存储30天后,自动转换到低频访问类型。
  • 180天后,自动转换到归档类型。
  • 超过360天后,文件会被自动删除。

Lifecycle

自动类型转化只支持从热数据到冷数据转化。

S3支持版本控制,因此可以分别对当前版本和先前版本做生命周期管理。

3. 跨区域复制

a. 使用场景
  • 合规性要求:合规性要求所规定的数据需要跨一定距离保存一份副本。通过跨区域复制,可以在远距离的数据中心之间复制数据以满足这些合规性要求。
  • 最大限度减少延迟:为了最大限度缩短访问对象时的延迟,可以在地理位置与用户较近的数据中心中维护对象副本。
  • 数据备份与容灾:对数据的安全性和可用性有极高的要求。
  • 数据复制:由于业务原因需要将数据从OSS的一个数据中心迁移到另一个数据中心。
  • 操作原因:在两个不同数据中心中具有分析同一组对象的计算集群。
b. 操作

跨区域复制是一项存储桶级别配置,该功能支持跨不同区域中的bucket自动异步复制对象。我们将这些bucket分别称为 bucket和目标 bucket。这些bucket可由不同的账户拥有。

  • 前提:源bucket和目标bucket必须处于不同的区域、必须已启用版本控制(S3)
  • 通过添加复制配置到源bucket实现
  • 可以复制bucket中所有对象,也可以根据key前缀复制
  • 如果副本仍由对象拥有者拥有,将复制相应的ACL;否则对象拥有者必须通过对象 ACL 授权,可以变更所有权
  • 一个对象只能被复制一次,例如在现有复制配置中更改目标bucket,不会再次复制它
  • 使用安全套接字层 (SSL) 跨区域加密传输中的所有数据

跨区域复制、生命周期管理、版本控制等功能都可能用到key前缀,建议同一类对象上传时使用特定的key前缀。

4. 文件元信息

a. 文件元信息(Object Meta)
  • HTTP标准属性(HTTP Headers)
    • Cache-Control
    • Content-Encoding
    • Expires
    • Content-Length
  • User Meta(用户自定义元信息)
    • x-oss-meta-x-amz-meta-为前缀
b. 操作
  • 上传时设置元信息
  • 上传后不能修改,只能copy一个副本,对副本设置新的元信息
  • 通过HEAD请求获取对象的元信息

注意:PUT请求Header大小限制为8KB,S3对用户自定义元数据大小限制为2KB,OSS未限制自定义元数据大小

目前不支持检索元信息,因此按元信息检索还需要依赖MongoDB。

5. Select

通过AWS S3 SelectOSS Select,您可以使用简单的结构化查询语言 (SQL) 语句选取文件的内容,仅获取需要的数据。

OSS Select只支持 CSV 格式,其他格式需要使用DataLakeAnalytics。

AWS S3 Select 支持 CSV 和 JSON 格式。

示例:

// JSON对象
{"name": "Susan Smith",
"org": "engineering",
"projects":
    [
     {"project_name":"project1", "completed":false},
     {"project_name":"project2", "completed":true}
    ]
}

> Select s.name from S3Object s
> {"name":"Susan Smith"}

6. 版本控制(S3)

a. PUT

将新版本的 photo.gif PUT 在已包含具有相同名称的对象的存储桶中时,原始对象 (ID = 111111) 将保留在该存储桶中,Amazon S3 将生成新版本 ID (121212),并将较新版本添加到该存储桶。

PUT

b. DELETE

DELETE 对象时,所有版本都将保留在存储桶中,且 Amazon S3 将插入删除标记。

DELETE

c. GET

执行简单 GET Object 请求将返回 404 Not Found 错误; GET 特定对象版本 111111,即使该对象版本不是当前版本,Amazon S3 也会返回它。

GET

问题:启用版本控制后,Amazon S3 对存储桶的 PUT 或 DELETE 对象请求的 HTTP 503 慢速响应数量显著增加,那么存储桶中可能有一个或多个对象有数以百万计的版本。

建议:控制存储成本,请将对象版本控制与对象生命周期管理结合使用。

7. 断点续传Checkpoint(OSS)

86703fedb60442e95ee3ebf0dc2123fd-f3e16dfc833132488545c59188a81d88.cp

{
	"Magic": "FE8BB4EA-B593-4FAC-AD7A-2459A36E2E62",
	"MD5": "74vASwJJpHqjewWzF9q9xQ==",
	"FilePath": "Downloads/Docker.dmg",
	"FileStat": {
		"Size": 543525312,
		"LastModified": "2018-11-26T13:35:45.495108116+08:00",
		"MD5": ""
	},
	"ObjectKey": "Docker.dmg",
	"UploadID": "B7F504EC487249CCB971067BB6F2BA15",
	"Parts": [{
		"Chunk": {
			"Number": 1,
			"Offset": 0,
			"Size": 2563799
		},
		"Part": {
			"XMLName": {
				"Space": "",
				"Local": ""
			},
			"PartNumber": 1,
			"ETag": "\"FC86F9389359E2E1B6DE217B36BF1727\""
		},
		"IsCompleted": true
	}, {
		"Chunk": {
			"Number": 2,
			"Offset": 2563799,
			"Size": 2563799
		},
		"Part": {
			"XMLName": {
				"Space": "",
				"Local": ""
			},
			"PartNumber": 2,
			"ETag": "\"1A6A290EA157937AB18BE9C6DE1453B1\""
		},
		"IsCompleted": true
	},
    ......
     , {
		"Chunk": {
			"Number": 212,
			"Offset": 540961589,
			"Size": 2563723
		},
		"Part": {
			"XMLName": {
				"Space": "",
				"Local": ""
			},
			"PartNumber": 0,
			"ETag": ""
		},
		"IsCompleted": false
	}]
}

8. 带宽测试

测试环境:tanya服务器,每个文件测试三次

AWS S3上传 AWS S3下载 OSS上传 OSS下载
testfile001, 70MB 40.7MB/s 41.2MB/s 9.7MB/s 7.7MB/s
testfile002, 518MB 89.9MB/s 60.7MB/s 12.0MB/s 14.6MB/s
testfile003, 4.2GB 104.3MB/s 105.8MB/s 15.3MB/s 14.5MB/s

S3上传/下载速率稳定,OSS不稳定波动很大

9. 价格

a. 存储价格
S3 OSS
标准型 0.191元/GB/月 0.12元/GB/月
低频访问型 0.13377元/GB/月 0.08元/GB/月
低频访问-单区 0.107016/GB/月 -
归档型 0.0334/GB/月 0.033/GB/月
b. 请求价格
S3 OSS
标准型 PUT等0.045元/万次,GET等0.015元/万次 0.01元/万次
低频访问型 PUT等0.637元/万次,GET等0.0637元/万次 0.1元/万次
低频访问-单区 PUT等0.637元/万次,GET等0.0637元/万次 -
归档型 3.732元/万次 0.1元/万次
数据取回-低频 0.0637元/GB 0.0325元/GB
数据取回-归档 0.06元/GB
跨区域复制 0.50元/GB
生命周期转换 0.637元/万次,3.732元/万次(Glacier) 0.1元/万次
Select扫描 0.01593元/GB 0.0122元/GB
外网流入 免费 免费
外网流出 0.933元/GB 00:00-08:00(闲时):0.25元/GB08:00-24:00(忙时):0.50元/GB

AWS:https://www.amazonaws.cn/s3/pricing/

OSS:https://www.aliyun.com/price/product?spm=5176.7933691.744462.c1.1f886a56EiP7kL#/oss/detail

附:HTTP GET Range

Examples of byte-ranges-specifier values (assuming an entity-body of length 10000):

      - The first 500 bytes (byte offsets 0-499, inclusive):  bytes=0-
        499
      - The second 500 bytes (byte offsets 500-999, inclusive):
        bytes=500-999
      - The final 500 bytes (byte offsets 9500-9999, inclusive):
        bytes=-500
      - Or bytes=9500-
      - The first and last bytes only (bytes 0 and 9999):  bytes=0-0,-1
      - Several legal but not canonical specifications of the second 500
        bytes (byte offsets 500-999, inclusive):
         bytes=500-600,601-999
         bytes=500-700,601-999