OSS_PIPE:Rust编写的大规模文件迁移工具| 京东云技术团队

文盘rust 好久没有更新了。这段时间笔者用rust写了个小东西,跟各位分享一下

背景

随着业务的发展,文件数量和文件大小会急剧增加,文件迁移的数量和难度不断攀升。oss_pipe 是rust编写的文件迁移工具,旨在支撑大规模的文件迁移场景。

编写 oss_pipe 的初衷

•同类产品面临的问题

•rust 语言带来的技术红利

•oss_pipe 的基本功能

常见的 oss 迁移工具

•ossimport 阿里出品,java语言编写,支持存量增量同步,支持大部分云场的oss数据源

•ossutil 阿里出品,go语言编写,迁移只是辅助功能,主要是阿里对象存储的管理客户端

•COS Migration 腾讯出品,java语言编写 文档中未见增量迁移部分

出品方开发语言可执行文件size
ossimport阿里java单机版16MB
COS Migration腾讯java31MB
Kodoimport七牛golang31MB
oss_pipe京东rust12MB

同类产品面临的问题

•编程语言方面,java golang 这些带vm的语言容易产生OOM

•功能相对齐全的工具,如ossimport需要部署java runtime环境,安装步骤繁琐

•运行期间不仅需要条件本身参数还需要,复杂场景下还需要对jvm进行调优,对现场工程师要求较高

rust 语言带来的技术红利

•内存安全性:通过所有权、借用和生命周期机制,Rust 在编译时确保内存安全,无需垃圾回收。

•性能:接近 C/C++ 的性能,无额外运行时开销,适合系统级编程。

•并发处理:所有权模型简化并发编程,减少数据共享和复杂性。

•可靠性和生产力:强类型系统、模式匹配和丰富的工具链提高代码质量和开发效率。

•多平台支持:支持多种操作系统和硬件平台,便于跨环境部署。

•现代语言特性:结合函数式和泛型编程,同时保持与传统系统编程语言的兼容性。

•社区和生态系统:活跃的社区和成熟的生态系统,支持快速的语言发展和项目构建。

oss_pipe 的基本功能

•主要功能全量迁移存量迁移增量迁移断点续传大文件拆分上传正则表达式过滤线程数与上传快大小组合控制带宽

•存储适配及支持列表京东云对象存储阿里云对象存储腾讯云对象存储华为云对象存储AWS对象存储Minio本地

实现机制





性能测试

•文件上传 为了不让io拖后腿选择了京东云增强型ssd 任务配置

1task_id: '7171391438628982785' 2name: transfer local to oss 3task_desc: 4 type: transfer 5 source: /mnt/ext/t_upload 6 target: 7 provider: JD 8 access_key_id: JDC_xxxxxxx 9 secret_access_key: xxxxx61xxx 10 endpoint: http://s3-internal.cn-north-1.jdcloud-oss.com 11 region: cn-north-1 12 bucket: jsw-bucket 13 attributes: 14 #bach_size: 1 15 objects_per_batch: 1 16 task_parallelism: 8 17 max_errors: 1 18 meta_dir: /tmp/meta_dir 19 target_exists_skip: false 20 start_from_checkpoint: false 21 large_file_size: 500m 22 multi_part_chunk_size: 100m 23 multi_part_chunk_per_batch: 20 24 multi_part_parallelism: 24 25 transfer_type: stock





从监控上课,传输网络最高峰值超过1G,磁盘io基本满载,1.3T数据最好成绩1689秒

•oss 间同步

任务配置

1task_id: '7178591798162493441' 2name: transfer oss to oss 3task_desc: 4 type: transfer 5 source: 6 provider: JD 7 access_key_id: JDC_xxxxxx 8 secret_access_key: 53A1D2xxxx 9 endpoint: http://s3-internal.cn-north-1.jdcloud-oss.com 10 region: cn-north-1 11 bucket: jsw-bucket 12 target: 13 provider: JD 14 access_key_id: JDC_xxxxx 15 secret_access_key: 53Axxxxxxx 16 endpoint: http://s3-internal.cn-north-1.jdcloud-oss.com 17 region: cn-north-1 18 bucket: jsw-bucket-1 19 attributes: 20 objects_per_batch: 1 21 task_parallelism: 4 22 max_errors: 1 23 meta_dir: /tmp/meta_dir 24 target_exists_skip: false 25 start_from_checkpoint: false 26 large_file_size: 500m 27 multi_part_chunk_size: 100m 28 multi_part_chunks_per_batch: 10 29 multi_part_parallelism: 24 30 transfer_type: stock





1.3T 内网间传输 2110秒 完成

写在最后 oss pipe还在开发阶段,我们也愿意和有需求的小伙伴功能成长。由于oss 签名的限制,大量的cpu消耗在计算前面上面,为了解决这个问题我们魔改了aws s3 rust 版本的sdk,有在迁移场景有需求的同学可以私信找我。

作者:京东科技 贾世闻

来源:京东云开发者社区

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

AWS国庆双重礼,仅限7天

自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠AWS精美祥云纪念T恤一件。,仅限7天$20

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  

Rust基金会正式成立

Rust项目正式脱离Mozilla,Rust核心团队宣布新的Rust基金会成立,从Mozilla接手所有商标以及资产,而10位董事会成员,有5位来自创始公司AWS、华为、Google、微软和Mozilla,以及5位来自项目领导层级。Rust核心团队在去年8月,发布了将成立Rust基金会的消息,官方提到,由于Rust项目持续发展,已经到了有法律和财

Twitter的分布式自增ID算法snowflake (Java版)

概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移