文档章节

转:Facebook后台技术探秘

老淘
 老淘
发布于 2010/12/10 12:28
字数 2150
阅读 1.7K
收藏 19

 

    每月570000000000页面浏览量,每个月超过30亿的图片上传,5亿的用户数量,Facebook的后台是用哪些技术保障网站的流畅运行呢?

     

    在今年举行的Facebook F8开发者大会上,51CTO带您了解了其最新的开放图战略和语义搜索。今天我们一起来了解Facebook背后的软件,看看作为当今世界上访问量最大的网站之一,Facebook是如何保证5亿用户的系统一直稳定可靠的运行。

    Facebook的扩展性挑战

    在我们讨论细节之前,这里有一些Facebook已经做的软件规模:

    ◆Facebook有570000000000每月页面浏览量 (据Google Ad Planner)

    ◆Facebook的照片量比其他所有图片网站加起来还多(包括Flickr等网站)

    ◆每个月超过30亿张照片被上传

    ◆Facebook的系统服务每秒处理120万张照片,这不包括CDN服务中处理的照片

    ◆每月超过25亿条的内容 (状态更新,评论等)被共享

    ◆Facebook有超过30,000服务器(这个数字是去年的)

    Facebook扩展所依赖的软件

    Facebook是在某些程度上说仍然是LAMP的站点,但它比普通的LAMP大得多,以纳入其他元素和很多服务,并修改现行的做法。

    例如:

    ◆Facebook仍使用PHP,但它已经为它建立一个编译器,以便它可以分为本地代码打开了Web服务器,从而提高性能。

    ◆Facebook使用Linux,但他特别为网络吞吐量做了优化。

    ◆Facebook使用MySQL,但主要是作为一个Key-value的持久性存储,Jions和服务器逻辑操作在Web服务器上操作。因为在那里更容易执行。

    还有是自编写的系统,如Haystack,一个高度可扩展的对象存储,用来存储Facebook的照片。还有Scribe,一个日志系统,可以运行在Facebook的巨大规模上的日志系统。

    现在我们介绍一下全球最大的社会网络网站的所使用的软件吧。

    Memcached

    memcached的是现在互联网最有名的软件之一了。 这是一个分布式内存缓存系统,用来作为Web服务器和MySQL服务器之间的缓存层(因为数据库访问比较慢)。 多年以来,Facebook已经提出了一些优化Memcached和一些周边软件的办法。如压缩network stack。

    Facebook的每时每刻都有数10TB的数据缓存在Memcached的数千台服务器上。 它可能是世界上最大的Memcached的集群了。

    HipHop for PHP

    PHP作为一种脚本语言,和本地程序相比是运行缓慢的。 HipHop可以将PHP转换成C + +代码,然后再进行编译,可以获得更好的性能。 因为Facebook严重依赖PHP,这使得其可以让Web服务器运行的更有效率。

    一个工程师小团队在Facebook(一开始只有三人)花了18个月时间开发HipHop,现在已经是可用状态。

    Haystack

    Haystack是Facebook的高性能照片存储/检索系统(严格来说,是一个对象存储,因此它并不一定要存储照片)。 它有许多工作要做;有超过20亿张上传的照片,并且每一个被保存在四个不同的分辨率,因此有超过800亿张照片。

    它不仅是对能够处理的上亿的照片,运行表现也是至关重要的。 正如我们前面提到的,Facebook的服务约120万张照片每秒 ,这个数字不包括CDN上的。 这是一个惊人的数字。关于Facebook的图片存储请参考51CTO之前的报道《Facebook图片存储架构技术全解析》。

    BigPipe

    BigPipe是Facebook开发的一个动态的网页服务系统。 Facebook使用它来按section(称为“pagelets”)处理每个网页,以获取最佳性能。

    例如,在聊天窗口是分开的,新闻Feed也是分开的,等等。 这些pagelets可以在一个页面表现的时候同时使用,这是该页面表现的时候获取进来的。即使某些工程的一部分关闭或中端,用户也可以获得一部分网页。

    Cassandra

    Cassandra是一个不会单点失败的分布式存储系统。 这是为NoSQL运动的一个重要组成部分,并已公开的源代码(它甚至成为一个Apache项目)。Facebook在搜索功能中使用它。

    除了Facebook,还有一些人也用它,例如Digg的。 不过最近Twitter放弃了Cassandra。关于Cassandra的更多介绍可以参考51CTO的专题《奔向自由?Cassandra数据库应用指南》。

    Scribe

    Scribe是一个灵活的日志系统,Facebook在他的内部大量使用。 它的能够处理在Facebook的大规模日志记录,并自动处理新的日志记录类别,Facebook有数百个日志类别(categories)。

     

    Hadoop and Hive

    Hadoop的是一个开源的map-reduce实现,使得它可以在进行大数据上进行运算。 Facebook的使用这个进行数据分析(而我们都知道,Facebook已经大量的数据)。 Hive就是发源于Facebook,使得对于Hadoop使用的SQL查询成为可能,从而是其更容易对非程序员使用。

    Hadoop和Hive是开源的(Apache项目),有为数众多的追随者,例如雅虎和Twitter。

    Thrift

    Facebook使用的几种不同的语言和不同的services。 PHP是最终用于前端,Erlang是用于聊天,Java和C ++也使用于多种场所,也许还有其他语言。Thrift是一个内部开发的跨语言的框架,联系语言,使他们可以在一起合作,从而使他们之间可以交互。 这使得Facebook可以更容易为继续保持其跨语言的发展。

    Facebook已经让Thrift开源。更多的语言支持已被添加到Thrift。

    Varnish

    Varnish是一个HTTP加速器,可以作为一个负载平衡器,并缓存的内容,然后可以以闪电般的速度送达。

    Facebook使用的arnish来处理照片和个人资料图片,处理每天数十亿的要求。 和其他的东西一样,Varnish是开源的。

    保持Facebook 顺畅运行的其他东西

    我们已经提到的软件,组成了Facebook的系统,并帮助运行在大规模上。 但是,处理这么大的系统是一个复杂的任务,因此我们将列出一些其他的东西,他们保持了Facebook的平稳运行。

    渐进发布和暗启动

    Facebook有一个他们所谓的守门人制度(Gatekeeper),允许他们可以给不同的用户运行两套不同的系统。 这让Facebook渐进的发布新的功能,A / B测试,只为Facebook雇员发布等的某些特性。

    Gatekeeper也可以让Facebook实现“暗启动”,这是在用户使用一些功能之前,就激活某些功能(因为用户没有察觉,所以称之为暗启动)。 这将作为一个现实世界的压力测试,在正式启动前,帮助揭露一些功能障碍和其他问题。 暗启动通常是在正式启动前两个星期。

    Profiling的直播系统

    Facebook的仔细监控其系统,有趣的是它也负责监察每一个PHP函数在生产环境的性能。 检测各个PHP的环境的配置运行情况。使用开源工具,XHProf 。

    渐进的利用关闭功能来提升性能

    如果Facebook运行时出现性能问题,有一个办法,就是逐步禁用不太重要的功能,以增强Facebook的大量核心功能表现。

    我们没有提及的事情

    我们没有提到硬件相关的事情,但这也是提高可伸缩性的重要一环。例如,就像其他大型站点,Facebook利用CDN来处理静态内容。Facebook还有一个the huge data center,可以帮助他扩展更多的服务。

    Facebook的开源情节

    不仅是Facebook使用(和帮助),如Linux,Memcached的,MySQL和Hadoop的开源软件,以及许多其他情况下,也贡献许多了其内部开发的软件。

    Facebook亦开源了Tornado,一个高性能的网络服务器框架,由FriendFeed团队开发。关于开放源码软件清单,可以在Facebook’s Open Source page.找到。

     ( 本文转载自 颜开的博客 ,原文: Facebook背后的软件 。)

© 著作权归作者所有

老淘
粉丝 6
博文 2
码字总数 3860
作品 0
广州
私信 提问
加载中

评论(1)

ai摄影er
ai摄影er
内容挺好,翻译的就
ZT:专访人人网黄晶:SNS网站后台架构探秘

人人网作为国内大型SNS站点的代表,其目前已经拥有真实注册用户超过7000万、PV达到了4亿、日登录2200万人次。面对如此庞大的访问量,人人网的后台架构是怎样的一番景象呢?关于此,51CTO独家...

老淘
2010/12/10
848
1
JavaScript学习总结-技巧、实用函数、简洁方法、编程细节

整理JavaScript方面的一些技巧,比较实用的函数,常见功能实现方法,仅作参考 变量转换 //edit http://www.lai18.com var myVar = "3.14159",str = ""+ myVar,// to stringint = ~~myVar, /......

开元中国2015
2015/06/11
101
0
转Elasticsearch顶尖高手系列课程

Elasticsearch,是目前行业中非常热门的一个技术。Elasticsearch是一种分布式的海量数据搜索与分析的技术,可以用于电商网站、门户网站、企业IT系统等各种场景下的搜索引擎,也可以用于对海量...

小花卷juan
2017/06/24
126
0
Mcrouter-基于Memcached协议的缓存层流量管理工具(Memcached集群的另一个选择)(转)

Mcrouter 是一个基于Memcached协议的路由器,它是 Facebook缓存架构的核心组件,在峰值的时候,它能够处理每秒50亿次的请求。近日,Facebook开放了Mcrouter的源代码,且遵从BSD协议,希望能够...

easonjim
2017/09/23
0
0
互联网技术栈 『Contents Catalog』

image.png 编程语言 Java书单——由入门到上天 UML-类间关系 Java解读-ThreadLocal详解与应用 并发编程-Concurrent用户指南 Java并发编程-原子性变量 Java 并发工具包-常用线程池 基于事件驱...

高广超
2017/11/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面试题 11:旋转数组的最小数字

题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋...

Oaki
28分钟前
50
0
Node.js基础:第二篇

第一章:Node.js模块化开发 1.1-JavaScript开发弊端 JavaScript在使用时存在两大问题 文件依赖 命名冲突。 1.2-模块化开发的好处 生活中的模块化 一台电脑由多个模块组成(显卡、内存、硬盘、...

IT原力比特
31分钟前
47
0
2019,那些属于飞桨的重要时刻

2019已经悄然落幕,在过去一年中,飞桨加速崛起,在产品性能上高效迭代,并屡次斩获多项大奖,其取得的成绩有目共睹,这也意味着飞桨正领衔中国深度学习框架迎来高光时刻。现在,让我们一起来...

飞桨PaddlePaddle
39分钟前
54
0
【剑指Offer】二叉树——二叉树镜像的变换

package cn.dzp.flyroc.offer;import java.util.Stack;public class MirrorDemo { /*题目描述:操作给定的二叉树,将其变换为源二叉树的镜像*/ /*二叉树的镜像定义:...

SeerRoc
44分钟前
46
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部