Facebook架构[关闭]


169

我一直在寻找有关Facebook架构,它们所面临的挑战和方式的文章/信息。他们使用什么以及为什么使用。他们如何扩展规模以及他们做什么的设计决策等。主要的基础是学习。了解处理大量流量的站点可以为架构师等提供很多指导,以便在设计新站点时牢记某些内容。我正在分享我的发现。

  1. Facebook科学与社交图谱(视频)
  2. 在Facebook上扩展
  3. Facebook聊天架构
  4. Facebook博客
  5. Facebook Cassandra建筑与设计
  6. Facebook工程说明
  7. Quora-Facebook体系结构
  8. 适用于6亿用户的Facebook
  9. Hadoop及其在Facebook上的使用
  10. Facebook上的Erlang:聊天架构
  11. Facebook性能缓存
  12. Facebook Connect架构

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

PS-我找不到合适的地方分享这项研究,因此就没有这项计划了。希望这对某人有帮助。



2
同样,highscalability.com似乎是学习许多流行网站的体系结构的好地方。不知道其中有多少是真实的,有多少是投机性的,但它在那里而且只是一些值得商...的地方
Srikar Appalaraju 2010年

1
Facebook的工程博客偶尔有显著的见解纳入其体系结构和缩放挑战。
科林·皮卡德

因为从技术上讲这不是一个真正的问题,所以建议您将信息移至FB标签Wiki上,以在该问题被删除的情况下将信息保留在那里。谢谢。
Gordon

@Gordon如何添加FB Wiki标签?'Facebook'标签已经不存在吗?那还不够吗?
斯里卡·阿巴拉拉茹

Answers:


33

嗯,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 ++编译的。因此,如果您可以构建执行某些功能(例如解析XML等)的PHP模块,则基本上(以某种交互方式)工作的速度相同。当然,您不能仅仅为满足所有可能的需求和整个应用程序而制作一个PHP模块,因为您将不得不重新编译,并且编写代码等会更加困难。

但是...有一些方便的PHP模块可以帮助解决速度问题。尽管到了最后,我们拥有了一个很棒的东西,称为“云”,有了它,我们可以扩展应用程序(包括PHP),因此不再重要。硬件变得越来越便宜。亚马逊只是再次降低了价格。

因此,只要您围绕PHP应用程序进行编码,即需要一天的扩展时间……那么,我认为您还可以,而且我不确定我是否会看一下Facebook及其所做的事情,因为他们做到了,这是一个完全不同的世界,现在正试图保持该基础结构并对其进行维护……嗯,您会得到HipHop之类的东西。

现在,HipHop将如何帮助您?不会的 不行 您可以重新开始,可以使用PHP 5.3。我强烈建议您研究PHP 5.3框架以及PHP 5.3与SPL库一起带到表中的所有新好处,并且还要考虑您的数据库。您最有可能从数据库提供内容,因此请检查MongoDB和其他无模式且面向文档的数据库类型。对于大多数“常见”类型的网站/应用程序,它们的速度要快得多而且更好。

看一下像Foursquare和Smugmug这样的新公司,以及其他一些利用新技术的公司,以及它们如何使用它。老实说,尽管Facebook如此成功,但我不会考虑他们“如何”构建高效的网站/应用程序。我并不是说他们没有在那里工作的非常(非常)有才华的人能创造性地解决(他们的)问题……我不是在说Facebook在总体上不是一个好主意,并且不是成功,您不应该从中获得灵感。...我只是说,如果您可以查看他们的整个源代码,您可能不会从中受益。


1
大部分你都同意。这些链接只是出于好奇。有时您会看一些技术并说“嘿!太酷了”……
Srikar Appalaraju 2010年

在这里随机回顾我的回答两件事。#1,我相信C,而不是C ++,这对我的技术不利。但是更重要的是,#2,Phalcon是一个较新的PHP框架,确实可以将很多内容转换为PHP扩展以提高速度。尽管您自己的许多代码当然不会在C中运行,并且您使用的任何其他库也可能不会在C中运行。但是,与HipHop一样,这是一个聪明的主意,可以挤出一些额外的性能。
汤姆(Tom)

...在这里,我们带着他们的那张王牌再次去了。回顾多年后,我们有了这种Hack语言(不少于HipHop东西,并带有自己的IDE)。它变得更好了吗?我们拭目以待。能帮到你吗?也许可以,但是现在看来您也可以像Facebook一样进行构建。只花了大约4年=)尽管就我个人而言,我不会那么快地喝下这些助剂。
2014年

1
现在看答案,我对科技界的情况感到惊讶。HipHop不仅支持最新版本的PHP,Facebook还开发了速度更快的HHVM。
Gopi Krishna 2014年

是的,有时我会收到通知,使我回到这一点。看到事情发生了怎样的变化以及HipHop如何演变为HHVM,真是太棒了(很可能Facebook也将如何在后台进行自我改造-看看他们所做的所有惊人的JS改进)。对于我,这说得通。如果您拥有一家拥有大量资金和员工的非常成功的公司...为什么在某个时候不对研发进行再投资,对吗?
汤姆(Tom)

18

Facebook正在使用LAMP结构。Facebook的后端服务使用多种不同的编程语言编写,包括C ++,Java,Python和Erlang,并且可以根据需要使用它们。使用LAMP,Facebook使用某些技术来支持大量请求,例如

  1. Memcache-内存缓存系统,用于通过在RAM中缓存数据和对象来减少读取时间,从而加快动态数据库驱动的网站(如Facebook)的速度。Memcache是​​Facebook的主要缓存形式,有助于减轻数据库负载。拥有缓存系统可以使Facebook像调用数据一样快。

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

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

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

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

  1. Facebook如何运作?
  2. Facebook风格的数据管理
  3. Facebook数据库设计?
  4. Facebook Wall的数据库结构
  5. Facebook“喜欢”数据结构

7

“了解处理如此大流量的站点,为建筑师等提供了很多指示,以便在设计新站点时牢记某些内容”

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

您为什么要能够处理Facebook必须处理的流量?奇怪的是,无论您多么有才华,您都将永远不必。Facebook本身并非从一开始就设计有如此大的可扩展性,这也许是最重要的经验教训。

如果您想学习非凡的软件系统,我可以推荐有关SharpDevelop IDE开发的书“剖析C#应用程序”。它已经绝版,但可以免费在线获得。这本书使您可以窥见一个真正的应用程序,并提供有关IDE的见解,这些对程序员很有用。


1
是的,可能根本没有多少人需要应对如此繁忙的交通。但是了解可伸缩性以及Facebook这样的大公司如何应对如此繁忙的流量总是很有益的。也许可以从以下中学到一些好的设计优点:)
万亿(

@nanshi:我同意学习是很有用的。我的观点是,您应该牢记要设计的内容。从第一天开始就为可伸缩性进行设计将使更改程序功能变得更加困难。在大多数情况下,简单性更为重要。此外,Facebook由许多人维护。这些人中的每个人仅需是系统一部分的专家。
约尔根·福格

我明白你的意思。同意:)
万亿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.