写点什么

对象存储手把手教三 | 数据分段上传

发布于: 2021 年 07 月 28 日
对象存储手把手教三 | 数据分段上传

作者简介:邢照虎

QingStor 研发工程师,主要负责对象存储相关研发工作。


⽤户:“今天上传视频到对象存储,上传到了 80%,⽹络断了,⼜得重新上传,⼼态崩了呀!可不可以只上传最后 20% 呀?”

QingStor:“那⽤分段上传啊,上传过的数据就不需要重新上传了。”

1. 分段上传的适⽤场景 

分段上传适合于在⽹络较差或带宽较⾼环境下上传较⼤的 Object。 

(1)在⽹络较差的环境下,可以将 Object 分成多个较⼩的 Part,⼀⽅⾯降低由于⽹络失败导致上传失败率,另⼀⽅⾯可以实现断点续传,当上传 Part 失败时,只上传失败的 Part 即可。 

(2)在带宽较⾼的环境下,可以将 Object 分成多个 Part,并发上传,来提⾼带宽的利率。 


在 QingStor 对象存储中,我们提供分段上传的功能。分段上传可以实现将整个 Object 切分成多个 Part,将这些 Part 上传到 QingStor 对象存储,最后将多个 Part 合并成⼀个 Object。每个 Part 都有⾃⼰的编号,任意 Part 上传失败后,只须上传该 Part 即可,不需要上传所有的 Part。在合并前,也可以取消上传任意 Part。

2. 分段上传的过程 



2.1 一般的分段上传过程大致有如下几步:

(1)为上传的⼤⽂件初始化 upload id; 

(2)将⼤⽂件切分成多个分段,对每个分段进⾏上传; 

(3)所有的分段上传完毕后,对分段进⾏合并,完成⽂件上传操作。 

2.2 ⼀个完整的上传过程为: 

(1)调⽤ Initiate Upload API 返回该对象唯⼀的 Upload ID。 

(2)根据对象内容偏移读取⽂件数据,为每个分段调⽤ Upload Object Part API。分段序号使⽤⼤于等于 0 的整数标识。若该 Upload ID 同⼀分段多次上传,后边的调⽤会覆盖前边的上传数据。 

(3)客户端可以使⽤ List Multipart API 来查看特定的 Upload ID 下边已经上传的分段,以便实现断点续传。

(4)在所有分段上传完毕后,调⽤ Complete Multipart Upload API 并传递 Upload ID 合并得到完整对象。若对象在此前已存在,会覆盖旧版本数据。 


在上传分段过程中未完成的分段会增加 Bucket 的空间使⽤,所以如果要取消上传过程,需要调⽤ AbortMultipart Upload API 并传递 Upload ID 来清除没⽤的分段数据。在 Bucket 中所有未完成的分段上传过程,可以通过 List Multipart Uploads API 来列出。

2.3 我们还提供了若⼲个 API 来实现分段上传,分别为: 

(1)Initiate Multipart Upload 初始化分段上传 

(2)Upload Object Part 上传对象分段 

(3)Copy Object Part 复制对象分段 

(4)List Object Parts 列取对象分段 

(5)Abort Multipart Upload 取消对象分段 

(6)Complete Multipart Upload 合并对象分段 

3. 如何使⽤分段上传 

3.1 通过⻘云控制台管理分段上传 

在⻘云控制台是不⽀持⼿动开启分段上传的,当⽂件⼤⼩超过 100MB,会⾃动为其选择分段上传的⽅式。但是⽀持查看分段,取消分段和合并分段操作。 


1. 点击「分段管理」,即看⻅ Object Name 为 xxx 的分段记录 



2. 点击「查看分段」,查看具体的分段 



3. 可以选择分段进⾏取消,也可以选择分段进⾏合并完成上传。



3.2 通过 API 进⾏分段上传

我们提供了各种语⾔的 SDK,它们都⽀持分段上传,不需要⾃⼰再去构造,可根据语⾔选择合适的 SDK,详情⻅官⽹。 


在使⽤分段上传的过程中要注意⼏个使⽤限制,如:每个分段最⼤为 5GB;每个 Upload ID 分段数,最多⽀持分段数量为 10000;除最后⼀个分段不限最⼩⻓度外,其他分段最⼩为 4MB 等。 

3.3 利⽤⽣命周期取消未完成的分段 

在上⾯我们提到,未完成的分段会增加 Bucket 的空间使⽤,我们可能会存在⼤量未完成分段。我们 console 虽然不⽀持⼿动开启分段上传,但是可以取消分段上传和查看已经上传的分段,如果从 console 去⼿动取消分段上传的话,当数量特别多的情况下,处理起来⾮常麻烦。这时使⽤我们⽣命周期取消未完成的分段上传的功能,可以⾃动取消未完成的分段,以释放我们的空间。 


1. 在 console 找到「⽣命周期」配置界⾯。 



2. 我们点击「添加规则」,进⾏设置。



3. 这⾥我们为 "your-object*" 为前缀的 Object 设置取消未完成的分段上传的⽣命周期。



4. 结尾 

通过阅读本篇⽂章,相信你对 QingStor 对象存储分段上传有⼀定的认识,如:适⽤场景、分段上传的过程以及如何去使⽤分段上传。如果有时间可以通过⻘云控制台或者 SDK 去上传⼀个⽂件到对象存储来实践⼀下,加深⼀下理解。

相关文章推荐

如何打造云时代的存储基石

存储大师班 | NFS的诞生与成长

QingStor 对象存储架构设计及最佳实践


发布于: 2021 年 07 月 28 日阅读数: 6
用户头像

拥抱云原生存储 2021.06.29 加入

提供云原生时代的全栈存储知识与服务,驱动数据引领业务创新!

评论

发布
暂无评论
对象存储手把手教三 | 数据分段上传