10

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

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

4

3 回答 3

28

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

这是一个简短的列表:

  1. 在边缘缓存输出Varnish:使用或其他反向代理缓存。
  2. 缓存字节码:使用APCXCachePHP 操作码缓存。
  3. 缓存和最小化数据库 I/Omemcached :使用、redis、 文件缓存和应用程序级缓存(即全局变量)减少数据库接触
  4. 在本地文件中记录事件,而不是在数据库中:使所有写入操作尽可能简单和快速,任何实时不需要的数据都可以写入普通的旧文件并稍后处理。
  5. 使用 CDN,尤其是用于交付静态资产
  6. 服务器调优: Apache, MySQL, 并且Linux有很多影响性能的设置,尤其是超时设置应该被调低。
  7. 识别瓶颈:在系统级别使用工具,如,,,,strace和查询日志来查看哪个层使用最多的时间和资源topiostatvmstat
  8. 负载测试:DoS 自己。对您的堆栈进行压力测试以发现瓶颈并将其排除在外
  9. 删除未使用的模块:对于堆栈中的每个组件,卸载不需要提供服务的任何默认模块。
  10. 不要使用 ORM和其他虚拟抽象:放下训练轮并编写自己的查询。
  11. 使入口页面快速、简单且可缓存。没有人在阅读您首页底部角落的那个愚蠢的新闻提要,它正在扼杀您的数据库,所以把它拿出来。

大多数情况下,PHP 速度变慢是因为每个 PHP 进程都被阻止等待来自其他层的 I/O,无论是慢速磁盘,还是过载的数据库,或者挂起的 memcached 进程,或者对 3rd 方服务的缓慢 REST API 调用...... . 通常只是 strace'ing 一个实时的 PHP 进程会告诉你它在等待什么......简而言之,阻塞 I/O 会减慢一切。跑得更快的关键是:

- 把事情简单化

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

- 每个请求尽可能少地执行阻塞 I/O 操作

于 2012-06-05T19:15:17.347 回答
1

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

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

于 2012-06-05T20:10:12.120 回答
0

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

于 2012-06-05T19:45:41.923 回答