本文是论文《Overview of Facebook Scalable Architecture》的阅读笔记,作者Hugo Barrigas, Daniel Barrigas, Melyssa Barata, Pedro Furtado, Jorge Bernardina。技术细节很少,只是一个粗略的大框架。其实根本也没有讲什么细节,所以以后有更多补充再往里写。感觉最大的亮点就是MySQL+Memcached。
这篇文章主要是介绍Facebook的网站架构,讲述在扩展方面遇到的困难和解决的方式,从而更好了解Facebook是如何运行的。
对于大型分布式系统来说,可拓展性是网络、系统和进程中非常重要的指标。它标志着是否有成长的能力,是否能处理增长的工作量。
规模只是拓展需要考虑的一个方面。可拓展性包含如下几个方面:
a. 是否能轻松增加存储能力
b. 能处理多少增加的traffic
c. 能多运行多少事务
Facebook网站架构
Facebook如何运作
随着用户增加,Facebook做了一些改动,但依旧使用LAMP(Linux-Apache-Memcached-PHP)模式: a. 依旧使用PHP,但写了一个将PHP转成C++的编译器来提高服务器的性能。 b. 依旧使用Linux但进行了一些优化。 c. 最具有争议的事情是使用MySQL,它依旧是最主要的数据库。 另外Facebook还有两个自己系统:
- Haystack:高拓展,用来存储大量的图片。
- Scribe:一个可拓展的登录系统。
Facebook前端
前端是把LAMP服务器运行在Memcache上。
Linux & Apache
Facebook使用Linux和Apache HTTP Server
PHP & BigPipe
BigPipe是Facebook开发的动态网页系统。主要就是把各个部分通过不同的步骤在浏览器和服务器中完成。 比如:

HipHop
将PHP编译成C++的编译器。一些关键点:
- 是PHP编译器
- 容易增加插件
- 极大减少了CPU和内存的使用量
Facebook后端
MySQL
Facebook在MySQL的使用上运用了sharding和caching的技术。 为了让MySQL可拓展,主要的解决方案就是sharding。也就是数据库被分为几个部分,而且90%的query都存在缓存里,并不需要去数据库里取。Facebook非常依赖Memcached,并且值得一提的是Facebook在多个数据中心中有好几千个MySQL的服务器。另外,Facebook一些复杂的Join操作都是在服务器层面跑的,而不是直接在表上跑。(怎么做到的...不清楚技术细节)
Scribe
Scribe是Facebook的登录系统。Scribe主要做的就是从多个服务器端读取整合数据,然后把信息传送给Hadoop:
Thrift
Thrift协议提供不同语言之间的序列化,从而使Facebook支持不同语言共同开发应用。
Memcached
Memcache是键值对内存存储缓存系统。
Hadoop & Hive
Haystack
Haystack是在主内存中加入了可拓展的缓存:
主体架构
REFERENCES:
[1] Building Scalable Web Architecture and Distributed Systems http://www.drdobbs.com/web-development/building-scalable-web-architecture-and-d/240142422, (Accessed 26 January , 2014)
[2] How Does Facebook Work? The Nuts and Bolts [Technology Explained] http://www.makeuseof.com/tag/facebook-work-nuts-bolts-technology-explained/ (Accessed 25 February 2014)
[3] Lloys G. W. Lloyd and Connie U. S. 2008. Scalable Query Result Caching for Web Applications. PVLDB vol. 1 no. 1 pp. 550-561, 2008
[4] Parris I., Abdesslem F. B., and Henderson T. 2012. Facebook or Fakebook? The effect of simulation on location privacy user studies. Ad Hoc Networks vol. 12 pp. 35-49
[5] Performance and scalability techniques 101 http://www.webforefront.com/performance/scaling101.html , (Accessed 30 January 2014)
[6] Scaling the Messages Application Back End https://www.facebook.com/note.php?note_id=10150148835363920 (Accessed 25 February 2014)
[7] The effects of teacher self-disclosure via Facebook on teacher credibility http://www.gtaan.gatech.edu/meetings/handouts/MazerFacebook.pdf (Accessed 25 February 2014)