Facebook架构[关闭]

Posted

技术标签:

【中文标题】Facebook架构[关闭]【英文标题】:Facebook Architecture [closed] 【发布时间】:2011-04-01 19:52:23 【问题描述】:

我一直在寻找有关 Facebook 架构、挑战及其应对方式的文章/信息。他们使用什么以及为什么使用。他们如何扩展以及他们所做的设计决策是什么等。主要的基础是学习。了解处理如此大量流量的网站为建筑师等提供了很多指导,以便在设计新网站时牢记某些东西。我正在分享我的发现。

    Facebook Science & Social Graph (Video) Scale at Facebook Facebook Chat Architecture Facebook Blog Facebook Cassandra Architecture and Design Facebook Engineering Notes Quora - Facebook Architecture Facebook for 600M users Hadoop & its usage at Facebook Erlang at Facebook: Chat Architecture Facebook Performance Caching Evolution Facebook Connect/Login Architecture

我还有 2 个链接,但由于本网站的限制无法发布。另外,如果有人有更好的,请分享(不必仅与Facebook相关)。

附注- 我无法找到分享这项研究的好地方,因此提出了这个倡议。希望这对某人有所帮助。

【问题讨论】:

2.在 Facebook 上扩展(视频) - infoq.com/presentations/Scale-at-Facebook 3. Facebook 聊天 - infoq.com/news/2008/05/facebookchatarchitecture 另外,highscalability.com 似乎是了解许多热门网站架构的好地方。不知道其中有多少是真的,有多少是投机性的,但它就在那里,只是值得咀嚼的东西...... facebook engineering blog 偶尔会深入了解他们的架构和扩展挑战。 由于这在技术上不是一个真正的问题,因此鼓励您将信息移至FB tag wiki 以保留那里的信息,以防此问题被删除。谢谢。 @Gordon 如何添加 FB Wiki 标签? “Facebook”标签不是已经存在了吗?这还不够? 【参考方案1】:

嗯,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 应用程序的人来说并没有真正的用处。

还有通过 Resin/Quercus 之类的 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 和 Smugmug 等新公司以及其他一些正在利用新技术的公司以及他们是如何使用它的。像 Facebook 一样成功,老实说,我不会看他们“如何”建立一个高效的网站/应用程序。我并不是说他们没有非常(非常)有才华的人在那里工作并创造性地解决(他们的)问题……我也不是说 Facebook 总体上不是一个好主意,也不是成功了,你不应该从中得到想法......我只是说如果你可以查看他们的整个源代码,你可能不会从中受益。

【讨论】:

同意你所说的大部分内容。这些链接只是为了好奇。有时你看到一项技术并说“嘿!这很酷”...... 在这里随机重温我的回答两件事。 #1,我相信 C 而不是 C++ 我的技术不好...但更重要的是 #2,Phalcon 是一个更新的 PHP 框架,它确实将很多转换为 PHP 扩展以提高速度。尽管您自己的大部分代码当然不会在 C 中运行,并且您使用的任何其他库也可能不会。然而,这是一个聪明的想法,就像 HipHop 一样,可以挤出一些额外的性能。 ...我们再次带着那张王牌继续前进。多年后回首往事,我们有了这种 Hack 语言(诞生于 HipHop 的东西并拥有自己的 IDE)。它变得更好了吗?走着瞧。它可以帮助你吗?也许吧,但现在看起来你也可以像 Facebook 一样构建。只用了大约 4 年 =) 虽然就个人而言,我不会这么快喝酷爱。 现在看答案,我对科技界的结果感到惊讶。 HipHop 不仅支持最新版本的 PHP,Facebook 还开发了更快的 HHVM。 是的,我有时会收到通知,让我回到这一点。看到事情发生了怎样的变化以及 HipHop 如何演变成 HHVM(以及 Facebook 如何在幕后重塑自己——看看他们正在做的所有惊人的 JS 进步)真是太棒了。对于我,这说得通。如果您有一家非常成功的公司,拥有大量资金和员工......为什么不在某个时候再投资于研发,对吧?【参考方案2】:

Facebook 正在使用LAMP structure。 Facebook 的后端服务是用各种不同的编程语言编写的,包括 C++、Java、Python 和 Erlang,并根据需要使用它们。借助 LAMP,Facebook 使用了一些技术来支持大量请求,例如

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

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

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

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

如果我们更详细,那么对这个问题的回答会更长。我们可以从以下帖子中了解更多:

    How Does Facebook Work? Data Management, Facebook-style Facebook database design? Facebook wall's database structure Facebook "like" data structure

【讨论】:

【参考方案3】:

“了解处理 如此庞大的流量给了很多 建筑师等要保留的指针 在设计时记住某些东西 新网站”

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

您为什么希望能够处理 Facebook 必须处理的流量?很可能,无论您是多么有才华的程序员,您都不必这样做。 Facebook 本身并不是从一开始就为如此大规模的可扩展性而设计的,这可能是从中学到的最重要的一课。

如果你想了解一个重要的软件系统,我可以推荐关于 SharpDevelop IDE 开发的《剖析 C# 应用程序》一书。它已绝版,但它是available for free online。这本书让您了解一个真实的应用程序,并提供对程序员有用的 IDE 的见解。

【讨论】:

是的,可能根本没有多少人需要处理如此繁重的流量。但是了解可扩展性以及 Facebook 等伟大公司如何处理如此庞大的流量总是很好的。可能有一些好的设计优点可以借鉴:) @nanshi:我同意学习很有用。我的观点是,您应该牢记您的设计目的。从第一天开始就设计可扩展性使得改变程序的功能变得更加困难。在大多数情况下,简单性更为重要。此外,Facebook 由许多人维护。这些人中的每一个都只需要成为系统一部分的专家。 我明白你的意思。同意:)

以上是关于Facebook架构[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Facebook sdk 获取 Facebook 聊天列表 [关闭]

如何使用 facebook id 在 URL 中获取 facebook 用户名? [关闭]

钛中的Facebook整合[关闭]

如何使用 Facebook SDK 3.1 使用弹出视图登录 Facebook,而不是通过 safari? [关闭]

facebook 登录 Android 后应用程序关闭(Facebook SDK 版本 4.6.0)?

Facebook关闭面部识别系统