Php 高使用率网站的缓存策略

Php 高使用率网站的缓存策略,php,caching,optimization,web,varnish,Php,Caching,Optimization,Web,Varnish,我们正在为一个频繁使用的网站设计缓存策略。 该网站由动态和静态内容组成。前端是PHP,中间层是Tomcat,后端是mysql 只有用户登录屏幕通过HTTPS来保护凭据。之后,所有内容都通过普通HTTP提供服务。一些屏幕是特定于客户的(比如说他最后的订单),而其他屏幕则是每个人的共同屏幕(最受欢迎的产品、促销、规则等) 考虑到预期的流量,显然我们需要一个全面的缓存策略。因此,我们正在考虑以下选择: 将Squid或Varnish放在PHP前面,并将其配置为缓存所有公共内容,甚至客户的订单提交表单 通

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

只有用户登录屏幕通过HTTPS来保护凭据。之后,所有内容都通过普通HTTP提供服务。一些屏幕是特定于客户的(比如说他最后的订单),而其他屏幕则是每个人的共同屏幕(最受欢迎的产品、促销、规则等)

考虑到预期的流量,显然我们需要一个全面的缓存策略。因此,我们正在考虑以下选择:

  • 将Squid或Varnish放在PHP前面,并将其配置为缓存所有公共内容,甚至客户的订单提交表单
  • 通过PHP使用memcached缓存页面片段(如最流行的产品)
  • 在中间层/ ToCache中实现缓存(即在将内容返回到Web服务器之前,尝试从本地缓存中获取EHCache)
  • 使用像Zend cache一样的PHP级缓存,并将页面片段存储在那个里。这接近于我提到的第二个选项,但它内置于Zend框架中
  • 我们有可能结合使用这些策略

    所以问题是,是否值得添加像Varnish这样的前端缓存,还是只在内部使用Zend缓存


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

    所以问题是,是否值得添加像Varnish这样的前端缓存,还是只在内部使用Zend缓存

    再次感谢,
    Philopator.

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

    • 创建(完整的)定制解决方案既困难又昂贵。幸运的是你找到了Squid/Varnish、memcache和ehcache
    • 站点的动态行为差异很大,您最了解您的站点,因此设计特定的缓存策略是有意义的
    • 部署多层缓存是有意义的。但是,这将使站点的行为复杂化,因此您应该告诉站点的所有相关人员(例如业务人员)一些关于它的信息,并告诉您的工程师很多关于它的信息
    • 想想如何调试问题。e、 g.添加指示所服务数据新鲜度的标题,允许某些人清除或避免缓存
    • 定期检查不同缓存层的性能(例如,为您的机器使用nagios插件)
    • 在构建任何缓存之前,请测量性能问题的位置:)
    • 将某些对象缓存一段时间已经是一个非常显著的改进
    现在我非常喜欢Varnish:它是一个独立的层,不会使Java/PHP代码变得杂乱无章,它速度快而且非常灵活。缺点是vcl中的配置有点太复杂


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

    我做过很多类似的项目,发现:

    • 创建(完整的)定制解决方案既困难又昂贵。幸运的是你找到了Squid/Varnish、memcache和ehcache
    • 站点的动态行为差异很大,您最了解您的站点,因此设计特定的缓存策略是有意义的
    • 部署多层缓存是有意义的。但是,这将使站点的行为复杂化,因此您应该告诉站点的所有相关人员(例如业务人员)一些关于它的信息,并告诉您的工程师很多关于它的信息
    • 想想如何调试问题。e、 g.添加指示所服务数据新鲜度的标题,允许某些人清除或避免缓存
    • 定期检查不同缓存层的性能(例如,为您的机器使用nagios插件)
    • 在构建任何缓存之前,请测量性能问题的位置:)
    • 将某些对象缓存一段时间已经是一个非常显著的改进
    现在我非常喜欢Varnish:它是一个独立的层,不会使Java/PHP代码变得杂乱无章,它速度快而且非常灵活。缺点是vcl中的配置有点太复杂


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

    无论您选择哪种策略,请记住,使用Varnish缓存页意味着您可以完全从PHP获得页面加载,这本身就对你能处理的流量有很大的影响。无论你采用哪种策略,只要记住,拥有Varnish缓存页面意味着你可以完全从PHP中获得页面加载,这本身就可以对你能处理的流量有很大的影响。有什么帮助吗?:)有什么帮助吗?:)