Facebook架构

我一直在寻找有关Facebook的架构文章/信息,他们面临的挑战和方法。 他们使用什么和他们为什么使用。 他们是如何扩展规模的?他们所做的devise决定是什么等等。主要的基础是学习。 了解处理如此巨大stream量的网站会给build筑师等提供很多指导,以便在devise新网站时记住某些内容。 我分享我发现的东西。

  1. Facebook科学与社会图表(video)
  2. 在Facebook上进行缩放
  3. Facebook聊天架构
  4. Facebook博客
  5. Facebook Cassandrabuild筑与devise
  6. Facebook工程笔记
  7. Quora – Facebook架构
  8. 面向600M用户的Facebook
  9. Hadoop及其在Facebook的使用
  10. Erlang在Facebook:聊天架构
  11. Facebook性能caching
  12. Facebook连接架构

我有2个更多的链接,但无法发布,由于在这个网站的限制。 另外,如果有人有更好的东西,请分享(不需要仅与Facebook相关)。

PS –我无法find分享这项研究的好地方,因此这个倡议。 希望这有助于某人。

那么Facebook已经经历了许多变化,而且最初并不是为了高效而devise的。 它被devise来做它的工作。 我完全不知道代码是什么样的,你可能不会find很多关于它的信息(出于明显的安全和版权的原因),但只是看看API。 看看它多久变化一次,有多less变化不再正常,或者根本不行。

我认为他们袖子里最大的王牌就是Hiphop。 http://developers.facebook.com/blog/post/358你可以自己使用HipHop:; http ://wiki.github.com/facebook/hiphop-php

但是,如果你问我这是一个非常有抱负,可能浪费时间的任务。 嘻哈只支持这么多,它不能简单地把所有东西都转换成C ++。 那么这告诉我们什么? 那么,它告诉我们Facebook没有充分利用PHP语言。 它不使用最新的5.3,我敢打赌,仍然有很多PHP 4兼容。 否则,他们不能使用HipHop。 HipHop是一个好的IDEA,需要发展和扩展,但在目前的状态下,对于那些正在构build新的PHP应用程序的人来说并不是那么有用。

还有通过Resin / Quercus之类的东西将PHP转换为JAVA。 再次,它不支持一切…

另外需要注意的是,如果你使用任何非标准的PHP模块,你将无法将代码转换为C ++或Java。 但是…让我们来看看PHP模块。 他们是用C ++编译的。 所以,如果你可以build立PHP模块来做事情(比如parsingXML等),那么你基本上(减去一些交互)以相同的速度工作。 当然,你不能只为每一个可能的需求和你的整个应用程序build立一个PHP模块,因为你将不得不重新编译,编写代码将会困难得多。

但是…有一些方便的PHP模块,可以帮助速度问题。 尽pipe在这一天结束的时候,我们有这样一个被称为“云”的可怕的东西,通过它,我们可以扩展我们的应用程序(包括PHP),所以不再那么重要。 硬件越来越便宜。 亚马逊刚刚降低了它的价格(再次)说到。

所以只要你编码你的PHP应用程序的想法,它将需要一天规模…然后,我认为你很好,我不知道我甚至不会看Facebook和他们做了什么,因为当他们这样做,这是一个完全不同的世界,现在试图撑起基础设施,并维护它……呃,你得到像HipHop这样的东西。

现在HipHop怎么帮你? 它不会。 它不能。 你刚刚开始,你可以使用PHP 5.3。 我强烈build议您查看一下PHP 5.3框架以及PHP 5.3与SPL库一起带来的所有新优势,同时也考虑一下您的数据库。 您最有可能从数据库提供内容,因此请检查MongoDB和其他types的无模式和面向文档的数据库。 对于最常见的网站/应用程序,它们要快得多,速度更快。

看看像Foursquare和Smugmug这样的新公司,以及其他一些利用新技术的公司,以及他们如何使用它们。 就像Facebook一样成功,我真的不会看他们“如何”build立一个高效的网站/应用程序。 我并不是说他们没有很有才华的人在那里工作,他们正在创造性地解决(他们)的问题……我也不是说Facebook并不是一个好主意,而且也不是成功,你不应该从中获得想法….我只是说,如果你可以查看他们的整个源代码,你可能不会从中受益。

Facebook正在使用LAMP结构 。 Facebook的后端服务使用各种不同的编程语言编写,包括C ++,Java,Python和Erlang,并按照需求使用。 使用LAMP Facebook使用一些技术,以支持大量的请求

  1. Memcache – 这是一个内存caching系统,通过在RAM中caching数据和对象来加速dynamic数据库驱动的网站(如Facebook),以减less阅读时间。 Memcache是​​Facebook的主要cachingforms,有助于缓解数据库负载。 拥有一个caching系统可以使Facebook的速度与调用数据一样快。

  2. Thrift(协议) – 这是一个用于可扩展的跨语言服务开发的轻量级远程过程调用框架。 Thrift支持C ++,PHP,Python,Perl,Java,Ruby,Erlang等。

  3. Cassandra(数据库) – 这是一个数据库pipe理系统,旨在处理大量的数据分布在许多服务器上。

  4. HipHop for PHP – 它是PHP脚本代码的源代码转换器,并且是为了节省服务器资源而创build的。 HipHop将PHP源代码转换为优化的C ++。 这样做之后,它使用g ++将其编译为机器码。

如果我们进一步细化,那么回答这个问题的时间就会延长。 我们可以从以下post了解更多:

  1. Facebook如何工作?
  2. 数据pipe理,Facebook风格
  3. Facebook数据库devise?
  4. Facebook墙的数据库结构
  5. Facebook“喜欢”数据结构

“了解处理如此巨大stream量的网站会给build筑师等提供很多指导,以便在devise新网站时记住某些内容”

我想你可以从Facebook的devise中学到很多,就像你可以从任何成功的大型软件系统的devise中学到的一样。 但是,在我看来,在devise新系统时,不应该将当前的Facebookdevise考虑在内。

为什么你想能够处理Facebook必须处理的stream量? 不pipe你是一个程序员多么有才华,你都不会得到这样的机会。 Facebook本身并没有从一开始就devise出如此大规模的可伸缩性,这也许是最重要的一个教训。

如果你想了解一个非平凡的软件系统,我可以推荐一本关于SharpDevelop IDE开发的书“Inside a C#Application”。 它已经绝版了,但是它可以在网上免费下载。 本书为您提供了一个真正的应用程序的一瞥,并提供了对程序员有用的IDE的见解。