浅谈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中并没说这些集群具体怎么做分布和冗余备份的。
最新文章
- java实现批量上传(swfupload)
- [像黑客一样生活] shell终端听音乐之网易云shell版
- Python文件处理之文件写入方式与写缓存(三)
- rails3 Bundle简介
- css中的7中属性选择器
- UESTC_Little Deer and Blue Cat CDOJ 1025
- PHP字符串三种定义方式
- C# DataGridView中DataGridViewComboBoxCell列,下拉框事件的处理【完美解决】
- Linux使用top与free命令查看CPU与内存使用情况
- 登录获取session
- Oracle 生成Guid;Oracle 生成多个Guid;Oracle 生成带''-";的Guid
- 新建 .NET Core 控制台项目
- linux下网卡bonding配置(转)
- Python图片识别找坐标(appium通过识别图片点击坐标)
- html文件上传控件file自定义样式
- 【BZOJ3653】谈笑风生 离线+树状数组+DFS序
- [golang note] 类型系统
- jQuery无刷新上传之uploadify
- 1.springboot:入门项目
- Java - 无乱码读写文件
热门文章
- (二)hibernate进阶
- 利用DM工具Weka进行数据挖掘(分类)的完整过程
- 视频中的DTS与PTS的理解
- 使用WindowsAPI获取录音音频
- 线程间操作无效: 从不是创建控件“txtreceive”的线程访问它。
- 摘:数据结构各种算法实现(C++模板)
- 摘:C++:用ADO操作数据库的方法步骤
- 金软PDF转换(x-PDFConper)
- jquery.validate校验+jquery.form提交,配合使用
- struts2 的国际化