大量使用的网站的缓存策略

时间:2011-02-10 23:05:28

标签: php caching optimization web varnish

我们正在为频繁使用的网站设计缓存策略。 该网站由动态和静态内容组成。前端是PHP,中间层是Tomcat,后面是mysql。

仅通过HTTPS完成用户登录屏幕以保护凭据。之后,所有内容都通过纯HTTP提供。有些屏幕是特定于客户的(让我们说他的最后订单),而其他屏幕对每个人来说都很常见(最受欢迎的产品,促销,规则等)。

鉴于预期的流量,很明显我们需要一个全面的缓存策略。所以我们正在考虑以下选项:

  1. 将Squid或Varnish放在PHP前面,并将其配置为缓存所有公共内容和甚至是客户的订单提交表单
  2. 使用PHP的memcached缓存页面片段(例如最受欢迎的产品)
  3. 在中间层/ tomcats中实现缓存(即在将内容返回到Web服务器之前,尝试从本地缓存(如ehcache)中获取)
  4. 使用Zend Cache之类的PHP级缓存并存储页面的片段。这接近我提到的第二个选项,但它内置于Zend框架中。
  5. 我们可能会结合使用这些策略。

    所以问题是,是否值得添加像Varnish这样的前端缓存,或者只是在里面使用Zend Cache?


    我忘了提到的另一个选项是使用像Zend Cache这样的PHP级缓存并存储页面的片段。这接近我提到的第二个选项,但它内置在Zend框架中。

    所以问题是,是否值得添加像Varnish这样的前端缓存,或者只是在里面使用Zend Cache?

    再次感谢, Philopator。

1 个答案:

答案 0 :(得分:1)

我做了很多像这样的项目,发现:

  • 创建(完整)自定义解决方案既困难又昂贵。幸运的是你找到了Squid / Varnish,memcache和ehcache
  • 网站的动态行为差异很大,您最了解您的网站,因此设计特定的缓存策略是有意义的
  • 部署多层缓存是有意义的。但是,这会使您网站的行为变得复杂,因此您应该告诉参与该网站的所有人(例如商家),并告诉您的工程师很多。
  • 想想你将如何调试问题。例如添加标题,指示所提供数据的新鲜度,允许某些人清除或避免缓存
  • 定期检查不同缓存层的执行情况(例如,为清漆机使用nagios插件)。
  • 在构建任何缓存之前测量性能问题:)
  • 暂时缓存某些对象已经是一个非常重要的改进

这些天我非常喜欢Varnish:它是一个单独的层,不会混乱Java / PHP代码,它快速而且非常灵活。缺点是vcl中的配置有点过于复杂。

我通常在内存存储中使用ehcache +以避免使用小数据集的延迟(例如数据库查询或服务请求),并在存在大量数据且需要由多个节点共享缓存时进行memcached。

相关问题