Facebook 的 PHP 性能与扩展性

炙手可热的 Facebook 是用 PHP 开发的。随着一些技术交流,逐渐能看到 Facebook 技术人员分享的经验。近期这个 geekSessions 站点上看到 Facebook 的 Lucas Nealan 分享的文档比较有参考价值。

Cache 为 王

任何一个成功的站点都有一套最合适自己的 Cache 策略。

Facebook_Cache_Level.png

Note:这个层次图画的稍微有点问题,不是严格从上到下的。

The Alternative PHP Cache , APC

Facebook 平均每个用户每天要访问超过 50 个页面,PHP的页面载入时间的优化就比较重要了。在 PHP Cache 层,Facebook 采用了 APC

Lucas Nealan 的 PPT 举了一个例子,一个页面显示的时间从 4000 多毫秒降到了 100 多 毫秒。在 apc.stat 关闭的模式下,性能还要更好一些。不过需要重启动或用apc_cache_clear() 来通知更新。

PHP_APC.png

Memcached 层

APC Cache 的是非用户相关的信息,而用户相关的数据 Cache 当然是在 Memcached 中。

Facebook 部署了超过 400 台 Memcached 服务器,超过 5TB 的数据在 Memcached 中。这是当前世界上最大的 Memcached 集群了。也给 Memcached 贡献了不少代码,包括 UDP 的支持和性能上的提升(性能提升超过 20%)。

程序 Profiling

Facebook 开发人员大量采用 Callgrind 、APD、 xdebug 、KCachegrind 等工具进行基准性能测试。任何一个 Web 项目,这也是不可或缺,也是比较容易忽略的一环。所有开发人员都应该具备熟练使用这些工具的能力才好。

补充一下:语言的选择

为什么 Facebook 选择 PHP 而不是其他语言? 用Flickr 的 Cal Henderson 这句话就能说明了: "Languages's don't Scale, Architecture Scale"。

从 80-20 的原则看,APC 和 Memcached 是最主要的。在这两个环节上下功夫,受益/开销比要大于另外几个环节。

(上面的图是从 Lucas Nealan 的文档截的,版权所有是他的)

--EOF--

| | TrackBacks (0) | | Edit

Generator | Trampoline



自定义搜索

本文相关评论|Comments(11)

xLight 的评论:

这个服务器的数量还是比较恐怖的。
不知道他们使用什么样的架构,如何管理

ztka 的评论:

我怎么记得facebook是ruby开发的??

你看看这个

http://highscalability.com/friends-sale-architecture-300-million-page-view-month-facebook-ror-app

#
The Platform

# Ruby on Rails
# CentOS 5 (64 bit)
# Capistrano - update and restart application servers.
# Memcached
# MySQL
# Nginx
# Starling - distributed queue server
# Softlayer - hosting service
# Pingdom - for website monitoring
# LVM - logical volume manager
# Dr. Nics Magic Multi-Connections Gem - split database reads and writes to servers

bigqiang.openid.cn Author Profile Page 的评论:

楼上的,所提供的链接说的是一个叫 friend for sale 的facebook 功能应用是用ror开发的。开发这个应用的可不是facebook做的。

tesge 的评论:

hi Fenng,我下载的Lucas Nealan 的pdf上没有你文章中关于 APC 的那个结构图,是不是我下载的不pdf不全. 能把你下载的URL 告诉下吗? 谢谢

Fenng Author Profile Page 的评论:

@tesge

我漏掉了,搜索一份叫做 apc@facebook 的 PDF 文档

ssuunnww 的评论:

评论也这么难发呀。。

ShiningRay 的评论:

PHP的缓存,现在Xcache也不错,还是国人开发

触摸屏 的评论:

不错呀,真长见识了。

yesin 的评论:

悄悄问一下
Languages's don't Scale, Architecture Scale

这句到底是什么意思!

aw 的评论:

Languages's don't Scale, Architecture Scale

very very reasonable!

代码罐头 的评论:

很可惜国内的很多应用
在处于争论到底JAVA,RUBY,还是PHP,ASP.NET哪种好的程度上
只是我没想到他们还在用APC
似乎APC已经停滞开发很久了.
如果是400台的memcached.我比较关心他们怎么处理memcached非持久性数据保存的问题
因为万一其中一台挂了.所有cached的数据就要从头再去DB里面读取.这样性能会一下子下降很多.

PS.希望和楼主交换下链接
本人也是研究网站体系架构的
www.hiadmin.com

添加评论

关于这篇文章

这篇文章由 Fenng 于 April 9, 2008 6:35 PM 发布

上一篇:健康生活

下一篇:Movable Type 的性能问题

回到首页查看最近的文章或者是查看所有归档文章

DBA notes 的订阅数量,点击则可进行订阅
Feed 订阅数量,点击即可订阅最新内容