• Facebook 海量数据处理


    对着眼前黑色支撑的天空 /  我突然只有沉默了
    我驾着最后一班船离开 / 才发现所有的灯塔都消失了
    这是如此触目惊心的 / 因为失去了方向我已停止了
    就象一个半山腰的攀登者 / 凭着那一点勇气和激情来到这儿
    如此上下都不着地地喘息着 / 闭上眼睛疼痛的感觉溶化了
    --达达乐队《黄金时代》

    好几个地方看到这个 Facebook - Needle in a Haystack: Efficient Storage of Billions of Photos,是 Facebook 的 Jason Sobel 做的一个 PPT,揭示了不少比较有参考价值的信息。【也别错过我过去的这篇Facebook 的PHP性能与扩展性

    图片规模

    作为世界上最大的 SNS 站点之一,Facebook 图片有多少? 65 亿张原始图片,每张图片存为 4-5 个不同尺寸,这样总计图片文件有 300 亿左右,总容量 540T,天! 峰值的时候每秒钟请求 47.5 万个图片 (当然多数通过 CDN) ,每周上传 1 亿张图片。

    图片存储

    前一段时间说 Facebook 服务器超过 10000 台,现在打开不止了吧,Facebook 融到的大把银子都用来买硬件了。图片是存储在 Netapp NAS上的,采用 NFS 方式。

    图片写入

    Facebook_write.png

    尽管这么大的量,似乎图片写入并不是问题。如上图,是直接通过 NFS 写的。

    图片读取

    Facebook.png

    CDN 和 Cachr 承担了大部分访问压力。尽管 Netapp 设备不便宜,但基本上不承担多大的访问压力,否则吃不消。CDN 针对 Profile 图象的命中率有 99.8%,普通图片也有 92% 的命中率。命中丢失的部分采由 Netapp 承担。

    图中的 Cachr 这个组件,应该是用来消息通知(基于调整过的 evhttp的嘛),Memcached 作为后端存储。Web 图片服务器是 Lighttpd,用于 FHC (文件处理 Cache),后端也是 Memcached。Facebook 的 Memcached 服务器数量差不多世界上最大了,人家连 MYSQL 服务器还有两千台呢。

    Haystacks --大海捞针

    这么大的数据量如何进行索引? 如何快速定位文件? 这是通过 Haystacks 来做到的。Haystacks 是用户层抽象机制,简单的说就是把图片元数据的进行有效的存储管理。传统的方式可能是通过 DB 来做,Facebook 是通过文件系统来完成的。通过 GET / POST 进行读/写操作,应该说,这倒也是个比较有趣的思路,如果感兴趣的话,看一下 GET / POST 请求的方法或许能给我们点启发。

    Facebook2.png

    总体来看,Facebook 的图片处理还是采用成本偏高的方法来做的。技术含量貌似并不大。不清楚是否对图片作 Tweak,比如不影响图片质量的情况下减小图片尺寸。

    --EOF--

  • 相关阅读:
    ASP.NET MVC 中的视图生成
    atm
    Oracle 客户端 NLS_LANG 的设置(转)
    log4jdbc
    java基本类型作为成员变量时的初始值
    使用activeMQ实现jms
    JAVA反射机制
    [notes] ImageNet Classification with Deep Convolutional Neual Network
    cocos2d-x3.0 ListView
    Mean Shift具体介绍
  • 原文地址:https://www.cnblogs.com/luluping/p/1389722.html
Copyright © 2020-2023  润新知