HarData - 高性能数据传输服务
专为大文件、弱网环境、跨区域传输场景打造的现代化文件同步解决方案
为什么需要 HarData?
在科学计算、跨机房数据同步等场景中,我们经常面临这些挑战:
- 文件巨大 - 单文件动辄几十GB,传统工具效率低下
- 网络不稳 - 跨区域、跨运营商网络质量参差不齐
- 带宽昂贵 - 重复传输相同数据造成资源浪费
- 断点续传 - 大文件传输中断后需要从头开始
HarData 专为解决这些痛点而生,采用 Rust 语言编写,提供高性能数据传输能力。
核心特性
智能去重
基于 FastCDC 内容感知分块算法,结合 xxHash (弱哈希) + BLAKE3 (强哈希) 双重验证机制。系统会自动识别文件中真正发生变化的部分,只传输差异数据,大幅减少网络传输量。
对于频繁更新的大文件(如日志、数据库、仿真结果),去重效果尤为显著,通常可节省 60%-90% 的传输量。
自适应传输
采用 AIMD (加性增乘性减) 算法动态调整并发度:
- 传输顺利时逐步增加并发,充分利用带宽
- 遇到拥塞或错误时快速降低并发,避免网络恶化
- 并发范围 4-64,自动适应从千兆到弱网的各种环境
双协议支持
同时支持 QUIC 和 TCP 协议,采用 Happy Eyeballs 算法智能选路:
- QUIC 优先 - 0-RTT 连接、多路复用、内置加密
- TCP 降级 - 当 QUIC 不可用时自动切换
- 并发竞速 - 200ms 内选择最优连接
智能压缩
根据文件类型自动选择最优压缩算法:
| 文件类型 | 算法 | 典型压缩率 |
|---|---|---|
| 日志文件 | LZ4 | 15% |
| JSON/XML/配置 | Brotli | 20-25% |
| 源代码 | Zstd | 30% |
| 仿真结果 | Zstd | 70% |
| 图片/视频/压缩包 | 跳过 | 100% |
系统架构
┌─────────────────────────────────────────────────────────────────┐
│ HarData 架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Sync 控制面 │ │ Agent 数据面 │ │
│ ├─────────────────┤ QUIC/TCP ├─────────────────┤ │
│ │ HTTP API:9080 │◄──────────────────►│ QUIC:9443 │ │
│ │ 任务调度器 │ │ TCP:9444 │ │
│ │ 全局去重索引 │ │ 文件计算服务 │ │
│ │ CDC 缓存 │ │ 块读取服务 │ │
│ │ SQLite 持久化 │ │ │ │
│ │ Web 管理界面 │ │ │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Sync 节点(控制面)负责任务调度、去重决策、进度追踪,提供 REST API 和 Web UI。
Agent 节点(数据面)负责实际的文件读取、哈希计算、数据传输,可部署多个。
技术亮点
- Rust 实现 - 内存安全,零成本抽象,无 GC 停顿
- 全异步架构 - 基于 Tokio 运行时,轻松处理万级并发连接
- 零拷贝 I/O - Linux 环境下使用 pread/pwrite 系统调用优化
- 内存池化 - crossbeam 无锁队列实现高效缓冲区复用
- 断点续传 - SQLite 持久化传输状态,中断后自动恢复
性能参数
| 特性 | 数值 |
|---|---|
| 最大并发连接 | 1000 |
| 最大并发流 | 1000/连接 |
| 分块范围 | 256KB ~ 8MB |
| 平均分块 | 2MB |
| 单块最大 | 100MB |
| 缓冲池容量 | 500 x 256KB |
快速开始
1. 配置文件
# config.yaml
sync:
http_bind: "0.0.0.0:9080"
data_dir: "./data/sync"
web_ui: true
regions:
- name: "datacenter-1"
quic_bind: "10.0.1.100:9443"
tcp_bind: "10.0.1.100:9444"
agent:
quic_bind: "0.0.0.0:9443"
tcp_bind: "0.0.0.0:9444"
data_dir: "/data"
2. 启动服务
# 在数据源机器启动 Agent
hardata agent -c config.yaml
# 在控制机器启动 Sync
hardata sync -c config.yaml
3. 创建同步任务
# 通过 API 创建任务
curl -X POST http://localhost:9080/api/jobs \
-H "Content-Type: application/json" \
-d '{
"source_path": "/data/simulation/results",
"dest_path": "/backup/simulation/results",
"region": "datacenter-1",
"job_type": "sync"
}'
# 查看任务状态
curl http://localhost:9080/api/jobs/{job_id}
4. Web 管理界面
访问 http://localhost:9080 可使用内置的 Web UI 查看任务列表、实时进度、统计信息。
适用场景
- 科学计算 - HPC 集群数据归档与分发
- 跨机房同步 - 异地灾备、多活数据中心
- 增量备份 - 只传输变化部分,节省时间和带宽
- 弱网传输 - 自适应调节,保证传输可靠性
与其他工具对比
| 特性 | HarData | rsync | rclone |
|---|---|---|---|
| 内容去重 | 全局级 | 文件级 | 无 |
| 协议 | QUIC+TCP | SSH | HTTP |
| 自适应并发 | 有 | 无 | 固定 |
| 智能压缩 | 按类型 | 统一 | 统一 |
| 断点续传 | 块级 | 文件级 | 文件级 |
| Web UI | 内置 | 无 | 需配置 |
开源地址
- GitHub: https://github.com/Linyuqiz/hardata
- 问题反馈: https://github.com/Linyuqiz/hardata/issues
HarData - 使用 Rust 构建,为性能而生。
如果这个项目对你有帮助,欢迎 Star 支持!
Ext Link: https://github.com/Linyuqiz/hardata
评论区
写评论还没有评论