`
zhb8015
  • 浏览: 377126 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Spring Roo杂谈
浏览量:0
社区版块
存档分类
最新评论

facebook架构解析(转)

阅读更多

 大体层次划分

  Facebook的架构可以从不同角度来换分层次。

  一种是:

  一边是PHP整的经典的LAMP stack;另外一边是非PHP整的各种service。

 

  Facebook的页面从刚创立的时候扎克伯格写的,到现在,都用PHP开发。后端有用各种语言开发的service。它们之间用跨语言的thrift RPC通信(Scribe也是建立在Thrift之上)。

  另外一个角度划分的层次是:

  前面是负载局衡器(没说是用硬件的还是软件的);负责分配前端的Web服务器,Web服务器是用PHP来聚合数据;最后面是 Services,Memcached和数据库。

  有意思的是对后面三种的定性:

  Services – 快速,复杂; 自己开发的业务进程,来实现复杂的业务逻辑,速度快。

  Memchached – 快速,简单;Memchached做简单的key-value缓存,服务应用快速的读请求。

  数据库– 缓慢,持久。数据库做持久存储,磁盘IO自然慢,不过有memcached做缓存没关系。

  NewsFeed的架构

  写:

  Bob更新状态,Web服务器上的PHP程序除了将内容写到MySQL数据库之外,也将该行为动态的ID通过Scribe发到一个Leaf Server上(根据Bob的用户ID选的Leaf Server)。

  读:

  另一个人Alice打开Facebook,加载主页,PHP程序向Aggregator服务器查询(Thrift调用),Aggregator从若干个Leaf Server里头读出Alice的朋友的所有行为动态/action的前四十个,aggregator做聚合和一定的排序,返回给PHP程序。

  PHP程序获得这些行为动态的ID之后,从Memcached中读出这些ID对应的内容,如Memcached没有,则从MySQL数据库中读,汇聚后生成HTML返回给浏览器。

  Chat的架构

  页面请求,仍由WEB服务器处理(PHP)处理,当然也依赖web tier之后的各种Service。比如查看消息历史啊,在线用户列表啊,发送聊天消息啊。

  接收聊天消息,则没通过PHP服务器,而是专用的用Erlang写的Channel服务器来处理,通过long-polling来接收聊天消息。Channel服务器是Chat服务的核心部件。发送的消息通过web tier发到Channel服务器。

  后方有用C++写的chatlogger服务器来做历史记录的读写。

  同样也用C++写了presence服务器来从channel服务器汇集在线状态。

  系统的简化结构如下图所示:

  Web tier, chatlogger, presence, channel 都是多个服务器组成的集群。

  Channel服务器有根据User ID做分区,每个分区由一个高可用的Channel集群服务。

  Webtier, chatlogger, presence,在公开的文章和PPT中并没说这些集群具体怎么做分布和冗余备份的。

  互联网上的资料:

  http://www.infoq.com/presentations/Scale-at-Facebook

  Facebook前工程总监Aditya Agarwal在QCon London2010 上的演讲。

  http://www.infoq.com/presentations/Facebook-Software-Stack

  Aditya Agarwal在 QCon SanFrancisco 2008上的演讲,和QCon London 2010 上的没什么区别...

  http://www.infoq.com/presentations/Evolution-of-Code-Design-at-Facebook

  Facebook工程师Nick Schrock在QCon London2011上介绍它们是怎么写代码的。

  http://www.infoq.com/presentations/Infrastructure-at-Facebook

  Facebook的基础平台(Infrastructure)团队经理Jason Sobel在QCon San Francisco 2010上的演讲。

  http://www.youtube.com/watch?v=T-Xr_PJdNmQ&feature=player_embedded

  Velocity 2010: Tom Cook, "A Day in theLife of Facebook Operations"

  http://www.erlang-factory.com/upload/presentations/31/EugeneLetuchy-ErlangatFacebook.pdf

  http://www.facebook.com/note.php?note_id=14218138919

分享到:
评论

相关推荐

    架构之美(face book架构)

    架构的设计 facebook架构解析 架构师必看

    FACEBOOK服务架构

    FACEBOOK服务架构,解析FACEBOOK服务器架构,不错的学习资料。。

    浅析facebook的信息架构

    facebook的信息架构设计,是目前为止互联网上我见过的最合理的信息架构。每次培训,我基本都需要拿20分钟左右的时间来解析它,包括老的、新的、被抄袭的。一直打算把这个解析过程写下来,但讲的时候可以图音并茂,写...

    基于Facebook和Flash平台的应用架构解析

    本系列文章(共分三部分)将为你介绍基于Facebook和Flash平台的应用程序架构,解析你能在此平台上构建的各种应用类型,并说明这些应用如何与你的服务器、Facebook服务器通讯。 你可构建三种Flash与Facebook平台集成...

    facebook的信息架构评析

    原文:http://uicom.net/blog/?p=762facebook的信息架构设计,是目前为止互联网上我见过的最合理的信息架构。每次培训,我基本都需要拿20分钟左右的时间来解析它,包括老的、新的、被抄袭的。 一直打算把这个解析...

    解析SNS社区产品架构模型

    个人认为,从严格产品意义而言,国外是FACEBOOK,国内是校内网最先实现相对完整地SNS社区产品架构的。而早期的网易社区,腾讯IM平台,早期博客形态的QQ空间,包括现在一些手机社区,都和SNS有些偏差。具体地讨论以下...

    Hadoop技术内幕:深入解析YARN架构设计与实现原理

    全书共四部分13 章:第一部分(第1~2 章)主要介绍了如何获取、阅读和调试Hadoop 的源代码,以及YARN 的设计思想、基本架构和工作流程;第二部分(第3~7 章)结合源代码详细剖析和讲解了YARN 的第三方开源库、底层...

    大数据产业链构成解析.doc

    数据分析与挖掘的核心算法与软件主要掌握在大型数据库公司及高校的手里,国际 上主要参与者包括 IBM、甲骨文、微软、谷歌、亚马逊、Facebook 等,国内主要参与单位包括数据库企业、高校、以 BAT 为代表的大型互联网...

    graphql-lattice:Lattice for GraphQL是用于管理和组织架构和解析器的工具

    graphql-lattice( ) :construction: 工作正在进行中 :police_car_light: 请了解GraphQL Lattice仍在开发中,不应对永久可用性做任何假设。... Facebook提供了有关学习GraphQL并将其与您可能使用的各种服务器端语言

    ReactNativeForAndroid架构初探

    Facebook在2015.9.15发布了ReactNativeforAndroid,把JavaScript开发技术扩展...1)层次架构:Java层:java层为逻辑入口,启动C++层的javascript解析器,执行js通过c++传递来的渲染指令,从而构建NativeUI等。java层依

    《程序员》杂志2012年第7期

    《Quake》作者Carmack认为追求函数式编程有着实在的价值,但劝说所有程序员抛弃C++,转而启用边缘语言,是不负责任的。 百味 (1)新书上架 (2)Mac OS X文件系统的来龙去脉(上) (3)“新”科学家:...

    storm 0.5.1 source

    Storm 代码来自于Twitter上月收购的BackType,似乎是Twitter为方便用户解析数据的努力。 现在Storm的势头相当强劲,...相当热门的新创公司Cloudera,其产品也是基于Hadoop,并为Facebook和其他公司提高了基础架构。

    Android项目源码PHPHub社区非官方Android客户端.zip

    fresco Facebook 开源的图片缓存库 butterknife 注解框架 materialish-progress Material Design 风格进度条 PhotoDraweeView 基于 Fresco 的图片缩放控件 cwac-anddown Markdown 渲染 gm-mkdroid 一个所见即...

    高可用性的HDFS:Hadoop分布式文件系统深度实践

    第2章 HDFS元数据解析 2.1 概述 2.2 内存元数据结构 2.2.1 INode 2.2.2 Block 2.2.3 BlockInfo和DatanodeDescriptor 2.2.4 小结 2.2.5 代码分析——元数据结构 2.3 磁盘元数据文件 2.4 Format情景分析 2.5 元数据...

    java开源包1

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java开源包11

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java开源包2

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    java开源包3

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

Global site tag (gtag.js) - Google Analytics