网址: http://www.dbanotes.net/arch/facebook_arch_note.html
设计原则
- 尽可能的使用开源软件,并且在需要优化的时候进行优化
- Unix 哲学。包括,模块化原则;整合化原则;清晰化原则等
- 任何组件具备扩展性
- 最小化故障影响
- 简化,简化,简化!
架构概览
Facebook 是 LAMP 的坚定支持者,也差不多是用 LAMP (或许用 LAM2P 更适合) 实现的最大的动态站点。
基础组件加上服务,中间用自己实现的一些工具进行粘合。其中关于运维细节的事情基本不会说出来的,这是很多公司的软实力所在。
PHP 经验
参见《Facebook 的 PHP 性能与扩展性》
MySQL 经验
- 主要用于做 Key-Value 类型的存储操作,数据随机分布在多台逻辑实例上,访问多数基于全局 ID 。
- 逻辑实例分散在多台物理主机上(超过1800台),负载均衡在物理层进行。
- 不做读复制。
- 尽量不做逻辑数据迁移(成本太高)。
- 不做 JOIN 操作 (豆瓣在 QCon 上也阐述了这一点)。数据是随机分布的,关联操作反而带来了极大的复杂度。
- 对于数据访问,主要的操作集中在最新的数据上,针对这部分做优化,旧的数据进行归档。
- 在中心 DB 绝不存储非静态数据。
- 使用服务或者 Memcached 进行全局查询。
Memcached 经验
参见我以前的笔记:Facebook 的 Memcached 扩展经验。Facebook 对 Memcached 做了不小的改进。另外,顺便说一下,前两天 Memcached 刚在 1.2.7 发布几天之后又发布了新版本 1.2.8,修正了一些问题。
一个比较有价值的是关于个人页面数据的获取的描述。这个就完全是需要做单页面 Benchmark 的细致活儿了,可能还需要产品经理能够理解工程师的"抵抗"。
- 获取个人信息数据:通过Cache,隐性通过用户所在的 DB 获取(基于 User-ID 获知 DB)
- 获取朋友连接信息:通过Cache,否则的话通过DB(基于 User-ID 获知 DB)
- 并行抓取每个朋友的 10个照片相册 ID ,从Cache抓取,如果失效,再从 DB 抓取(基于相册 ID)
- 并行抓取最近相册中的照片数据
- 运行PHP 把整个业务逻辑跑出来
- 返回数据给用户
然后是对 Facebook 非 LAMP 体系的东西做了一番介绍,基本上也开源了。最后参考两个架构图。
Facebook NewsFeed 的架构示意图
Facebook 搜索功能的架构示意图
管中窥豹,盲人摸象而已。
--EOF--
分享到:
相关推荐
Facebook的架构设计是大流量网站架构的经典案例,尤其在扩展性和性能优化方面有着独到之处。其架构由一系列核心组件构成,包括PHP、MySQL、Memcache以及一系列自定义服务如Thrift、Scribe等。以下是Facebook架构的...
- **企业级应用**:许多大型网站和应用程序都基于LAMP技术栈构建,例如WordPress和Facebook早期版本。 - **个人项目**:对于个人开发者来说,LAMP提供了一套低成本且高效的解决方案。 - **教育领域**:由于其开放性...
《大规模互动网站技术架构探析——以Friendster、Myspace、Facebook等为例》 在互联网的快速发展中,大型互动网站如Friendster、Myspace、Facebook、Flickr、LiveJournal、猫扑大杂烩以及校内网等,已经成为人们...
【标题】:“google、facebook、Twitter、eBay、腾讯、淘宝技术发展历程” 【描述】:本文探讨了全球知名互联网公司,如Google、Facebook、Twitter、eBay、腾讯和淘宝在其技术发展历程中的关键变革和创新,展示了...
在大数据框架中,Facebook使用了分布式系统的技术,如LAMP(Linux、Apache、MySQL、PHP)和NoSQL数据库来处理大规模的数据需求。此外,Facebook内部开发的Hive、HBase等工具用于数据仓库的建设,支持复杂的数据分析...
在设计Facebook的服务架构时,随着网站流量和网络结构的增长,许多操作(如搜索、广告选择与投放、事件记录等)对资源的需求远远超出了传统的LAMP框架所能支持的范围。因此,在这些服务的实现过程中,不同的编程语言...
首先,从技术栈的角度看,Facebook的架构可以分为LAMP(Linux、Apache、MySQL、PHP)栈和各种服务。PHP作为Facebook的主要开发语言,用于构建前端网页和处理用户的交互。同时,Facebook还使用了多种其他语言(如C++...
随着业务需求的增长和技术的发展,Myspace 进行了一次重大的技术迁移——从使用 ASP.NET 框架开发网站转为使用 C# 语言。这一决策背后有着多重考虑: - **提高开发效率**:C# 作为一种更加现代化的语言,拥有更好的...
Facebook开源的HipHop框架通过将PHP编译为C++执行,实现了显著的性能提升。这种创新不仅极大地提高了Facebook自身的运行效率,也为PHP社区带来了革命性的进展。 - **Ruby**:Ruby因其高效的开发效率而在Web开发...
- **Facebook 开发案例**:分享了使用 PHP 进行 Facebook 应用开发的经验和技巧。 - **Windows 下环境配置**:指导如何在 Windows 系统上搭建 PHP 开发环境。 #### 三、结语 通过上述资源的整理与归纳,我们希望...
该框架提供了丰富的社区功能,如用户个人资料、好友系统、论坛、相册、活动管理、即时消息等,便于快速构建类似Facebook或MySpace的社交网络。 1. **架构**:PHPizabi采用MVC(Model-View-Controller)设计模式,这...
- **前端框架**:React,一款由Facebook维护的JavaScript库,用于构建用户界面。 - **后端框架**:Node.js + Express,前者是一个开源的服务器环境,后者是基于Node.js的一个轻量级Web应用框架。 - **数据库**:...
博客网站是一种基于Web技术的在线平台,用户可以在这里创作、发布和分享个人或专业领域的文章。博客的内容形式多样,包括文字、图片、视频等多媒体元素,通常按照时间顺序从前到后排列,最新的文章会出现在首页。...
10. **部署与配置**:部署音乐网站源码通常涉及购买或租赁服务器,安装必要的运行环境(如LAMP或MEAN栈),配置域名、SSL证书,以及根据服务器环境调整源码配置。 综上所述,音乐网站源码是一个涵盖多种技术的综合...
这些网站如Friendster、Myspace、Facebook、Flickr、LiveJournal、猫扑大杂烩以及校内网,都是社区网站的代表,它们的技术特性包括: 1. **海量数据**:由于用户生成内容(UGC)的增加,数据库规模庞大,关系复杂,...
- **企业级选择 - 微软方案**:基于Windows Server和IIS的组合,搭配SQL Server和ASP.NET技术,适用于构建中型企业网站,但成本较高且性能可能不如开源解决方案。 - **大型企业选择 - Java**:使用Unix操作系统,...
该书指导学生使用当前的开发框架创建企业级网站,该网站全面涵盖了现代互联网开发平台,包括HTML5,CSS3,Javascript和LAMP堆栈(即Linux,Apache,MySQL和PHP) 。 涵盖的其他重要技术包括jQuery,XML,WordPress...
《程序员》杂志作为IT行业的权威读物,2012...通过《程序员》杂志2012年合辑的阅读,读者不仅可以了解到当年的热点技术,还能从中学习到软件开发的最佳实践和行业趋势,这对于当前的IT从业者来说仍具有很高的参考价值。