在今年举行的Facebook F8开发者大会上,51CTO带您了解了其最新的开放图战略和语义搜索。今天咱们一块儿来了解Facebook背后的软件,看看做为当今世界上访问量最大的网站之一,Facebook是如何保证5亿用户的系统一直稳定可靠的运行。前端
Facebook的扩展性挑战程序员
在咱们讨论细节以前,这里有一些Facebook已经作的软件规模:数据库
◆Facebook有570000000000每个月页面浏览量 (据Google Ad Planner)缓存
◆Facebook的照片量比其余全部图片网站加起来还多(包括Flickr等网站)服务器
◆每月超过30亿张照片被上传网络
◆Facebook的系统服务每秒处理120万张照片,这不包括CDN服务中处理的照片架构
◆每个月超过25亿条的内容 (状态更新,评论等)被共享框架
◆Facebook有超过30,000服务器(这个数字是去年的)分布式
Facebook扩展所依赖的软件memcached
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的集群了。
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背后的软件 。)