首页 文章

Facebook架构[已关闭]

提问于
浏览
159

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

由于此网站的限制,我还有2个链接但无法发布 . 此外,请分享是否有任何更好的东西(不需要只与Facebook相关) .

P.S. - 我无法找到分享这项研究的好地方,因此这一举措 . 希望这有助于某人 .

3 回答

  • 15

    Facebook已经经历了许多变化,并且它最初并不是为了提高效率而设计的 . 它的目的是做它的工作 . 我完全不知道代码是什么样的,你可能找不到很多关于它的信息(出于明显的安全性和版权原因),但只是看看API . 看看它变化的频率以及它有多少不能正常工作,或者根本不变 .

    我认为他们袖手旁观的最大王牌是Hiphop . http://developers.facebook.com/blog/post/358您可以自己使用HipHop:http://wiki.github.com/facebook/hiphop-php

    但如果你问我这是一个非常雄心勃勃,可能是浪费时间的任务 . Hiphop只支持这么多,它不能简单地将所有内容转换为C语言 . 那告诉我们什么呢?好吧,它告诉我们Facebook没有充分利用PHP语言 . 它没有使用最新的5.3,我愿意打赌,还有很多兼容PHP 4的东西 . 否则,他们无法使用HipHop . HipHop是一个很好的想法,需要增长和扩展,但在目前的状态下,它对于那些正在构建新PHP应用程序的人来说并不是真正有用 .

    通过像Resin / Quercus这样的东西,还有PHP到JAVA . 同样,它不支持一切......

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

    但是......有一些方便的PHP模块可以帮助解决速度问题 . 虽然在一天结束时,我们有一个被称为“ Cloud ”的令人敬畏的东西,有了它,我们可以扩展我们的应用程序(包括PHP),所以它不再重要了 . 硬件变得越来越便宜 . 亚马逊刚刚降低了它的价格(再次) .

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

    现在HipHop如何帮助你?它不会 . 它不能 . 你刚开始新的,你可以使用PHP 5.3 . 我强烈建议您查看PHP 5.3框架以及PHP 5.3带来的所有新优势以及SPL库,并考虑您的数据库 . 您最有可能从数据库提供内容,因此请查看MongoDB以及其他类型的无架构和面向文档的数据库 . 对于最“常见”类型的网站/应用程序,它们更快更好 .

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

  • 31

    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将其编译为机器代码 .

    如果我们进一步详细说明,那么回答这个问题会更长 . 我们可以通过以下帖子了解更多:

  • 7

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

    我想你可以从Facebook的设计中学到很多东西,就像你可以从任何成功的大型软件系统的设计中学到的那样 . 但是,在我看来,在设计新系统时,不应该记住Facebook的当前设计 .

    为什么你希望能够处理Facebook必须处理的流量?无论你是多么有才华的程序员,你都不会有这种可能性 . Facebook本身并不是从一开始就设计出如此巨大的可扩展性,这可能是从中学到的最重要的一课 .

    如果你想了解一个非平凡的软件系统,我可以推荐关于SharpDevelop IDE开发的书籍"Dissecting a C# Application" . 它已绝版,但它是available for free online . 本书为您提供了一个真实应用程序的一瞥,并提供了对程序员有用的IDE的见解 .

相关问题