OSS_PIPE: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 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,有在遷移場景有需求的同學可以私信找我。


掃一掃,與作者交流一下

本文分享自微信公衆號 - 京東雲開發者(JDT_Developers)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章