浅谈Facebook的服务器架构(组图)
导读:毫无疑问,作为全球最领先的社交网络,Facebook的高性能集群系统承担了海量数据的处理,它的服务器架构一直为业界众人所关注。CSDN博主yanghehong在他自己最新的一篇博客《 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集群服务。
Web tier, chatlogger, presence,在公开的文章和PPT中并没说这些集群具体怎么做分布和冗余备份的。
浅谈Facebook的服务器架构(组图)的更多相关文章
- 浅谈Facebook的服务器架构
导读:毫无疑问,作为全球最领先的社交网络,Facebook的高性能集群系统承担了海量数据的处理,它的服务器架构一直为业界众人所关注.CSDN博主yanghehong在他自己最新的一篇博客< Fa ...
- AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构
requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又 ...
- 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore
本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...
- 浅谈大型web系统架构
动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统. ...
- 转:浅谈大型web系统架构
浅谈大型web系统架构 动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应 ...
- 五分钟DBA:浅谈伪分布式数据库架构
[IT168 技术]12月25日消息,2010互联网行业技术研讨峰会今日在上海华东理工大学召开.本次峰会以“互联网行业应用最佳实践”为主题,定位于互联网架构设计.应用开发.应用运维管理,同时,峰会邀请 ...
- 【ZZ】浅谈大型web系统架构 | 菜鸟教程
浅谈大型web系统架构 http://www.runoob.com/w3cnote/large-scale-web-system-architecture.html
- 浅谈HTML5单页面架构(一)——requirejs + angular + angular-route
心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验 ...
- 浅谈全区全服架构的SNS游戏后台
版权声明:本文由梁本志原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/198 来源:腾云阁 https://www.qclo ...
随机推荐
- Python编程-基础知识-python项目包和文件的管理以及如何引用相对路径的包和模块
目录 结构: core |____ __init__.py |____ basic |____ __init__.py |____ database |____ __init__. ...
- 网站banner图片制作(简易版)
1.新建图层 根据baner需求,新建图层尺寸: 2.将图片拖进图层 按住shift对图片进行等比例缩放,将等比例缩放后的图片平铺到图层上. 3.添加文字 设置字体以及字体颜色 4.添加描边 选择文字 ...
- Java中try catch finally的执行顺序问题
finally 语句块是在 try 或者 catch 中的 return 语句之前执行的.更加一般的说法是,finally 语句块应该是在控制转移语句之前执行,控制转移语句除了 return 外,还有 ...
- Java之Undeclared Checked Exception
之前一直认为在Java里如果每个task是相对独立.并且是可以容忍错误的,那么只需要处理Checked Exception(这个是Java强制的)和主动处理Unchecked Exception(派生 ...
- ubuntu16.4安装后做的事情
1.安装搜狗拼音输入法 http://pinyin.sogou.com/linux/help.php 2.安装谷歌浏览器 http://jingyan.baidu.com/article/335530 ...
- 微信小程序之底部弹框预约插件
代码地址如下:http://www.demodashi.com/demo/13982.html 一.前期准备工作: 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...
- 【LeetCode】97. Interleaving String
Interleaving String Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. Fo ...
- 摘:C++:用ADO操作数据库的方法步骤
ADO接口简介 ADO库包含三个基本接口:_ConnectionPtr接口._CommandPtr接口和_RecordsetPtr接口. _ConnectionPtr接口返回一个记录集或一个空指针 ...
- JEECG技术总结
1.用户数据迁移时,必须在表t_s_base_user和t_s_user中都插入数据才会在页面显示.2.执行sql语句: String sql = "select count(id) fro ...
- 点滴积累【other】---HTTP Error 503. The service is unavailable (转载)
此文参考来源:http://luowei1371984.blog.163.com/blog/static/440415892012726448381/ 描述:在访问网站是会遇到这样的问题,提示“HTT ...