对象存储手把手教三 | 数据分段上传
作者简介:邢照虎
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 去上传⼀个⽂件到对象存储来实践⼀下,加深⼀下理解。
相关文章推荐
版权声明: 本文为 InfoQ 作者【QingStor分布式存储】的原创文章。
原文链接:【http://xie.infoq.cn/article/d59273e77b14afc57a6a0ddf7】。文章转载请联系作者。
评论