如何扩展PHP

Jer*_*oen 10 php scalability

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

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

Jer*_*oen 28

注意:这不是我写的,而是来自YC新闻Snorkel

这是一个简短的清单:

  1. 在边缘缓存输出:使用Varnish或其他反向代理缓存.
  2. 缓存字节代码:使用APCXCachePHP操作码缓存.
  3. 高速缓存和尽量减少数据库I/O:使用减少数据库触摸memcached,redis,文件缓存和应用级高速缓存(即全局变量)
  4. 事件记录在本地文件中而不是数据库中:使所有写入操作尽可能简单快速,实时不需要的任何数据都可以写入普通旧文件并稍后处理.
  5. 使用CDN,尤其是用于提供静态资产
  6. 服务器调整:Apache,MySQL并且Linux有很多影响性能的设置,尤其是应该关闭超时设置.
  7. 找出瓶颈:在系统级使用的工具,例如strace,top,iostat,vmstat,和查询日志,看看哪层是使用最多的时间和资源
  8. 负载测试:自己动手.压力测试你的堆栈找到瓶颈并调整它们
  9. 删除未使用的模块:对于堆栈中的每个组件,卸载任何不需要的默认模块来提供服务.
  10. 不要使用ORM和其他虚拟抽象:取下训练轮并编写自己的查询.
  11. 使输入页面快速,简单和可缓存.没有人在你首页的下角阅读那个愚蠢的新闻提要,这会扼杀你的数据库,所以把它拿出来.

大多数情况下,PHP会因为每个PHP进程被阻塞等待来自其他层的I/O(无论是慢速磁盘,数据库过载,还是挂起的memcached进程,还是慢速REST API调用第三方服务)而导致速度变慢.通常只是对一个实时的PHP进程进行操作会向你显示它在等待什么...简而言之,阻塞I/O会减慢一切.更快的关键是:

- 把事情简单化

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

- 按请求尽可能少地阻止I/O操作