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

Cache 为 王

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

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

The Alternative PHP Cache , APC

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

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

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--

Facebook 的 PHP 性能与扩展性相关推荐

  1. linux下webservice压力测试,pylot压力测试支持linux及windowsWebService性能及扩展性的工具.docx...

    pylot压力测试支持linux及windowsWebService性能及扩展性的工具 下载以下软件请加群292501151,群共享有如有不便敬请谅解,执行#后面跟着(linux命令行)!普:Pylo ...

  2. 服务器双路性能提升,性能PK扩展性 入门级双路服务器比拼

    [IT168 评测]不久前,英特尔发布了新一代的至强E5v4处理器,又掀起了新一轮的服务器升级浪潮.那么其实对于许多用户来讲,在选购第一台服务器的时候往往有许多的顾虑.究竟是选择性能?还是选择扩展性? ...

  3. mysql 基于语句的复制_MySQL 复制 - 性能与扩展性的基石 1:概述及其原理

    1. 复制概述 MySQL 内置的复制功能是构建基于 MySQL 的大规模.高性能应用的基础,复制解决的基本问题是让一台服务器的数据与其他服务器保持同步.接下来,我们将从复制概述及原理.复制的配置.常 ...

  4. MySQL 复制 - 性能与扩展性的基石:概述及其原理

    1. 复制概述 MySQL 内置的复制功能是构建基于 MySQL 的大规模.高性能应用的基础,复制解决的基本问题是让一台服务器的数据与其他服务器保持同步.接下来,我们将从复制概述及原理.复制的配置.常 ...

  5. idou老师教你学Istio 04:Istio性能及扩展性介绍

    Istio的性能问题一直是国内外相关厂商关注的重点,Istio对于数据面应用请求时延的影响更是备受关注,而以现在Istio官方与相关厂商的性能测试结果来看,四位数的qps显然远远不能满足应用于生产的要 ...

  6. 对java并发性的理解,【图片】你了解过Java并发编程:性能、扩展性和响应的高端操作吗?【java吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 降低同步代码所带来的效果是可以测量的.在我的机器上,整个程序的执行时间从420ms降低到了370ms.看看吧,仅仅把三行代码移出同步保护块就可以将程序运行 ...

  7. asp.net的10个提升性能或扩展性的秘密(二)

    简介 Asp.net有很多值得你挖掘的"秘密",当你发现了它们,将会给你网站的性能和可扩展性带来巨大提升!例如,对于Membership以及Profile提供程序有一些秘密的瓶颈, ...

  8. 高性能、高并发、高扩展性和可读性的网络服务器架构:StateThreads

    译文在后面:代码我放在GITHUB了:http://github.com/ossrs/state-threads. State Threads for Internet Applications In ...

  9. 优秀开源项目之三:高性能、高并发、高扩展性和可读性的网络服务器架构State Threads...

    译文在后面. State Threads for Internet Applications Introduction State Threads is an application library ...

最新文章

  1. 揭秘深度学习成功的数学原因:从全局最优性到学习表征不变性
  2. 一文教你搞定变频器的安装、原理、接线、维护及故障处理
  3. POJ 1944 Fiber Communications (枚举 + 并查集 OR 线段树)
  4. 设计师喜欢收集各种各样的笔刷来喽,不必倾家倾产就能像创造出令人惊叹的设计。
  5. Go语言:内存存储模型(对于可执行程序)
  6. java中怎么自己画地图_用 4 行代码画一幅中国地图
  7. 机器人无人车项目开发学习 上下位机软硬结合python jetson nano ros
  8. 流媒体网络传输的技术瓶颈
  9. php urldecode 加号,php|urldecode urlencode 的加号问题
  10. 如何定制zencart模板
  11. 智能驾驶大数据是什么?传统车企如何升级?
  12. Java解压压缩加密文件zip
  13. 微信公众平台 微接口 接口100 API100 接口大全
  14. Google基本查询语法
  15. windows已经阻止此软件因为无法验证发行者
  16. 毕业答辩的PPT攻略
  17. android 蓝牙串口自动断开,uni-app 蓝牙连接被自动断开问题
  18. of undifine报错
  19. Lifecycle的基本使用和原理
  20. 如何从一个空有上进心的人,变成行动上的巨人?

热门文章

  1. error: cannot read: aaa.java_Java期末考试习题库[选择题填空题改错题学生].doc
  2. [Web Chart系列之五] 1. 实战draw2d 之总体介绍
  3. JavaScript 之call , apply 和prototype 介绍
  4. 人工智能用python还是java_人工智能选择python还是java语言
  5. php fopen html,PHP fopen和fwrite函数实现创建html页面_PHP教程
  6. Java String 常量池理解
  7. Python的第三方库pyppeteer
  8. openlayers3 根据经纬度 自动画框_自动驾驶定位为什么少不了惯性导航?
  9. 揪出数据库中看不见的字符
  10. oracle unused 语法_Oracle教程之设置为unused 后如何恢复 ?