大体层次划分
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
相关推荐
### Facebook架构深度解析 #### 一、架构概览与核心组件 Facebook的架构设计是大流量网站架构的经典案例,尤其在扩展性和性能优化方面有着独到之处。其架构由一系列核心组件构成,包括PHP、MySQL、Memcache以及一...
以下是对Facebook架构及其PHP使用的一些关键知识点的详细解析: 1. **前端架构**:Facebook的前端主要是基于JavaScript构建的,使用React框架来实现动态和高性能的用户界面。React允许高效地处理大量数据,并提供...
《架构之美:Facebook架构解析》是一本深入探讨大型互联网公司,特别是Facebook的系统架构与设计的书籍。作为架构师的必备读物,它揭示了如何构建可扩展、高可用、高性能的复杂网络服务。以下是对该主题的详细阐述:...
以下是对Facebook架构的深入解析: 1. **语言选择**: Facebook选择了PHP作为主要的后端开发语言,这主要是因为PHP的易用性和开发效率。尽管存在其他性能更高的语言,但正如Flickr的Cal Henderson所言:“语言不会...
本文将深入探讨Facebook的架构设计,从不同的角度解析其技术栈。 首先,Facebook的架构可以分为两大主要部分:一是基于PHP的经典LAMP(Linux、Apache、MySQL、PHP)堆栈,二是由各种服务(Service)构成的非PHP部分...
facebook的信息架构设计,是目前为止互联网上我见过的最合理的信息架构。每次培训,我基本都需要拿20分钟左右的时间来解析它,包括老的、新的、被抄袭的。一直打算把这个解析过程写下来,但讲的时候可以图音并茂,写...
Facebook作为全球最大的社交网络平台,其早期的架构设计与缓存系统对于理解大规模分布式系统的构建具有重要的参考价值。本文将深入探讨这两个主题,为IT专业人士提供相关知识点。 **Facebook早期架构设计** ...
### Facebook架构设计的核心理念 Facebook的架构设计核心在于其开放平台F8,它允许第三方开发者创建应用程序,这些应用可以无缝集成到Facebook的生态系统中。F8平台的关键特性包括: 1. **统一接口与API标准**:...
在实现这一功能的背后,Facebook运用了强大的服务器集群和分布式系统架构,确保在全球范围内快速响应用户请求。同时,为了保证服务质量,Facebook还采用CDN(内容分发网络)来缓存和分发图片,减少延迟,提高加载...
- **具体架构解析**:可以参考更详细的技术文档,如提供的链接中的内容([具体应用架构解析](http://www.uml.org.cn/zjjs/201202232.asp))。 #### 二、Facebook应用程序开发的核心理念 - **Social Design**:强调...