新闻中心

浏览量:0
2021-03-14 00:23
华为云计算
大数据
RedHat
修改系统密码
Cisco
修复文件系统
修改密码
VMware
修改系统密码
Cisco
大数据
修复文件系统
华为云计算
修改密码
RedHat
VMware

热门关键词

这里有最新的公司动态,这里有最新的网站设计、移动端设计、网页相关内容与你分享

[Aliyun-ACP] 使用OSS处理大文件之断点续传

收藏

实验概述

本实验会自动创建一台ECS实例。首先,新建两个bucket,并开通跨区域复制功能。然后,在部署OSS Python SDK的ECS实例中,调用断点续传接口,上传一个12M的本地文件到一个OSS bucket中;重启ECS实例,模拟真实情况中,由于网络不稳定,而导致的服务器突然停止服务。最后,在ECS实例中,续传中断的Object,在OSS管理控制台中查看完整Object。

实验目标

完成此实验后,可以掌握的能力有:

1. 使用OSS管理控制台

2. 在阿里云管理控制台创建OSS bucket

3. 使用OSS Python SDK实现大文件分片断点续传;

学前建议

1. 已完成SL003 使用OSS API上传和下载文件

2. 会使用Python语言编程;

3. 了解OSS的基本概念

 

1.1 背景知识

阿里云对象存储(以下简称OSS),对外提供海量,安全,低成本,高可靠的云存储服务。用户可以通过调用API或Web控制台上传下载数据。OSS适合存放任意文件类型,适合各种网站、开发企业及开发者使用。在真实的生产环境中,客户若要将本地或服务器中的文件上传到OSS bucket中,主要使用如下四种上传方式:

·       简单上传,使用OSS Put Object方法上传单Object,适合在任何一次HTTP请求交互即可完成上传的场景,比如小文件的上传。一般通过这种方式上传的文件大小不能超过5GB。

·       表单上传,适用于小文件上传的上传方式。用户使用OSS API中的Post Object请求来完成Object的上传。非常适合嵌入在HTML网页中上传Object。经常用于网站应用场景,比如招聘网站中,用户的简历不需要先传送到网站服务器,再通过网站服务器上传文件到OSS中。用户的简历将直接存储到OSS中。但是,这样上传的文件大小限制为5GB。

·       断点续传,当使用简单上传(PutObject)较大的文件到OSS的时候,若上传的过程中出现了网络错误,那么,此次上传失败。重试必须从文件起始位置上传。针对这种情况,OSS提供了分片上传(Multipart Upload)来达到断点续传的效果。分片上传就是将要上传的文件分成多个数据块(OSS中又称为Part)来分别上传,上传完成之后再调用OSS的接口将这些Part组合成一个Object。断点续传适合解决如下四种场景:

    1) 恶劣的网络环境:如手机端,当出现上传失败的时候,可以对失败的Part进行独立重试,而不需要重新上传其他的Part。

    2) 断点续传:中途暂停之后,可以从本次上传完成的Part位置继续上传。

    3) 加速上传:要上传到OSS的本地文件很大的时候,可以并行上传多个Part以加快上传。

    4) 流式上传:可以在需要上传的文件大小还不确定的情况下开始上传。这种场景在视频监控等行业应用中比较常见。

        断点续传的流程如下:

    1)将要上传的文件按照一定的大小分片

    2)初始化一个分片上传任务(InitiateMultipartUpload

    3)逐个或并行上传分片(UploadPart

    4)完成上传(CompleteMultipartUpload

img1

·       追加上传,在一个Object后面直接追加内容的功能,通过这样方式上传的Object类型为Appendable Object,而非Normal Object。每次追加上传的数据都能即时可读。

 

img2

 

 

2.3 调用OSS API上传大文件 

1.    本小节,用户将配置Python SDK 断点续传中的参数信息,并通过断点续传方式上传本地12M的文件。

 

2.    远程登录到ECS服务器,修改配置参数。登录信息请使用本实验“实验资源”中分配的ECS服务器的“弹性IP”、“用户”和“密码”。

说明:本次实验中的ECS实例为“Linux系统”,远程登录ECS实例的详细步骤,请参考云中沙箱帮助文档中“远程访问Linux系统”。

 

3.     登录到ECS后,执行命令cd aliyun-lab/,进入aliyun-lab目录下。执行命令vim object_resumable.py,进入断点续传python脚本编辑页面,修改脚本文件。 “object_resumable.py” 脚本是调用OSS Python SDK实现断点续传。

img3

4.     首先,添加配置如下的OSS连接信息,对OSS的访问权限进行验证。

__access_key_id参数值为本次实验提供的“AK ID”;

 

__access_key_secret参数值为本次实验提供的“AK Secret”;

 

__oss_endpoint参数值为本次实验提供的“地域”对应数据中心的“外网Endpoint”数值。比如:OSS“地域”为“华东2(上海)”,则输入“华东2(上海)”的“oss-cn-shanghai.aliyuncs.com“。

OSS地域与外网Endpoint对应关系表:

地域

外网Endpoint

华东 1 (杭州)

oss-cn-hangzhou.aliyuncs.com

华东 2 (上海)

oss-cn-shanghai.aliyuncs.com

华北 1 (青岛)

oss-cn-qingdao.aliyuncs.com

华北 2 (北京)

oss-cn-beijing.aliyuncs.com

华南 1 (深圳)

oss-cn-shenzhen.aliyuncs.com

img4

img5

5.     然后,指定本实验上传文件的bucket名称,本地上传文件,以及上传到OSS bucket中Object名。输入如下参数信息:

__bucket_name:云中沙箱“实验资源”中分配的“Bucket名称”,用于将文件上传到提供的OSS bucket中。

 

__file_name:“local.txt”,本地12M大小的文本文件;

 

__object_name:“<Object 路径>/remote.txt”,<Object 路径>是云中沙箱“实验资源”中分配的“Object路径”,用于指定Object在OSS Bucket中存储路径,并重命名为"remote.txt"

img6

6.     最后,在“插入OSS断点续传的函数”下方,输入如下代码,也就是OSS Python SDK 提供的断点续传函数,完成后,保存并退出编辑页面:

        oss2.resumable_upload(bucket, __object_name, __file_name,

            store=oss2.ResumableStore(root='/tmp'),

            multipart_threshold=100*1024,

            part_size=100*1024,

            progress_callback=percentage)

断点续传相关参数说明:

-- ResumableStore,可选参数,默认将进度保存到HOME下的“.py-oss-upload”目录中。本实验中,指定把进度保存到“/tmp/.py-oss-upload”目录下。

 

-- multipart_threshold,可选参数,只要上传的文件大小,大于或等于此参数值时,就可以进行分片上传。本实验中,指明只要文件大小大于100K,就可以进行分片上传。

 

-- part_size,可选参数,分片大小。一般建议分片为100K,进行上传。

 

-- progress_callback=percentage,可选参数,界面显示的上传进度

img7

7.     完成如上python脚本的全部参数的配置后,输入命令:python object_resumable.py开始上传本地12M“local.txt”文件到OSS bucket的指定Object路径中,并可以从ECS终端访问窗口,查看当前上传进度。

img8

 

8.     至此,用户可以使用断点续传的函数上传文件。下一小节中,用户将重启ECS实例,模拟上传中断的情况。

2.5 重启ECS云主机,模拟中断情况

1.     本小节中,用户将重启ECS云主机,模拟工作环境下,文件上传意外中断的情况。

 

2.     请通过沙箱平台“实验资源”,点击“前往控制台”访问阿里云RAM登录界面。在阿里云RAM登录界面,输入本次实验“我的实验资源”中分配的“阿里云子账号”和“阿里云子账号密码”。点击“登录”,进入阿里云管理控制台。

img9img10

 

3.     首先,访问阿里云ECS管理控制台,并重启ECS云主机。在阿里云管理控制台主页面,点击左上角的“产品与服务”。在弹出的下拉菜单中,点击“弹性计算”服务类别下的“云服务器ECS”,进入ECS管理控制台。

img11

 

4.     在阿里云ECS管理控制台,点击左侧栏的“实例”,进入实例列表。

首先,选择与云中沙箱提供的“地域”相同的“地域”信息。例如,若云中沙箱提供的“地域”为“华东2(上海)”,则在页面上端的地域栏中选择“华东2”。

然后,在“实例名称”右侧的搜索栏中,输入“我的实验资源”分配的“阿里云子账号名”,并点击“搜索”,就可以查看到本实验使用的ECS云主机,并且状态为“运行中”。

最后,点击ECS实例右侧的“更多”,在弹出的下拉列表中,用户执行关于此台ECS实例的更多操作。点击“重启”,弹出对话框,选择重启方式。

img12

 

        选择“重启”,并点击“确定”,重启ECS实例。

注意:请勿选择“强制重启”,强制重启ECS实例可能导致本次实验的未知错误。

img13

6.     此时,实例状态变为“停止中”,然后,变为“启动中”。请等待1-2分钟,ECS实例的状态将再次变为“运行中”。此时,ECS实例可以登录并访问,也就是模拟在上传过程中出现意外中断的情况,然后,系统恢复正常的过程。

img14

7.     此时,返回ECS的终端访问界面,可以查看到ECS实例访问中断。

img15

 

8.     下一小节,在OSS管理控制台,查看未完全上传的“碎片”文件“local.txt”。

 

 

2.6 查看上传文件碎片信息

1.    访问OSS管理控制台,查看由于本地文件上传中断,而产生的“碎片”信息。

 

2.     首先,在阿里云管理控制台,点击页面左上角的“产品与服务”,然后,在下拉菜单中,选择“存储与CDN”类别下的“对象存储OSS”,进入OSS管理页面。

img16

 

3.     在OSS管理控制台的概览页面中,点击与云中沙箱分配的“Bucket名称”相同的Bucket。例如:云中沙箱“我的实验资源”分配的OSS “Bucket名称”为“oss-994-hd2”,则点击Bucket栏下的“oss-994-hd2”Bucket,进入分配的Bucket的管理页面。

img17

 

4.     在OSS Bucket的“Object管理”页面中,可以查看到当前Object列表中存在一个或多个文件夹。点击云中沙箱分配的一级“Object路径”。例如:用户分配的“Object路径”为“RSL006/u-xxx/”,则“RSL006”为一级Object路径。点击“RSL006”,进入Object “RSL006” 路径中。

img18

        在“RSL006”的文件夹中,点击云中沙箱分配的二级“Object路径”。例如:用户分配的“Object路径”为“RSL006/u-xxx”,则“u-xxx”为二级Object路径。点击“u-xxx”,进入Object “RSL006/u-xxx”路径中。

img19

        此时,在Object管理的列表的第一行中,用户可以查看到当前Object路径信息。在“Object管理”的Object列表中,显示“暂无数据”。这是因为本地文件“local.txt”,由于上传中断,导致没有成功上传到OSS中。

说明:因为只有文件的内容全部上传,并且上传成功,才会显示在Object管理中。

img20

5.     点击左侧栏中的“碎片管理”,查看所有上传未完成的Object,也称为“Object碎片”。点击碎片右侧“碎片”栏下“点击统计”,查看已上传的文件大小。

img21

        此时,可以查看到碎片的大小和碎片个数,碎片的大小小于12M。

img22

6.     下一小节,将再次登录ECS实例,并调用OSS Python SDK的断点续传函数,完成本地文件的全部上传。

 

 

2.7 调用OSS API 续传大文件

1.     本节中,用户将续传中断的Object,并将本地“local.txt”保存到指定的Object路径中。

 

2.     重新远程登陆访问ECS实例。在ECS终端界面中,执行命令cd aliyun-lab/和python object_resumable.py,续传中断的本地文件内容。此时,上传进度初始值与ECS实例中断时的进度相同。

img23

        等待1分钟,页面提示上传成功。

img24

3.     返回OSS管理控制台的“Object管理”页面,并进入“我的实验资源”分配的“Object路径”中,可以查看到上传成功的remote.txt文件,大小为12M。

img25

 

 

首页    阿里云    [Aliyun-ACP] 使用OSS处理大文件之断点续传