Multipart 分段
功能概述
山河云对象存储的 Multipart 接口,提供了多个 API 来实现 Object 分段上传。除了支持客户端上传超过 5G 的大文件以外,还能实现客户端的断点续传,分段并发上传等高级特性。
完整的分段上传过程为:
-
客户端调用 Initiate Multipart Upload 来初始化一个 Object 分段上传。山河云对象存储返回该 Object 分段上传的唯一 Upload Id。
-
客户端根据 Object 内容偏移依次读取文件数据,并为每个分段标上大于等于 0 的整数标识后,调用 Upload Multipart Part 对每个分段进行上传。
-
客户端使用 List Multipart Parts 来查看指定 Upload Id 对应的已经上传的分段,以便实现断点续传。
-
在所有分段上传完毕后,客户端调用 Complete Multipart Upload 将指定 Upload Id 对应的分段进行合并并得到完整 Object。
注意事项
-
在上传分段过程中未完成的分段会增加 Bucket 的空间使用量,所以如果要取消上传过程,需要调用 Abort Multipart Upload 来清除没用的分段数据。
-
在 Bucket 中所有未完成的分段上传过程,可以通过 List Multipart Parts 进行查看。
-
若指定 Upload Id 的同一分段多次上传,则最后一次调用会覆盖之前的上传数据。
-
若指定的 Bucket 中已存在同名的 Object,山河云对象存储会在该 Object 完整上传完成后,替换已有 Object。
并发操作
-
Multipart API 均为原子调用,能够支持并发。
-
对同一个 Object 多次调用 Initiate Multipart Upload 得到的 Upload Id 均不同。
-
对同一个 Object 的不同 Upload Id 的内容,调用 Upload Multipart Part、Complete Multipart Upload 以及 Abort Multipart Upload 均为独立过程,不会相互影响。
-
客户端可以对同一个 Upload Id 的各个分段使用多线程来上传,提高网络带宽的利用率。
-
若有多个请求对同一个 Upload Id 的同一个分段序号进行上传,以后传输完成的作为最终结果。
大文件的拷贝
大于 5G 的 Object,山河云对象存储不支持直接拷贝。客户端需要为目标位置 Object 调用 Initiate Upload,然后参照 Copy Object Part 并附带 x-qs-copy-range
请求头逐段拷贝数据,最后使用 Complete Multipart Upload 合并得到目标位置 Object。
分段上传限制
使用 Multipart 上传方式有如下几个限制:
-
每个分段最大为 5GB。
-
由 Upload Id 唯一标识的一个分段上传过程,最多可以支持的分段数量为 10000。
-
除最后一个分段不限最小长度以外,其它分段最小为 4MB。
-
一个 Object 的各个分片长度不要求一样。
因此,在使用 5GB 大小进行分段的时候,10000 个分段能支持上传最大为 50TB 的 Object;在使用最小分段 4MB 进行分段的时候,10000 个分段能支持上传最大 40GB 的 Object。
客户端可以根据实际需求选择分段大小。比如在外网环境,由于公网传输速度是由多种因素决定,其大小可能受到限制,考虑到保证服务端和客户端的交互,山河云对象存储建议,此时,客户端可以采用较小的长度来进行分段。
目前管理控制台上传大文件是采用 64MB 来作为分段大小。