Facebook图片存储架构的学习
分享照片是Facebook上最流行的的功能之一。截至目前,用户已经上传超过15亿张照片,这使得Facebook成为最大的照片共享网站。对于每一个上传的照片,Facebook都生成并存储四个大小不同的图像,从而转化为共60亿张照片,总容量超过1.5PB。目前以每周220万新照片的速度增长,相当于每周要额外增加25TB存储。在高峰期每秒需要传输55万照片。这些数字对Facebook的照片存储基础设施的一个重大的挑战。 旧的 NFS 照片架构 老的照片系统架构分以下几个层: 上传层接收用户上传的照片并保存在 NFS 存储层。 照片服务层接收 HTTP 请求并从 NFS 存储层输出照片。 NFS存储层建立在商业存储系统之上。 因为每张照片都以文件形式单独存储,这样庞大的照片量导致非常庞大的元数据规模,超过了 NFS 存储层的缓存上限,导致每次请求上传都包含多次I/O操作。庞大的元数据成为整个照片架构的瓶颈。这就是为什么 Facebook 主要依赖 CDN 的原因。为了解决这些问题,他们做了两项优化: 因为每张照片都以文件形式单独存储,大量为目录及文件在NFS 存储层上产生了大量的元数据, 这个规模的元数据量远远超过了超过了NFS 存储层的缓存上限,导致每次招聘请求会上传都包含多次I/O操作。庞大的元数据成为整个照片架构的瓶颈。这就是为什么 Facebook主要依赖 CDN 的原因。为了解决这些问题,他们做了两项优化: Cachr: 一个缓存服务器,缓存 Facebook 的小尺寸用户资料照片。 NFS文件句柄缓存:部署在照片输出层,以降低 NFS 存储层的元数据开销。 新的 Haystack 照片架构 新的照片架构将输出层和存储层合并为一个物理层,建立在一个基于HTTP 的照片服务器上,照片存储在一个叫做haystack 的对象库,以消除照片读取操作中不必要的元数据开销。新架构中,I/O 操作只针对真正的照片数据(而不是文件系统元数据)。haystack 可以细分为以下几个功能层: HTTP 服务器 照片存储 Haystack 对象存储 文件系统 存储空间 在下面的介绍中,我们会对于上述的每个功能层做详细的讲述。 存储空间 Haystack 部署在商业存储刀片服务器上,典型配置为一个2U的服务器,包含: 两个4核CPU 16GB [...]![]()






