首页 > 其他分享 >OSS_PIPE:Rust编写的大规模文件迁移工具| 京东云技术团队

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

时间:2024-05-13 14:52:53浏览次数:24  
标签:access cn OSS PIPE Rust key 迁移 oss 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

腾讯

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本地

实现机制

 

 

 

性能测试

•文件上传 为了不让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

 

 

 

从监控上课,传输网络最高峰值超过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

 

 

 

1.3T 内网间传输 2110秒 完成

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

作者:京东科技 贾世闻

来源:京东云开发者社区

标签:access,cn,OSS,PIPE,Rust,key,迁移,oss,rust
From: https://www.cnblogs.com/Jcloud/p/18189233

相关文章

  • 2024年,Rust和Go学习哪个更有优势
    在编程语言的世界里,技术的更新迭代速度一直都是非常快的。而在2024年这个特殊的年份,Rust和Go这两门编程语言备受关注,成为了许多程序员学习的焦点。那么,在这两者之间,到底该选择学习哪个,才能更具优势呢?本文将从各个方面分析比较Rust和Go,帮助读者更好地做出决策。1.语言特性比较Ru......
  • 云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!
    从可视化编排到支持YAML编排云效流水线Flow是开箱即用的企业级持续集成和持续交付工具,支持丰富的代码源、构建、自动化测试工具、多种部署类型和部署方式,与阿里云深度集成,还提供多种企业级特性,助力企业高效完成从开发到上线CICD过程。在业界,流水线产品通常有2种使用方式......
  • 云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!
    从可视化编排到支持YAML编排云效流水线Flow是开箱即用的企业级持续集成和持续交付工具,支持丰富的代码源、构建、自动化测试工具、多种部署类型和部署方式,与阿里云深度集成,还提供多种企业级特性,助力企业高效完成从开发到上线CICD过程。在业界,流水线产品通常有2种使用方式......
  • SciTech-BigDataAIML-TensorFlow-Model的编译:设置(LossFunction+Optimizer+Metrics)与
    机器学习|model.compile()用法model.compile()的作用:为经过设计的Model(神经网络模型)设置好:loss损失函数、optimizer优化器、metrics准确性评价函数。并且进行编译;Optimizers优化器:Optimizer的主要功能是作用在GD(梯度下降)的过程,使得Gradient(梯度)更快(快速......
  • RustDesk 自建服务器部署和使用教程
    RustDesk是一个强大的开源远程桌面软件,是中国开发者的作品,它使用Rust编程语言构建,提供安全、高效、跨平台的远程访问体验。可以说是目前全球最火的开源远程桌面软件了,GitHub星星数量达到了惊人的64k!与TeamViewer、ToDesk等专有远程访问解决方案相比,RustDesk作为一个开源......
  • 分布式 raft 可以同步日志为何还要gossip同步日志?
    Raft可以同步日志通信协议用的是Gossip 分布式系统中,Raft是一种常用的一致性算法,用于保证多个节点之间的数据一致性。Raft通过选举leader节点,并在leader节点上复制日志来确保数据的一致性。然而,尽管Raft提供了可靠的一致性保证,但在某些情况下,仍然需要一些额外的机制......
  • httpsok-v1.11.0支持OSS证书自动部署
    ......
  • Rust工作空间(workspace)实践
    本文将介绍如何使用cargoworkspace来管理多个package,并通过实践介绍workspace的一些基础场景下的使用、配置方式。在rust中编写某些中小型项目时,我们通常不会将一个工程拆分为多个package,而是通过一个package下不同的目录模块来实现模块拆分,尽管大部分场景下这种开发方式已经足......
  • Rust 错误处理
    rust处理错误,不使用trycatch,而是使用Result<T,E>。简单的处理rust错误在各种关于rust错误处理的文档中,为了解释清楚其背后的机制,看着内容很多,不好理解。比如我们写一个方法,读取文件内容:fnread_file_to_string(file_path:String)->Result<String,io::Error>{le......
  • Rust | 实现 API 限速操作 Example
    在这篇文章中,我们将讨论如何在Rust中实现API限速。当涉及到生产中的服务时,是为了确保不良行为者不会滥用API——这就是API限速的作用所在。我们将实现“滑动窗口”算法,通过动态周期来检查请求历史,并使用基本的内存hashmap来存储用户IP及其请求时间。我们还将研究如......