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

京东云开发者
• 阅读 402

文盘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 腾讯 java 31MB
Kodoimport 七牛 golang 31MB
oss_pipe 京东 rust 12MB

同类产品面临的问题

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

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

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

rust 语言带来的技术红利

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

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

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

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

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

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

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

oss_pipe 的基本功能

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

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

实现机制



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



性能测试

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

task_id: '7171391438628982785'
name: transfer local to oss
task_desc:
  type: transfer
  source: /mnt/ext/t_upload
  target:
    provider: JD
    access_key_id: JDC_xxxxxxx
    secret_access_key: xxxxx61xxx
    endpoint: http://s3-internal.cn-north-1.jdcloud-oss.com
    region: cn-north-1
    bucket: jsw-bucket
  attributes:
          #bach_size: 1
    objects_per_batch: 1
    task_parallelism: 8
    max_errors: 1
    meta_dir: /tmp/meta_dir
    target_exists_skip: false
    start_from_checkpoint: false
    large_file_size: 500m
    multi_part_chunk_size: 100m
    multi_part_chunk_per_batch: 20
    multi_part_parallelism: 24
    transfer_type: stock



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



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

•oss 间同步

任务配置

task_id: '7178591798162493441'
name: transfer oss to oss
task_desc:
  type: transfer
  source:
    provider: JD
    access_key_id: JDC_xxxxxx
    secret_access_key: 53A1D2xxxx
    endpoint: http://s3-internal.cn-north-1.jdcloud-oss.com
    region: cn-north-1
    bucket: jsw-bucket
  target:
    provider: JD
    access_key_id: JDC_xxxxx
    secret_access_key: 53Axxxxxxx
    endpoint: http://s3-internal.cn-north-1.jdcloud-oss.com
    region: cn-north-1
    bucket: jsw-bucket-1
  attributes:
    objects_per_batch: 1
    task_parallelism: 4
    max_errors: 1
    meta_dir: /tmp/meta_dir
    target_exists_skip: false
    start_from_checkpoint: false
    large_file_size: 500m
    multi_part_chunk_size: 100m
    multi_part_chunks_per_batch: 10
    multi_part_parallelism: 24
    transfer_type: stock



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



1.3T 内网间传输 2110秒 完成

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

作者:京东科技 贾世闻

来源:京东云开发者社区

点赞
收藏
评论区
推荐文章
AWS国庆双重礼,仅限7天
自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠AWS精美祥云纪念T恤一件。,仅限7天$20
AWS国庆双重礼,仅限7天
自2021年10月1日00:00起至2021年10月7日24:00,新注册并激活(需全部完成账号注册的五个步骤,否则账号状态并未激活)AWS海外区域账户,填写页面下方表单,即可申领价值$200美元的AWS海外区域账户服务抵扣券直充到您的账户,用以抵扣服务消费,助您轻松体验多个云迁移应用场景。同时,您还可获赠AWS精美祥云纪念T恤一件。,仅限7天$20
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Rust基金会正式成立
Rust项目正式脱离Mozilla,Rust核心团队宣布新的Rust基金会成立,从Mozilla接手所有商标以及资产,而10位董事会成员,有5位来自创始公司AWS、华为、Google、微软和Mozilla,以及5位来自项目领导层级。Rust核心团队在去年8月,发布了将成立Rust基金会的消息,官方提到,由于Rust项目持续发展,已经到了有法律和财
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
3年前
Java多线程导致的的一个事物性问题
业务场景我们现在有一个类似于文件上传的功能,各个子站点接受业务,业务上传文件,各个子站点的文件需要提交到总站点保存,文件是按批次提交到总站点的,也就是说,一个批次下面约有几百个文件。      考虑到白天提交这么多文件会影响到子站点其他系统带宽,我们将分站点的文件提交到总站点这个操作过程独立出来,放到晚上来做,具体时间是晚上7:00到早上7:00。
非凸科技 非凸科技
2年前
Rust开发者大会,内容早知道!
在量化交易中,总会发现有一部分「回撤」是在策略意料之外的,如进程闪退、上下游出问题等。那么,Rust在量化场景中的应用,相较于C,对回撤产生了什么样的影响呢?非凸科技量化策略负责人将从“自身系统稳定”与“高效应对风险”两个方面进行全面解答,欢迎锁定「本周日14:00」—分论坛「Rust商业实践」!时间:7月31日(本周日)参会:http://rust
非凸科技 非凸科技
2年前
用Rust编写的Linux内核GPU驱动程序,或将到来
外媒Phoronix报道,AsahiLinix的核心开发者AsahiLina正在探索用Rust编程语言编写该DRM内核GPU驱动程序的可行性。如果成功了,这将是第一个用Rust语言编写的Linux内核GPU驱动程序。鉴于目前尚未有Rust编写的实际驱动程序代码,驱动程序的Rust实现有几种可能性:1.完全使用R
京东云开发者|京东云RDS数据迁移常见场景攻略
云时代已经来临,云上很多场景下都需要数据的迁移、备份和流转,各大云厂商也大都提供了自己的迁移工具。本文主要介绍京东云数据库为解决用户数据迁移的常见场景所提供的解决方案。场景一:数据迁移上云数据迁移上云是最常见的一类场景,目前京东云提供了两个