Xet 块级去重规范
概述
块级去重是 Xet 系统中的一项基本优化技术,通过识别和共享跨文件和仓库的相同内容块(块)来消除冗余数据。 本规范详细说明了在保持数据完整性和访问控制的同时实现高效存储和传输的过程、算法和安全机制。
Xet 中的去重在块级别而不是文件级别运行,提供细粒度的去重功能,即使文件差异很大也能识别共享内容。 这种方法对于机器学习和数据科学工作流中常见的场景特别有效,例如:
- 具有增量更改的数据集的多个版本
- 共享共同层或参数的模型检查点
- 具有相似内容的文档和配置文件
- 只有部分内容在版本之间发生变化的大文件
核心概念
块
块是使用内容定义分块(CDC)和滚动哈希函数从文件派生的可变大小内容块。块是 Xet 中去重的基本单位。
- 目标大小:64KB(可配置)
- 大小范围:8KB 到 128KB(最小和最大约束)
- 标识:每个块由其加密哈希(MerkleHash)唯一标识
Xorbs
Xorbs 是聚合多个块以实现高效存储和传输的对象:
- 最大大小:64MB
- 最大块数:每个 xorb 8,192 个块
- 目的:将多个块批处理在一起,以减少上传和下载块组时的元数据和网络开销
Shard(Xorb 列表)
Shard 是包含可以针对其进行去重的 xorbs 列表的对象(对于去重上下文,忽略 shard 格式的文件信息部分)。
- 最大大小:64MB
- 目的:在全局去重请求的肯定回复上提供格式,包含有关 CAS 系统中已存在的 xorbs 的信息。
CAS(内容寻址存储)
CAS 系统提供底层存储基础设施:
- 内容寻址:所有对象都通过其加密哈希存储和检索
- 不可变性:一旦存储,文件内容无法修改
- 去重:相同内容在存储级别自动去重
去重过程
1. 文件处理和分块
当文件被处理以上传时,它经历以下步骤:
- 分块:使用 GearHash 算法的内容定义分块创建文件数据的可变大小块
- 哈希计算:使用加密哈希函数(基于 Blake3 的 MerkleHash)对每个块的内容进行哈希
- 块对象创建:块用包括哈希、大小和数据的元数据包装
2. 多级去重策略
Xet 采用三级去重策略,以在最小化延迟的同时最大化效率: