87 lines
11 KiB
HTML
87 lines
11 KiB
HTML
|
||
<div id="sina_keyword_ad_area2" class="articalContent ">
|
||
<p>
|
||
Facebook的数据规模使得很多传统的解决方案根本不适用,或者无法分解来处理。保持一个拥有5亿用户的系统一直稳定可靠的运行,并不是一件很容易的事情。这篇文章介绍了一下Facebook使用的软件。</P>
|
||
<p><strong>Facebook的扩展性挑战</STRONG></P>
|
||
<p>在我们讨论细节之前,这里有一些Facebook已经做的软件规模:</P>
|
||
<p>> Facebook有570000000000每月页面浏览量 (据Google Ad
|
||
Planner)。</P>
|
||
<p>> Facebook的照片量比其他所有图片网站加起来还多(包括Flickr等网站)。</P>
|
||
<p>> 每个月超过30亿张照片被上传。</P>
|
||
<p>> Facebook的系统服务每秒处理120万张照片 。 这不包括CDN服务中处理的照片。</P>
|
||
<p>> 每月超过25亿条的内容 (状态更新,评论等)被共享。</P>
|
||
<p>> Facebook有超过30,000服务器 (这个数字是去年的!)</P>
|
||
<p><strong>Facebook扩展所依赖的软件</STRONG></P>
|
||
<p>
|
||
Facebook是在某些程度上说仍然是LAMP的站点,但它比普通的LAMP大得多,以纳入其他元素和很多服务,并修改现行的做法。</P>
|
||
<p>例如:</P>
|
||
<p>>
|
||
Facebook也使用PHP,但它已经为它建立一个编译器,以便它可以分为本地代码打开了Web服务器,从而提高性能。</P>
|
||
<p>> Facebook也使用Linux,但它特别为网络吞吐量做了优化。</P>
|
||
<p>>
|
||
Facebook也使用MySQL,但主要是作为一个Key-value的持久性存储,Jions和服务器逻辑操作在Web服务器上操作。因为在那里更容易执行。</P>
|
||
<p>>
|
||
还有是自编写的系统,如Haystack,一个高度可扩展的对象存储,用来存储Facebook的照片。还有Scribe,一个日志系统,可以运行在Facebook的巨大规模上的日志系统。</P>
|
||
<p>OK。现在 我们介绍一下全球最大的社会网络网站的所使用的软件吧。</P>
|
||
<p><strong>Memcached</STRONG></P>
|
||
<p><a HREF="http://translate.googleusercontent.com/translate_c?hl=en&ie=UTF-8&sl=en&tl=zh-CN&u=http://memcached.org/&prev=_t&rurl=translate.google.com&twu=1&usg=ALkJrhjoR4aiCM3vk8ZlmOZ-vLMVbFMYQA" TARGET="_blank">memcached</A>的是现在互联网最有名的软件之一了。这是一个分布式内存缓存系统,用来作为Web服务器和MySQL服务器之间的缓存层(因为数据库访问比较慢)。多年以来,Facebook已经提出了一些优化Memcached和一些周边软件的办法。如压缩network
|
||
stack。</P>
|
||
<p>
|
||
Facebook的每时每刻都有数10TB的数据缓存在Memcached的数千台服务器上。它可能是世界上最大的Memcached的集群了。</P>
|
||
<p><strong>HipHop for PHP</STRONG></P>
|
||
<p>PHP作为一种脚本语言,和本地程序相比是运行缓慢的。 <a HREF="http://wiki.github.com/facebook/hiphop-php/" TARGET="_blank">HipHop</A>可以将PHP转换成C++代码,然后再进行编译,可以获得更好的性能。因为Facebook严重依赖PHP,这使得其可以让Web服务器运行的更有效率。</P>
|
||
<p>一个工程师小团队在Facebook(一开始只有三人)花了18个月时间开发HipHop,现在已经是可用状态。</P>
|
||
<p><strong>Haystack</STRONG></P>
|
||
<p><a HREF="http://www.facebook.com/note.php?note_id=76191543919" TARGET="_blank">Haystack</A>是Facebook的高性能照片存储/检索系统(严格来说,是一个对象存储,因此它并不一定要存储照片)。它有许多工作要做;有超过20亿张上传的照片,并且每一个被保存在四个不同的分辨率,因此有超过800亿张照片。</P>
|
||
<p>它不仅是对能够处理的上亿的照片,运行表现也是至关重要的。
|
||
正如我们前面提到的,Facebook的服务约120万张照片每秒,这个数字不包括CDN上的。 这是一个惊人的数字。</P>
|
||
<p><strong>BigPipe</STRONG></P>
|
||
<p><a HREF="http://translate.googleusercontent.com/translate_c?hl=en&ie=UTF-8&sl=en&tl=zh-CN&u=http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919&prev=_t&rurl=translate.google.com&twu=1&usg=ALkJrhiLlmGC047zZTlQiS-Dv_dA3i55qA" TARGET="_blank">BigPipe</A>是Facebook开发的一个动态的网页服务系统。
|
||
Facebook使用它来按section(称为“pagelets”)处理每个网页,以获取最佳性能。</P>
|
||
<p>
|
||
例如,在聊天窗口是分开的,新闻Feed也是分开的,等等。这些pagelets可以在一个页面表现的时候同时使用,这是该页面表现的时候获取进来的。即使某些工程的一部分关闭或中端,用户也可以获得一部分网页。</P>
|
||
<p><strong>Cassandra</STRONG></P>
|
||
<p><a HREF="http://cassandra.apache.org/" TARGET="_blank">Cassandra</A>是一个不会单点失败的分布式存储系统。这是为NoSQL运动的一个重要组成部分,并已公开的源代码(它甚至成为一个Apache项目)。Facebook在搜索功能中使用它。</P>
|
||
<p>除了Facebook,还有一些人也用它,例如Digg的。 不过<a HREF="http://news.csdn.net/a/20100712/219081.html" TARGET="_blank">最近Twitter放弃了cassandra</A>。</P>
|
||
<p><strong>Scribe</STRONG></P>
|
||
<p><a HREF="http://github.com/facebook/scribe" TARGET="_blank">Scribe</A>是一个灵活的日志系统,Facebook在他的内部大量使用。它的能够处理在Facebook的大规模日志记录,并自动处理新的日志记录类别,Facebook有数百个日志类别(categories)。</P>
|
||
<p><strong>Hadoop and Hive</STRONG></P>
|
||
<p><a HREF="http://translate.googleusercontent.com/translate_c?hl=en&ie=UTF-8&sl=en&tl=zh-CN&u=http://hadoop.apache.org/&prev=_t&rurl=translate.google.com&twu=1&usg=ALkJrhg42LgK3luQAhxUO4LxcRZHCBSIoQ" TARGET="_blank">Hadoop</A>的是一个开源的map-reduce实现,使得它可以在进行大数据上进行运算。
|
||
Facebook的使用这个进行数据分析(而我们都知道,Facebook已经大量的数据)。 <a HREF="http://hadoop.apache.org/hive/" TARGET="_blank">Hive</A>就是发源于Facebook,使得对于Hadoop使用的SQL查询成为可能,从而是其更容易对非程序员使用。</P>
|
||
<p>Hadoop和Hive是开源的(Apache项目),有为数众多的追随者,例如雅虎和Twitter。</P>
|
||
<p><strong>Thrift</STRONG></P>
|
||
<p>Facebook使用的几种不同的语言和不同的services。 PHP是最终用于前端,Erlang是用于聊天,Java和C
|
||
++也使用于多种场所,也许还有其他语言。<a HREF="http://incubator.apache.org/thrift/" TARGET="_blank">Thrift</A>是一个内部开发的跨语言的框架,联系语言,使他们可以在一起合作,从而使他们之间可以交互。这使得Facebook可以更容易为继续保持其跨语言的发展。</P>
|
||
<p>Facebook已经让Thrift开源。更多的语言支持已被添加到Thrift。</P>
|
||
<p><strong>Varnish</STRONG></P>
|
||
<p><a HREF="http://varnish-cache.org/" TARGET="_blank">Varnish</A>是一个HTTP加速器,可以作为一个负载平衡器,并缓存的内容,然后可以以闪电般的速度送达。</P>
|
||
<p>
|
||
Facebook使用的arnish来处理照片和个人资料图片,处理每天数十亿的要求。和其他的东西一样,Varnish是开源的。</P>
|
||
<p><strong>保持Facebook 顺畅运行的其他东西。</STRONG></P>
|
||
<p>
|
||
我们已经提到的软件,组成了Facebook的系统,并帮助运行在大规模上。但是,处理这么大的系统是一个复杂的任务,因此我们将列出一些其他的东西,他们保持了Facebook的平稳运行。</P>
|
||
<p><strong>渐进发布和暗启动</STRONG></P>
|
||
<p>
|
||
Facebook有一个他们所谓的守门人制度(Gatekeeper),允许他们可以给不同的用户运行两套不同的系统。这让Facebook渐进的发布新的功能,A
|
||
/ B测试,只为Facebook雇员发布等的某些特性。<br />
|
||
Gatekeeper也可以让Facebook实现“暗启动”,这是在用户使用一些功能之前,就激活某些功能(因为用户没有察觉,所以称之为暗启动)。这将作为一个现实世界的压力测试,在正式启动前,帮助揭露一些功能障碍和其他问题。
|
||
暗启动通常是在正式启动前两个星期。</P>
|
||
<p><strong>Profiling的直播系统</STRONG></P>
|
||
<p>
|
||
Facebook的仔细监控其系统,有趣的是它也负责监察每一个PHP函数在生产环境的性能。检测各个PHP的环境的配置运行情况。使用开源工具,<a HREF="http://pecl.php.net/package/xhprof" TARGET="_blank">XHProf</A> 。</P>
|
||
<p><strong>渐进的利用关闭功能来提升性能</STRONG></P>
|
||
<p>
|
||
如果Facebook运行时出现性能问题,有一个办法,就是逐步禁用不太重要的功能,以增强Facebook的大量核心功能表现。</P>
|
||
<p><strong>我们没有提及的事情</STRONG></P>
|
||
<p>
|
||
我们没有提到硬件相关的事情,但这也是提高可伸缩性的重要一环。例如,就像其他大型站点,Facebook利用CDN来处理静态内容。Facebook还有一个<a HREF="http://www.facebook.com/prinevilledatacenter" TARGET="_blank">the huge data center</A>,可以帮助他扩展更多的服务。</P>
|
||
<p><strong>Facebook的开源情节</STRONG></P>
|
||
<p>
|
||
不仅是Facebook使用(和帮助),如Linux,Memcached的,MySQL和Hadoop的开源软件,以及许多其他情况下,也贡献许多了其内部开发的软件。</P>
|
||
<p>Facebook亦开源了Tornado,一个高性能的网络服务器框架,由FriendFeed团队开发。</P>
|
||
<p>关于开放源码软件清单,可以在<a HREF="http://facebook.com/opensource" TARGET="_blank">Facebook’s Open Source page</A>找到。</P>
|
||
<p>本文来自:<a HREF="http://www.yankay.com/" TARGET="_blank">颜开的博客——我自然</A></P>
|
||
<p>原文标题:Facebook背后的软件</P>
|
||
<p>译文链接:<a HREF="http://www.yankay.com/">http://www.yankay.com/</A></P>
|
||
<p>原文链接:<span STYLE="WiDoWs: 2; TexT-TrAnsForM: none; TexT-inDenT: 0px; BorDer-CoLLApse: separate; FonT: medium simsun; WHiTe-spACe: normal; orpHAns: 2; LeTTer-spACinG: normal; CoLor: #000000; WorD-spACinG: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span STYLE="TexT-ALiGn: left; Line-HeiGHT: 21px; FonT-FAMiLY: Georgia, 'Times new roman', 宋体, Times, serif; CoLor: #494949; FonT-siZe: 14px"><strong STYLE="pADDinG-BoTToM: 0px; MArGin: 0px; pADDinG-LeFT: 0px; pADDinG-riGHT: 0px; pADDinG-Top: 0px"><em STYLE="pADDinG-BoTToM: 0px; MArGin: 0px; pADDinG-LeFT: 0px; pADDinG-riGHT: 0px; pADDinG-Top: 0px"><span STYLE="pADDinG-BoTToM: 0px; FonT-sTYLe: normal; MArGin: 0px; pADDinG-LeFT: 0px; pADDinG-riGHT: 0px; FonT-WeiGHT: normal; pADDinG-Top: 0px"><a STYLE="pADDinG-BoTToM: 2px; MArGin: 0px; pADDinG-LeFT: 2px; pADDinG-riGHT: 2px; CoLor: #506874; TexT-DeCorATion: none; pADDinG-Top: 2px" HREF="http://royal.pingdom.com/2010/06/18/the-software-behind-facebook/"><font FACE="Georgia">http://royal.pingdom.com/2010/06/18/the-software-behind-facebook/</FONT></A></SPAN></EM></STRONG></SPAN></SPAN></P>
|
||
</div>
|