1.18 分片上传

优质
小牛编辑
127浏览
2023-12-01

分片上传

分片上传提供一个将Object拆分成若干个Part进行上传的功能。每个Part是Object数据中连续的一部分。所有Part可以独立且以任何顺序进行上传。任何Part上传失败后,可以单独进行重传,且不影响已经成功上传的Part。所有分片都上传后,FDS对这些Part进行组装,然后用户可以像普通Object一样进行访问。通常,如果Object大于100MB,可以考虑使用分片上传。

分片上传的优点:

  1. 高throughput — Part可以并行地上传。
  2. 断点续传 — 当网络出现问题后,仅仅需要重传失败的Part。
  3. 上传不提前知道大小的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是否支持乱序上传(并发上传)
DIRECTYESNO
MULTI_BLOBNOYES

Limitions

RegionMax object sizePart numbersPart sizeMode
cnbj02G1 至 400(包含400)5M 至 50M(包含5M和5M),最后一个Part可以小于5MDIRECT
cnbj2100G1 至 20480(包含20480)5M 至 50M(包含5M和50M),最后一个Part可以小于5MDIRECT
awsbj0100G1 至 20480(包含20480)5M 至 50M(包含5M和50M),最后一个Part可以小于5MDIRECT
awsusor0100G1 至 20480(包含20480)5M 至 50M(包含5M和50M),最后一个Part可以小于5MDIRECT
awssgp0100G1 至 20480(包含20480)5M 至 50M(包含5M和50M),最后一个Part可以小于5MDIRECT
awsde0100G1 至 20480(包含20480)5M 至 50M(包含5M和50M),最后一个Part可以小于5MDIRECT

计费

分片上传除了收取请求个数费用以外,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