如何扩展PHP

时间:2012-06-05 19:15:16

标签: php scalability

我正在用PHP创建一个新的Web应用程序,我想以一种随着时间推移而扩展的方式创建它。

我应该或不应该做什么?我知道我应该缓存,但我应该缓存什么以及如何缓存?我还能做些什么让网站保持快速加载?

3 个答案:

答案 0 :(得分:28)

注意:这不是我写的,而是Snorkel from YC news

这是一个简短的清单:

  1. 在边缘缓存输出:使用Varnish或其他反向代理缓存。
  2. 缓存字节代码:使用APCXCache PHP操作码缓存。
  3. 缓存并最小化数据库I / O :使用memcachedredis,文件缓存和应用程序级缓存(即全局变量)减少数据库触摸
  4. 在本地文件中执行事件记录,而不是在数据库中:尽可能简单快速地进行所有写入操作,实时不需要的任何数据都可以写入普通旧文件中稍后处理。
  5. 使用CDN ,尤其是提供静态资产
  6. 服务器调整ApacheMySQLLinux有许多影响性能的设置,尤其是应该关闭超时设置。< / LI>
  7. 识别瓶颈:在系统级别使用stracetopiostatvmstat和查询日志记录等工具层正在使用最多的时间和资源
  8. 负载测试:自己动手。压力测试你的筹码以发现瓶颈并将其调出来
  9. 删除未使用的模块:对于堆栈中的每个组件,卸载任何不需要的默认模块来提供服务。
  10. 不要使用ORM 和其他虚拟抽象:取下训练轮并编写自己的查询。
  11. 快速输入页面,简单且可缓存。没有人在首页的下角阅读那个愚蠢的新闻提要,这会扼杀你的数据库,所以要把它拿出来。
  12. 大多数情况下,PHP会因为每个PHP进程被阻塞而等待来自其他层的I / O(无论是慢速磁盘,数据库过载,还是挂起的memcached进程,还是缓慢的REST API调用到第三方)而导致速度变慢服务...通常只是在一个实时的PHP进程中向你展示它正在等待的东西...简而言之,阻塞I / O会减慢一切。更快的关键是:

    - 保持简单

    - 尽可能在本地内存中缓存

    - 按请求执行尽可能少的阻止I / O操作

答案 1 :(得分:1)

扩展到多个前端还需要复制网站的根目录及其动态内容。

GlusterFS是一个不错的补充,但我不清楚它的扩展程度。另一种选择是Lsyncd。其他替代方案可能包括代码的GIT和动态内容的CDN。

答案 2 :(得分:0)

您应该添加:使用gzip压缩输出。