Facebook 架构学习
作者:Fenng 发布在 dbanotes.net. 
在 QCon 2008 (旧金山站) 上Facebook 做的这个技术分享有不少值得借鉴的东西。所以,暂停对 QCon 北京的回顾,临时插播一贴。
设计原则
- 尽可能的使用开源软件,并且在需要优化的时候进行优化。
- Unix 哲学。包括,模块化原则;整合化原则;清晰化原则等
- 任何组件具备扩展性
- 最小化故障影响
- 简化,简化,简化!
架构概览
Facebook 是 LAMP 的坚定支持者,也差不多是用 LAMP (或许用 LAM2P 更适合) 实现的最大的动态站点。

基础组件加上服务,中间用自己实现的一些工具进行粘合。
PHP 经验
MySQL 经验
- 主要用于做 Key-Value 类型的存储操作,数据随机分布在多台逻辑实例上,访问多数基于全局 ID 。
- 逻辑实例分散在多台物理主机上(超过1800台),负载均衡在物理层进行。
- 不做读复制。
- 尽量不做逻辑数据迁移(成本太高)
- 不做 JOIN 操作 (豆瓣在 QCon 上也阐述了这一点)。数据是随机分布的,关联操作反而带来了极大的复杂度。
- 对于数据访问,主要的操作集中在最新的数据上,针对这部分做优化,旧的数据进行归档
- 在中心 DB 绝不存储非静态数据。
- 使用服务或者 Memcached 进行全局查询。
Memcached 经验
参见我以前的笔记:Facebook 的 Memcached 扩展经验。Facebook 对 Memcached 做了不小的改进。另外,顺便说一下,前两天 Memcached 刚在 1.2.7 发布几天之后又发布了新版本 1.2.8,修正了一些问题。
一个比较有价值的是关于个人页面数据的获取的描述。
- 获取个人信息数据:通过Cache,隐性通过用户所在的 DB 获取(基于 User-ID 获知 DB)
- 获取朋友连接信息:通过Cache,否则的话通过DB(基于 User-ID 获知 DB)
- 并行抓取每个朋友的 10个照片相册 ID ,从Cache抓取,如果失效,再从 DB 抓取(基于相册 ID)
- 并行抓取最近相册中的照片数据
- 运行PHP 把整个业务逻辑跑出来
- 返回数据给用户
然后是对 Facebook 非 LAMP 体系的东西做了一番介绍,基本上也开源了。
Facebook NewsFeed 的架构示意图

Facebook 搜索功能的架构示意图

管中窥豹,盲人摸象而已。
–EOF–
相关文章|Related Articles
- WordPress.com 的数据量 – Sep 11, 2007
- Fotolog.com 的技术信息拾零 – Sep 12, 2007
- 《大型 Web2.0 站点构建技术初探 》一文系抄袭 – Sep 18, 2007
- Digg 网站架构 – Oct 9, 2007
评论数(0)|添加评论 | 最近作者还说了什么? Follow Fenng@Twitter
本文网址:http://www.dbanotes.net/arch/facebook_arch_note.html
DBA Notes 理念: 用简约的技术取得最大的收益…
- 暂缓迷恋 Cassandra
作者:Fenng 发布在... - 面向生产环境的SOA系统设计 by 支付宝程立
作者:Fenng 发布在... - Taobao DB 读写分离 [Flickr]
Fenng(dbanotes) posted... - HadoopDB
作者:Fenng 发布在... - Voldemort — 分布式 key-value 存储系统
作者:Fenng 发布在...
随机推荐文章:
- FeedingBottle——体积小巧的 Aircrack-ng GUI(LinuxTOY)
- 短消息:Fedora 12 准备就绪(LinuxTOY)
- 5 种途径获取 RSS feed 全文输出(磨剑庐(web2.0 review))
- Wordpress 插件推荐:死链检测工具Broken Link Checker(望月的博客)
- IT业内的竞争应该大气一点(风梦阁)
- WordPress图片主题Snapshot使用教程(Wopus中文平台)
- OpenOffice.org 3.2 新功能(LinuxTOY)
- 迅雷和搜狐确实无聊(风梦阁)
- 解决SSL攻击的方法(月光博客)
- 文档资料共享:分享家(趣站集)
