跳转到内容
HexaTransfer
返回博客
技术深度解析

分布式文件存储原理详解

理解IPFS和Ceph等分布式文件存储系统。现代存储的复制、一致性和容错机制。

国家网信办(CAC)在《数据出境安全评估办法》中明确要求:超过 100 万人个人信息的数据出境须经安全评估。这对分布式文件存储架构提出了直接要求:跨境复制策略、数据驻留策略和故障域设计必须与监管边界对齐。分布式文件存储将数据分散到多个节点,使任何单台机器既不成为瓶颈,也不成为单点故障。如何放置数据、如何复制、如何处理节点故障、如何保持一致性——这些设计选择将 Ceph、GlusterFS、HDFS、MinIO 和 IPFS 等系统区分开来。

复制 vs. 纠删码

两种策略防止节点故障。复制存储多份完整副本:Ceph 默认 3 副本,1 GB 对象占用 3 GB 原始存储。易于理解,读取速度快,但存储成本高。纠删码使用 Reed-Solomon 算法将数据分为 k 个数据块和 m 个奇偶校验块,(10,4) 方案存储 14 个块,可容忍 4 次故障,开销仅 40% 而非 200%。MinIO 默认使用纠删码;Backblaze Vaults 采用 17+3 Reed-Solomon。纠删码读取较慢,因为可能需要重建多个块,因此热数据通常用复制,冷数据用纠删码。

一致性哈希与数据放置

系统如何决定哪个节点存储哪个对象?一致性哈希(由 Karger 等人于 1997 年发表,经 DynamoDB 和 Cassandra 推广)将键哈希到一个环上,每个范围映射到一个节点。添加或删除节点只需重新分配一部分键,而非整个数据集。Ceph 使用 CRUSH(可扩展哈希下的受控复制),这是一种基于拓扑图(机架、行、数据中心)确定对象放置的确定性算法,确保副本落在不同故障域。每个物理节点对应多个虚拟节点可均衡负载。

一致性模型:强一致性、最终一致性与因果一致性

CAP 定理指出无法同时拥有一致性、可用性和分区容忍性,需选择两者。强一致性(线性化)意味着读取总能看到最新写入;Spanner 和 etcd 通过 Paxos 或 Raft 共识协议实现这一点。最终一致性(DynamoDB、Cassandra)意味着副本会随时间收敛,传播期间可能读到旧数据。因果一致性在不需要完整线性化的情况下保持因果顺序。文件存储通常对元数据(列表、大小)接受最终一致性,对同一对象的写后读则需要强一致性。

Ceph 架构:OSD、MON、MGR 与 MDS

Ceph 运行四种守护进程。OSD(对象存储守护进程)存储对象并进行复制;集群通常在旋转磁盘或 NVMe 上运行 10–1,000 个 OSD。MON(监控器)通过 Paxos 维护集群状态;3 或 5 个 MON 提供仲裁。MGR(管理器)暴露指标并托管仪表盘。MDS(元数据服务器)为 CephFS POSIX 文件系统层提供服务。通过 RADOS Gateway(RGW)提供 S3 和 Swift API 的对象存储。通过 RBD 提供支持 OpenStack 卷和虚拟机磁盘的块存储。一套代码库,三种使用方式。

HDFS 与 Hadoop 遗产

HDFS 面向 MapReduce 和 Spark 作业的大型顺序读取。文件分割为 128 MB 或 256 MB 的块,每块默认在 DataNode 间 3 副本复制。NameNode 将所有元数据保存在内存中,限制每个 NameNode 约 5 亿个文件的规模。HDFS 不擅长小文件(元数据开销占主导)或 POSIX 兼容性,但对 TB 级数据集的分析处理表现出色。随着云端计算与存储分离,HDFS 正被对象存储(S3、GCS)逐步取代。

内容寻址存储:IPFS 与 Filecoin

IPFS 通过内容的哈希值(CID,内容标识符)而非位置来标识内容。任何人存储相同内容的文件都会产生相同的 CID。检索通过基于 Kademlia 的 DHT(分布式哈希表)查找持有内容的节点。Filecoin 添加了经济激励机制:矿工通过 PoRep(复制证明)和 PoSt(时空证明)证明其存储内容并获得 FIL 代币。IPFS 适合存档和去中心化发布(NFT 元数据、Web3 站点);由于 DHT 查找延迟(数百毫秒到数秒),它不适合交互式工作负载。

对象存储:S3、R2、B2 与 MinIO

对象存储提供扁平的键值 API:PUT 一个带键的对象,GET 取回。没有目录,没有 POSIX 语义。这种简单性实现了大规模扩展——AWS S3 以 11 个 9 的耐久性存储数万亿对象。Cloudflare R2、Backblaze B2、Wasabi 和 DigitalOcean Spaces 在不同后端上实现 S3 API。MinIO 以开源 AGPL v3 协议在本地运行,通常在 Kubernetes 中以 StatefulSet 方式部署,在商用硬件上提供 S3 兼容存储。对象存储基本赢得了云存储市场——API 简单,定价清晰,耐久性可信赖。

故障域与数据多样性

将三个副本放在同一机架中,当机架顶部交换机故障时,三个副本一同消失。故障域感知意味着副本落在不同机架、行或数据中心。Ceph 的 CRUSH 规则可编码"至少 2 份副本在不同机架,1 份副本在不同数据中心"。云对象存储透明地处理这一点——S3 标准层跨 3 个以上可用区存储。对于跨地域复制,S3 跨地域复制(CRR)异步将对象镜像到另一个地域,可用于容灾和满足《数据安全法》(DSL)的地域数据驻留要求。

文件传输服务的实践启示

文件传输服务通常构建于对象存储之上,而非 POSIX 文件系统。S3 兼容后端(AWS S3、Cloudflare R2、MinIO)处理耐久性和规模,无需团队自行运维 Ceph 或 GlusterFS。服务层添加鉴权、预签名 URL、元数据和面向用户的功能。HexaTransfer 使用 S3 兼容后端配合客户端 AES-256-GCM 加密,由分布式存储层负责耐久性保证,而应用层确保文件内容对各层保持私密。

立即体验:https://hexatransfer.com——免费,无需注册,最大支持 10 GB。

通过端到端加密安全发送大文件

通过端到端加密免费传输最大10GB的文件。无需注册账户。文件在上传前在浏览器中加密,其他人无法读取。

发送文件