Facebook的网站架构


我的原文:http://allenlsy.com/2011/04/25/facebook/

 

最近读了一片文章,觉得值得精读一下。原文在这里:

 

http://www.quora.com/What-is-Facebooks-architecture

 

前端

 

大家都知道Facebook的网页是由php写出来的。实际上Facebook上有一个神秘的Hiphop项目,它负责把php代码转成C++。这样能优化phpHiphop这个项目的负责人是北大1987届遗传与分子生物专业毕业生,普林斯顿CS博士赵海平。HiphopFacebook的服务器减少了50%CPU使用率。Facebook曾经尝试了很多办法优化网站,甚至重写了Zend引擎,并且提交给了PHP项目,但都没能达到目标,后来才选择了HiphopHiphop的原理是,在phpC++的过程中实现了三步操作:静态分析(分析依赖关系)->类型推演(选择合适的C++变量类型)->代码生成。此项目总共30万行代码,在google groups上有讨论。http://groups.google.com/group/hiphop-php-dev

 

FacebookHttp在传输时使用了BigPipe。有兴趣的同学可以去查查这方面的资料。简单的说它是一个Web服务器和浏览器之间建立的一种不同传统http模式的传输方式。网上普遍用的加速方法有延迟javascript的加载或者并行下载等方式。BigPipe当然也有并行的思想。它最重要的地方是调整了一些请求的发送顺序,实现了网页加载的加速。当Web服务器挣在生成页面时,此时的浏览器正处于闲置状态。如何让Web服务器产生时间和浏览器的Rendering时间重合呢?BigPipe采用的是分解页面的办法。不多说了。

 

Facebook使用了Varnish Cache实现的反向代理服务器技术。普通的代理服务器技术是,客户手动配置Proxy,把请求发给Proxy,由Proxy转发给Web服务器。Web服务器并没有配置和使用这个Proxy。反向代理服务器的最大不同是,Web服务器配置了这个Proxy,而用户没有配置它。比如当Facebook用户把请求发给一个IP地址时,以为发给了Facebook的服务器,其实可能只是发给了FacebookProxy。这个Proxy负责把请求发给Facebook的内部服务器组。这样黑客如果黑这个IP,其实对Facebook影响不大,因为数据并不在Proxy上面。Varnish Cache的开发者是丹麦人Kamp,他也是FreeBSD的内核开发者之一。

 

Operating Systems Design and Implementation 2010上有一篇论文,讲了Facebook所使用的Haystack图片存储系统。Facebook目前有260Billion张图片,总共20PB,平均每张800KB,并且数据量还在以每周60TB的速度增长。Haystack的使用动机解释起来有点复杂。主要原理是让多个逻辑文件共享一个物理文件。就好像是非常多的图片文件和并称了一个大文件,这个文件格式是Facebook自行设计的,再在里面搞些Indexing。搜索图片时,实际上用的又是它自行设计的查找算法,这样完全绕过了操作系统的文件查找算法。在Google论文中搜索Finding a needle in Haystack: Facebook's photo storage可以查到更多资料。

 

 

业务逻辑层

 

这一层是Facebook自己的核心项目Thrift,后来开源了。它的主要目的是实现各种不同编程语言间的相互通信,包括C++JavapythonrubyC#erlangcocoaphp等等。这些语言之间通过XML或者JSON来传递数据。Apache已经将Thrift列入孵化器项目中了。请见 http://incubator.apache.org/thrift。据说是Facebook觉得tomcat服务器太重量级了,所以他们用Java些的Services都没有架在公开的服务器框架上,而是只供Thrift使用。

 

 

数据访问层

 

这是所谓的持久化操作,由MySQLMemcachedFacebook自己的CassandraHadoopHBase一同完成。

 

Memcached是一套高效的分布式内存缓存框架,它能减少对象读取数据库的次数。作者Anatoly Vorobey是以色列理工大学毕业的,年纪也不小了。另一名作者是华盛顿大学毕业的Brad Fitzpatrick。他的成名作其实是LiveJournal

 

Cassandra是一个非关系型数据库,也是Facebook自己开发的,现在开源了。它是一个分布式的数据库系统,而不是一个单纯的数据库。对于一个分布式数据库进行一次读写,这条命令会被路由到所有的数据库节点上去。Cassandra具有很好的扩展性和稳定性,这对Facebook来说是极其重要的。

 

HBaseApache Hadoop项目的一个子项目。Hadoop项目本身是提供分布式计算的。这里说的是计算,主要功能不是上面的数据库存储。HBase是基于Hadoop之上做的一个分布式数据库,其名字表明它就是Hadoop Database的意思,主要实现分布式储存。理论基础来自于Chang et al所写的Goole论文Bigtable。现在普遍认为HBaseBigtable的开源实现(因为Google自己还实现了一套Bigtable)。

 

Facebook的工程师说他们正在减少Cassadra的使用,因为他们更喜欢HBase,因为那个更简单好用。

 

 

硬件

 

最近炒得很火热的Facebook在俄勒冈州的新数据中心,有超过60000台服务器。当然和Google一样,这些服务器都是自己设计的。这个数据中心将支持Facebook提出的Open Compute项目。很多人对这个项目进行很多有趣的评论。因为对于GoogleAmazon来说,他们的数据中心技术是严格保密的。Facebook竟然公开了类似的顶尖技术,就好像跟Google示威说,以后人人都能学会如何搭建这样的Web数据中心。

 

稍微娱乐一下。

 

一是今天看到了一张图,是由Facebook的一个实习生Paul Butler制作的。他把Facebook5亿用户的用户关系还出来了。是哪里一片漆黑了呢?

点击查看原图,3.8M高清

二是,据说在Google Images上搜索cstring会有意想不到的结果。我感到很抱歉,为什么会这样?

 

一些参考资料:

http://www.facebook.com/notes.php?id=9445547199

 

http://www.infoq.com/presentations/Facebook-Software-Stack

 

 

 

 

你可能感兴趣的:(数据库,服务器,Google,Facebook,cassandra,web服务)