分布式存储一方面是从传统的单机存储发展而来,解决单机存储的性能和容量瓶颈,另一方面它最终还是由单机存储引擎通过网络组合成一个大型分布式系统。在此基础之上还需要包装接口,对外提供对象存储、块存储、文件存储、并行存储多种多样的产品形态方便用户使用。
所以学习的话可以先从基本的操作系统方面出发,了解单机存储系统上的 IO 栈,先尝试用 QEMU 搭建一个 Linux 内核的调试环境,用 gdb 尝试去打断点,了解一次 read/write 系统调用的时候,操作系统是怎么处理一个 IO 请求的。比如了解 ext4 等文件系统的数据在内存和磁盘上是通过什么数据结构组织、索引和缓存的(LSM、B 树、哈希表等),OS 又是最终如何通过硬件驱动、DMA、MMIO、中断等方式去真正地发起读写磁盘(块设备)的命令和接收执行结果等。阿里云盘古的大佬写了长文详解一个IO的传奇一生 (1)_51CTO博客_一个io的传奇一生。有时间的话可以参考 https://linux-kernel-labs.github.io/refs/heads/master/ 相关的 Lab(块设备、文件系统),去动手实践一下,印象会更深刻。另外还需要关注一下 SSD、HDD、ZNS SSD、SMR HDD 之类的硬件特点,针对不同的特点又有什么不同的文件系统设计。
了解了单机的文件系统、块设备的原理之后,分布式存储其实就是想办法将整个 IO 栈拆开,放到不同的机器上去执行,用网络将不同抽象层粘合起来,并且根据实际的功能性能需求修改实现。分布式存储通常需要在读写性能、可用性、可靠性、扩展性、成本之间做取舍。这时候可以了解一下曾经学术界和工业界都提出过什么比较知名的分布式存储系统架构,阅读相关文档和论文,对比一下他们的产品形态(提供的 API)、优缺点和实现原理,开源的系统也可以尝试阅读代码。例如,高性能计算方向的 Lustre、BeeGFS、Intel DAOS,往往是兼容 POSIX 协议和支持 MPI-IO,性能高;大数据时代大名鼎鼎的 Google File System 及其开源实现 HDFS,聚焦于基于大量廉价硬件构建高可用的存储系统,牺牲 POSIX 语义,提供专用 API;云计算底层的 Windows Azure Storage、阿里云盘古,为对象存储、块存储等产品形态提供底层的存储技术底座;还有比较通用的比较经典的 Ceph、GlusterFS、GPFS 等。
还可以阅读一下《大话存储》这本书,里面涉及到了单机和分布式存储的知识,了解更多的存储技术和发展历史。
对单机和分布式存储的架构都有了一个大致的了解之后,就可以继续深入研究感兴趣的细节了。一方面可以从存储技术本身出发,比如针对数据可靠性,通常采用副本或者擦除码的方式做冗余,那么就可以研究一下副本之间的一致性用什么算法保证(链式复制、Quorum、Raft、Paxos 等),擦除码有什么空间上和时间上更优的算法(AZC 等)。对于网络互联,现在也出现了很多新型硬件和技术,比如 RDMA(Infiniband、RoCE)、SmartNIC(基于 FPGA、NPU 或者 ARM)、CXL、NVMe-oF 等,可以研究一下基于这些新的网络技术,怎么实现比传统的 TCP/IP 更高效的性能。存储硬件也出现了 PMEM(虽然凉了)、NVMe 之类的超低延迟超高性能的存储设备,对于软件栈提出了很高的要求,传统的 IO 和网络栈太深,内存拷贝、上下文切换太多,已经不适应高性能的硬件,就可以研究一下使用 DPDK、SPDK 等用户态的高性能框架去构建单机上的存储引擎,同时单机引擎也会一定程度反过来影响分布式存储的架构。
也可以从应用方面出发,去了解不同的应用负载对存储系统提出了什么要求,比如现在很火的 AI 大模型,也涉及到数据集的存储和模型权重(Checkpoint)的存储,那么可能就涉及到怎么高效大带宽地从 GPU 读写数据,使得 IO 尽可能不影响模型的训练过程,甚至必要时牺牲一定的可靠性或者一致性进一步压榨性能。对于虚拟化负载(超融合,比如 PVE+Ceph),就可以研究一下怎么通过内核模块等把分布式存储虚拟化成 VM 里的块设备,提供通用性,保障安全性和性能等。另外像 Docker、K8s 之类的容器和调度技术的发展,也催生了一些分布式存储生态上的需求,比如 CSI 存储插件等。
之后如果想继续探索分布式存储前沿技术,那么就可以多读论文,尝试去做相关方向的实验室学习;或者想投身工业界,就尝试磨炼好工程技术,去微软、AWS、阿里、华为、SmartX 等存储相关的公司实习或者工作,了解商用的分布式存储系统及其生态是怎么构建和交付的。
分布式存储这块涉及到的技术比较多和杂,随着新硬件新技术新应用的出现还会继续演进出不同的架构和产品形态,我在这里也是抛砖引玉,泛泛列举了一些常见的技术,更深入的学习还需要多阅读论文多动手实践。
——发自我的知乎