Facebook 架构

我一直在搜集有关 Facebook 架构的文章/信息,挑战以及他们应对挑战的方法。他们使用什么和为什么使用。他们如何扩大规模和他们所做的设计决定等等。学习是主要的基础。了解处理如此巨大流量的网站给建筑师等提供了许多建议,让他们在设计新网站时记住一些特定的东西。我在分享我的发现。

  1. Facebook Science & Social Graph (视频)
  2. Facebook 的规模
  3. Facebook 聊天架构
  4. Facebook 博客
  5. Facebook Cassandra 架构与设计
  6. Facebook 工程笔记
  7. Quora-Facebook Architecture Quora-Facebook 架构
  8. 拥有6亿用户的 Facebook
  9. Hadoop 及其在 Facebook 上的应用
  10. Erlang at Facebook: Chat Architecture
  11. Facebook 性能缓存进化
  12. Facebook Connect/Login Architecture Facebook 连接/登录体系结构

我有2个以上的链接,但无法在这个网站由于限制张贴。此外,如果有人有更好的东西,请分享(不需要只与 Facebook 有关)。

附注: 我找不到好的地方来分享这项研究,所以才有了这项倡议。希望这对某些人有所帮助。

105373 次浏览

Facebook 已经经历了许多变化,它最初的设计并不是为了提高效率。这是为了完成任务而设计的。我完全不知道这段代码是什么样子的,您可能找不到太多关于它的信息(出于显而易见的安全和版权方面的原因) ,但是只需看一下 API。看看它变化的频率,看看它有多少不能正常工作,再也不能正常工作,或者根本不能正常工作。

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

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

也有 PHP 到 JAVA 的事情,如树脂/栎树。再次声明,它不支持一切..。

另一件需要注意的事情是,如果您使用任何非标准的 PHP 模块,您也不能将该代码转换为 C + + 或 Java。然而... 让我们看看 PHP 模块。它们是用 C + + 编译的。因此,如果您可以构建执行任务的 PHP 模块(如解析 XML 等) ,那么基本上(减去一些交互)工作速度是相同的。当然,你不能仅仅为每一个可能的需求和你的整个应用程序制作一个 PHP 模块,因为你必须重新编译,而且编码会更加困难,等等。

然而... 有一些方便的 PHP 模块可以帮助解决速度问题。 尽管到最后,我们还是有了这个叫做“云”的东西,有了它,我们可以扩展我们的应用程序(包括 PHP) ,这样它就不再那么重要了。硬件越来越便宜。亚马逊刚刚(再次)降低了它的价格。

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

现在 HipHop 要怎么帮你?不会的。不可能。重新开始,可以使用 PHP 5.3。我强烈建议您研究 PHP 5.3框架以及 PHP 5.3与 SPL 库一起带来的所有新的好处,同时也考虑一下您的数据库。您很可能提供来自数据库的内容,因此请查看 MongoDB 和其他类型的无模式和面向文档的数据库。对于最“常见”的网站/应用程序来说,它们要快得多,也要好得多。

看看新公司,如 Foursquare 和 Smugug 和其他一些公司正在利用新技术,以及他们如何使用它。虽然 Facebook 很成功,但我真的不会去看他们是如何建立一个高效的网站/应用程序的。我不是说他们没有非常(非常)有才能的人在那里工作,创造性地解决(他们的)问题... ... 我也不是说 Facebook 总的来说不是一个好主意,它不成功,你不应该从中得到想法... ... 我只是说,如果你可以查看他们的整个源代码,你可能不会从中受益。

”了解那些处理 如此庞大的交通流量 建筑师等需要保存的指针 在设计的时候记住某些东西 新网站」

我认为你可以从 Facebook 的设计中学到很多东西,就像你可以从任何成功的大型软件系统的设计中学到很多东西一样。然而,在我看来,在设计新系统时,没有应该牢记 Facebook 当前的设计。

为什么你希望能够处理 Facebook 必须处理的流量?不管你是一个多么有才华的程序员,你也许永远不需要这样做。Facebook 本身从一开始就不是为了如此大规模的可扩展性而设计的,这也许是从中学到的最重要的一课。

如果你想了解一个不平凡的软件系统,我可以推荐一本关于 SharpDevelopment IDE 开发的书《剖析 C # 应用程序》。这是绝版的,但它是 网上免费提供。这本书让您对真正的应用程序有了一个大致的了解,并提供了对程序员有用的 IDE 的见解。

Facebook 正在使用 LAMP 结构。Facebook 的后端服务是用多种不同的编程语言编写的,包括 c + + 、 Java、 Python 和 Erlang,它们是根据需求而使用的。通过 LAMP,Facebook 使用了一些技术来支持大量的请求,比如

  1. Memcache -这是一个内存缓存系统,通过在 RAM 中缓存数据和对象来减少读取时间,用于加速动态数据库驱动的网站(如 Facebook)。Memcache 是 Facebook 的主要缓存形式,有助于减轻数据库负载。拥有一个缓存系统可以让 Facebook 快速地收回你的数据。

  2. Thrift (protocol) -它是一个用于可伸缩跨语言服务开发的轻量级远程过程调用框架。Thift 支持 c + + 、 PHP、 Python、 Perl、 Java、 Ruby、 Erlang 等等。

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

  4. HipHop for PHP -它是 PHP 脚本代码的源代码转换器,创建它是为了节省服务器资源。HipHop 将 PHP 源代码转换为优化的 C + + 。完成此操作后,它使用 g + + 将其编译为机器代码。

如果我们进一步深入,那么这个问题的答案就会更详细。我们可以从以下帖子中了解到更多:

  1. Facebook 是如何工作的
  2. 数据管理,Facebook 式的
  3. Facebook 数据库设计?
  4. Facebook 的数据库结构
  5. Facebook 的“喜欢”数据结构