【51CTO独家特稿】照片应用程序是Facebook最流行的功能。直至目前为止,Facebook的用户已经上传了超过150万幅照片,这使得Facebook成为最大的照片共享网站。对于每一个上传的照片, Facebook生成并保存成4种不同大小的图像,即总共有60亿的图片占1.5PB的存储容量。目前的增长速度是每星期220万个新照片,即每周消耗25TB的额外存储空间。在高峰期,平均每秒会上传550,000幅图像。这些数字给Facebook的照片存储基础架构带来了严重的挑战。
NFS照片基础架构
旧的照片基础架构包含几个层次:
◆上传层接收用户上传的照片,测量原始图像的大小并将其保存到NFS存储层。
◆照片服务层接收HTTP照片请求,并向用户提供保存于NFS存储层的照片。
◆NFS存储层建立于商业存储设备之上。
由于每个图像存储在自己的文件内,所以根据命名空间目录和文件inode(内节点),在存储层产生了大量的元数据。这些元数据量远远超过了NFS存储层的缓存能力,导致了上传和读取每张照片时成倍的I/O操作。整个照片服务的基础架构由于NFS存储层的大量元数据负荷而成为了一个瓶颈,这就是Facebook严重依赖CDNs来提供照片服务的原因之一。以下两个附加的优化部署,用来在一定程度上减轻这个问题:
Cachr :一个缓存服务层,用来缓存Facebook中较小的“个人资料”图像。
NFS文件句柄缓存——部署在照片服务层,消除了一些NFS存储级元数据负荷
Haystack照片基础架构
新的照片基础架构将照片服务层和存储层合并为一个物理层。它实现了一个基于HTTP的照片服务器,把照片存储在名为Haystack的通用对象中。对于新层次的主要要求是消除任何照片读取操作的不必要的元数据开销,使每个读取I/O操作只是读取实际照片数据(而不是文件系统元数据)。Haystack可划分为以下一些功能层-
◆HTTP服务器
◆照片存储
◆Haystack对象存储
◆文件系统
◆存储设备
以下各节中,我们会自底向上密切关注每一个功能层。
存储设备
Haystack部署于日常存储片之上。一个2U存储片的典型硬件配置的是-
◆2 x 4核CPUs
◆16GB – 32GB内存
◆具有256MB – 512MB NVRAM缓存的硬件RAID控制器
◆12+ 1TB SATA驱动器
每个存储片提供大约10TB的可用空间,配置为一个RAID-6分区,由硬件RAID控制器进行管理。RAID 6提供了足够的冗余性和出色的读取性能,可以降低存储成本。RAID控制器NVRAM回写高速缓存可以部分缓解低劣的写性能。由于读取大多是随机的,所以NVRAM缓存完全保留给写操作。磁盘高速缓存被禁用,以保证在系统崩溃或电源断电时数据的一致性。


























