我们的网络服务器运行 nginx 7.65 和 fastcgi PHP5,并且正在研究缓存的可能性,以加快内容交付速度并降低系统负载。这些服务器运行不同的(自定义)应用程序。
缓存选项太多了,我不确定哪种设置才是合理的。有 memcached、APC、Nginx 的 fastcgi_cache、proxy_cache……
我知道 memcached 具有分布式能力,但目前我们不需要它。根据我的经验,如果安装在与它服务的同一台机器上,memcached 的性能会比 APC 慢,但这是很久以前的事了。
我不熟悉 Nginx fastcgi_cache 甚至常规的 proxy_cache 模块。它们有可比性吗?还是完全不同?
对于 Nginx w. FastCGI PHP5 来说,什么是好的、合理的缓存方法?
答案1
如果您的机器可以自行处理整个缓存,memcache 只会拖慢您的速度。APC 是共享内存。正确使用它将击败 memcached。Nginx 快速 cgi 缓存将使所有动态 php 页面尖叫。即使您将缓存设置为仅 10 秒,这也使得任何给定 php 页面的最大命中率将为每 10 秒一次。使页面无法因加载而崩溃。我在一个小盒子上运行了许多网站,每月有数百万人访问。此时您所需要的只是 nginx 缓存和 APC。
仅当你必须将缓存扩展到单个盒子之外时,才会使用 Memcache。
答案2
http://php-fpm.org/是我们在最近的一些安装中所使用的,而不是 FastCGI 本身。
Nginx 可以直接从 memcached 提供页面,因此,您的应用程序可以将页面直接写入 memcached。否则,您需要确保您的代码使用 memcached 进行查询/对象处理。操作码缓存将有所帮助,具体取决于您的代码库。如果您有一小组重复运行的脚本,APC 或 XCache(或在某些情况下是 eaccelerator)可以提供很好的提升。
您的缓存方法由您的代码决定。您可以缓存页面吗?片段?SQL 结果?值?这些实体的生命周期是多少,它们需要多少空间,键和结果集有多大?至于 memcached 比 APC 慢,因为它们实际上并不执行相同的任务,我不确定您比较的是什么。
答案3
在我看来,我们系统管理员倾向于从后往前关注这个问题,从后端开始,因为那是我们的地盘。最有效的东西实际上是在前端。如果你能正确处理浏览器缓存(http 标头)和 http 缓存(cdn,再次是标头)部分,那么你可以在源端做令人惊讶的草率的事情,并且不会有事。
答案4
现在你可以用 HHVM 替代 PHP-FPM,它将结合 PHP-FPM + APC 的性能,为你提供惊人的速度:hhvm+nginx+fastcgi_cache