• 欢迎访问极客公园网站,WordPress信息,WordPress教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入极客公园 QQ群
  • Git主题现已支持滚动公告栏功能,兼容其他浏览器,看到的就是咯,在后台最新消息那里用li标签添加即可。
  • 最新版Git主题已支持说说碎语功能,可像添加文章一样直接添加说说,新建说说页面即可,最后重新保存固定连接,演示地址
  • 百度口碑求点赞啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊http://koubei.baidu.com/s/gitcafe.net
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏极客公园吧

图解Facebook的服务器架构

未分类 博客教主 13年前 (2011-07-02) 5323次浏览 3个评论

PS:毫无疑问,作为全球最领先的社交网络,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

作者:yanghehong
转自:http://blog.csdn.net/yanghehong/article/details/6534452


极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:图解Facebook的服务器架构
喜欢 (0)

您必须 登录 才能发表评论!

(3)个小伙伴在吐槽
  1. 沙发。 还没有能力可以看懂。。。
    ayanmw2011-07-04 11:18
  2. 我想问一下facebook的数据库是mysql,看了其他公司的构架发现没有用oracle和MS SQL,都是MYSQL或PostgreSQL
    Ryan2011-08-02 00:25
  3. 我想问一下facebook的数据库是mysql吗,看了其他公司的构架发现没有用oracle和MS SQL,都是MYSQL或PostgreSQL
    Ryan2011-08-02 00:28