Star

论文笔记:Facebook可扩展架构概览

本文是论文《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还有两个自己系统:

  1. Haystack:高拓展,用来存储大量的图片。
  2. 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)