写点什么

OSS_PIPE:Rust 编写的大规模文件迁移工具

  • 2024-05-13
    北京
  • 本文字数:1707 字

    阅读完需:约 6 分钟

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

背景

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

编写 oss_pipe 的初衷

•同类产品面临的问题

•rust 语言带来的技术红利

•oss_pipe 的基本功能

常见的 oss 迁移工具

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

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

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

同类产品面临的问题

•编程语言方面,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 osstask_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 osstask_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,有在迁移场景有需求的同学可以私信找我。

作者:京东科技 贾世闻

来源:京东云开发者社区

发布于: 刚刚阅读数: 4
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
OSS_PIPE:Rust编写的大规模文件迁移工具_京东科技开发者_InfoQ写作社区