分片上传
分片上传提供一个将Object拆分成若干个Part进行上传的功能。每个Part是Object数据中连续的一部分。所有Part可以独立且以任何顺序进行上传。任何Part上传失败后,可以单独进行重传,且不影响已经成功上传的Part。所有分片都上传后,FDS对这些Part进行组装,然后用户可以像普通Object一样进行访问。通常,如果Object大于100MB,可以考虑使用分片上传。
分片上传的优点:
- 高throughput — Part可以并行地上传。
- 断点续传 — 当网络出现问题后,仅仅需要重传失败的Part。
- 上传不提前知道大小的Object — Object可以边创建边上传。比如,用户通过一个stream接受数据,然后上传到FDS的场景。
分片上传流程
分片上传是一个三阶段的过程:首先初始化分片上传,然后上传所有分片,最后完成分片上传。当FDS收到完成分片上传请求时,会根据请求中提供的Part列表对Part进行组装。
1.初始化分片上传
初始化分片上传后,FDS会返回一个唯一的upload id来标示本次分片上传。后续的上传分片、结束或终止分片上传都需要带上这个upload id。
2.上传分片
上传分片时,除了指定upload id外,还需要指定part number。Part number的取值范围为1至MAX_NUMBERS,它用于确定该Part在整个Object中的位置。如果用已使用过的part number上传一个新Part,旧的会被覆盖。每个上传Part请求FDS都会返回一个ETag,用户需要记录下这些part number和Etag对。结束分片上传时需要将所有分片的part number和ETag发给FDS。
3.完成分片上传(或者终止)
当所有分片上传完成后,需要进行完成操作。FDS会将所有分片按part number的增序组装成一个Object(part number需要连续且不能有重复项)。Object总大小较大时,这个操作可能会花费几秒钟。同一个Object的不同分片上传(通过upload id来区分),不管哪个先初始化,后complete的会覆盖先complete的。
如果不再需要已上传的分片,需要终止本次分片上传,以免被收取额外的费用。
Mode
分片上传有两种模式:DIRECT和MULTI_BLOB,目前暂不支持用户选择上传模式。
Mode | 是否能获取MD5 | 是否支持乱序上传(并发上传) |
---|---|---|
DIRECT | YES | NO |
MULTI_BLOB | NO | YES |
Limitions
Region | Max object size | Part numbers | Part size | Mode |
---|---|---|---|---|
cnbj0 | 2G | 1 至 400(包含400) | 5M 至 50M(包含5M和5M),最后一个Part可以小于5M | DIRECT |
cnbj2 | 100G | 1 至 20480(包含20480) | 5M 至 50M(包含5M和50M),最后一个Part可以小于5M | DIRECT |
awsbj0 | 100G | 1 至 20480(包含20480) | 5M 至 50M(包含5M和50M),最后一个Part可以小于5M | DIRECT |
awsusor0 | 100G | 1 至 20480(包含20480) | 5M 至 50M(包含5M和50M),最后一个Part可以小于5M | DIRECT |
awssgp0 | 100G | 1 至 20480(包含20480) | 5M 至 50M(包含5M和50M),最后一个Part可以小于5M | DIRECT |
awsde0 | 100G | 1 至 20480(包含20480) | 5M 至 50M(包含5M和50M),最后一个Part可以小于5M | DIRECT |
计费
分片上传除了收取请求个数费用以外,Part所占用的存储空间也会收费。分片上传complete后,组装成的Object收费标准和普通Object一样。Abort后,Part不再收取存储空间费。所以,如果所上传的Part不再需要,请终止该分片上传,以免被收取费用。
Complete效率
Complete阶段需要组装所有Part至一个Object,两种上传模式下的Complete效率相近。总大小为100G时,大概需要花费5秒。
API和SDK
和其它请求一样,FDS提供了Restful API和SDK,具体请参考Object操作 REST API和Object操作API的签名和示例中分片上传相关的章节。
分片上传请求也可以通过presigned url发起,具体请参考Presigned URL