cnblogs/dcrenl/Facebook背后的软件.html
2024-09-24 12:43:01 +08:00

87 lines
11 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div id="sina_keyword_ad_area2" class="articalContent ">
<p>
Facebook的数据规模使得很多传统的解决方案根本不适用或者无法分解来处理。保持一个拥有5亿用户的系统一直稳定可靠的运行并不是一件很容易的事情。这篇文章介绍了一下Facebook使用的软件。</P>
<p><strong>Facebook的扩展性挑战</STRONG></P>
<p>在我们讨论细节之前这里有一些Facebook已经做的软件规模</P>
<p>&gt; Facebook有570000000000每月页面浏览量 据Google Ad
Planner</P>
<p>&gt; Facebook的照片量比其他所有图片网站加起来还多包括Flickr等网站</P>
<p>&gt; 每个月超过30亿张照片被上传。</P>
<p>&gt; Facebook的系统服务每秒处理120万张照片 。 这不包括CDN服务中处理的照片。</P>
<p>&gt; 每月超过25亿条的内容 (状态更新,评论等)被共享。</P>
<p>&gt; Facebook有超过30,000服务器 (这个数字是去年的!)</P>
<p><strong>Facebook扩展所依赖的软件</STRONG></P>
<p>
Facebook是在某些程度上说仍然是LAMP的站点但它比普通的LAMP大得多以纳入其他元素和很多服务并修改现行的做法。</P>
<p>例如:</P>
<p>&gt;
Facebook也使用PHP但它已经为它建立一个编译器以便它可以分为本地代码打开了Web服务器从而提高性能。</P>
<p>&gt; Facebook也使用Linux但它特别为网络吞吐量做了优化。</P>
<p>&gt;
Facebook也使用MySQL但主要是作为一个Key-value的持久性存储Jions和服务器逻辑操作在Web服务器上操作。因为在那里更容易执行。</P>
<p>&gt;
还有是自编写的系统如Haystack一个高度可扩展的对象存储用来存储Facebook的照片。还有Scribe一个日志系统可以运行在Facebook的巨大规模上的日志系统。</P>
<p>OK。现在 我们介绍一下全球最大的社会网络网站的所使用的软件吧。</P>
<p><strong>Memcached</STRONG></P>
<p><a HREF="http://translate.googleusercontent.com/translate_c?hl=en&amp;ie=UTF-8&amp;sl=en&amp;tl=zh-CN&amp;u=http://memcached.org/&amp;prev=_t&amp;rurl=translate.google.com&amp;twu=1&amp;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&amp;ie=UTF-8&amp;sl=en&amp;tl=zh-CN&amp;u=http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919&amp;prev=_t&amp;rurl=translate.google.com&amp;twu=1&amp;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&amp;ie=UTF-8&amp;sl=en&amp;tl=zh-CN&amp;u=http://hadoop.apache.org/&amp;prev=_t&amp;rurl=translate.google.com&amp;twu=1&amp;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使用和帮助如LinuxMemcached的MySQL和Hadoop的开源软件以及许多其他情况下也贡献许多了其内部开发的软件。</P>
<p>Facebook亦开源了Tornado一个高性能的网络服务器框架由FriendFeed团队开发。</P>
<p>关于开放源码软件清单,可以在<a HREF="http://facebook.com/opensource" TARGET="_blank">Facebooks 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>