Facebook背后的软件

Facebook的数额规模让广大民俗的化解方案从无适用,或者无法解释来拍卖。保持一个颇具5亿用户之系直接平稳可靠的运作,并无是同一桩好容易的事体。这篇稿子介绍了转Facebook使用的软件。

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的壮烈规模达的日志系统。

OK。现在 我们介绍一下海内外最特别的社会网络网站的所用的软件吧。

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上之。
这是一个触目惊心的数字。

BigPipe

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

诸如,在聊窗口是分别的,新闻Feed也是分离的,等等。这些pagelets可以当一个页面表现的当儿又使用,这是该页面表现的时获得进来的。即使一些工程的一样局部关闭或者中端,用户也可收获部分网页。

Cassandra

Cassandra是一个非会见单点失败的分布式存储系统。这是吗NoSQL运动的一个要害部分,并一度当面之源代码(它还成一个Apache项目)。Facebook在寻觅效果受到使用它。

除去Facebook,还有部分人数啊为此它们,例如Digg的。
不了最近Twitter放弃了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背后的软件

译文链接:http://www.yankay.com/

初稿链接:http://royal.pingdom.com/2010/06/18/the-software-behind-facebook/

网站地图xml地图