设计 Facebook 照片存储
动机与假设
- PB 级 Blob 存储
- 传统的基于 NFS 的设计(每张图像存储为一个文件)存在元数据瓶颈:大的元数据大小严重限制了元数据命中率。
- 进一步解释元数据开销
对于照片应用,大部分元数据(如权限)未被使用,从而浪费了存储容量。然而, 更重要的成本在于,文件的元数据必须从磁盘读取到内存中,以便找到文件本身。在小规模上这并不显著,但在数十亿张照片和 PB 级数据的情况下,访问元数据成为了吞吐量瓶颈。
解决方案
通过将数十万张图像聚合在一个单一的 haystack 存储文件中,消除了元数据开销。
架构
数据布局
索引文件(用于快速内存加载)+ 包含针的 haystack 存储文件。
索引文件布局
haystack 存储文件