专栏名称: 运维帮
互联网技术分享平台,分享的力量。帮主一直坚信技术可以改变世界,从毕业到现在干了15年运维,有许多话要和你说。
目录
相关文章推荐
51好读  ›  专栏  ›  运维帮

AWS S3 千万级小文件的数据迁移和同步

运维帮  · 公众号  · 运维  · 2017-03-01 17:26

正文

请到「今天看啥」查看全文


然后尝试在 EC2 上进行 S3 手动跨域同步,但是速度跟直接在目标 IDC 机房机器上执行差不多,所以放弃这个方案。

这里只能用最笨的办法解决,从命令使用方式上找到最快的方法。

s3cmd 是最稳定的 S3 客户端

s3cmd 是最常用的 S3 客户端,是一个 Python 写的小程序,数据同步最常用命令:

s3cmd sync s3://bucket/folder /localpath/bucket/folder -v --skip-existing

这条命令适用于小量文件的镜像同步。或者最终的数据镜像校验。它的执行过程是先扫描本地文件夹的文件列表,存储在内存中;然后从远程文件夹获取文件夹下的文件列表和文件的 meta 信息;然后对比差异开始逐个文件的下载。这里的问题是千万级别的本地文件 meta 信息的扫描、S3 上文件列表和 meta 信息的传送都会耗时很久。假如中途进程中断,整个过程会重新开始。并且非常耗费 CPU 资源。

s3cmd get -r --skip-existing s3://bucket/folder /localpath/bucket/folder

这条命令直接从远程 S3 获取文件进行下载,但是不提供数据校验。速度很快,瓶颈在网络 IO 上。

尽管有很多多线程的 S3 客户端工具,但是在尝试之后 s3cmd 仍然是最好的选择,原因是更加稳定,功能完善,考虑到了很多边界问题。但是小文件传输 s3cmd 单进程成为瓶颈,并不能充分利用带宽和机器资源。单个进程的同步速度只有几十 KB/s 。







请到「今天看啥」查看全文