在Magento CE上使用Varnish的必要修改


14

我正在努力寻找任何有效的例子,说明需要哪些修改才能使Varnish缓存Magento站点。

理想情况下,我想要一系列任务,例如禁用/启用的东西以及在哪里寻找它们。具有这些更改旨在使用的Varnish配置也是很好的。

Magento性能指南讨论了很多有关Varnish的内容,因此我知道它已经完成过,但是实际上并没有说明如何使它工作。

Answers:


2

他们在这里有一个官方模块。它包括您需要的所有内容(清漆配置,模块等)


19

Varnish适合您吗?

Varnish并不是Magento表演的全部和全部。它可以很好地抵消来自漫游器和购物者的负载-但这不应该成为真正提高商店速度的第一步。

实际上,实施Varnish应该是您商店的最后一项性能改进。仅当看到页面加载时间时,才将其放入。Magento可以在没有页面加载时间的情况下进行交付(例如,<600ms页面加载时间)。

您的商店仍然需要快速

由于Varnish仍然至少需要加载一个页面才能启动缓存,因此,您的未缓存性能仍然需要非常出色。绝大多数独特的URL(分层导航命中,搜索查询等)永远不会真正从Varnish中获得,除非以下任何一种情况:

一种)您的TTL是如此之高,从3天前搜索查询今天仍然有效
B)网站上的脚步是如此巨大,网址已经时间很短的填充量

您还必须考虑到 并非每个商店都适合Varnish。任何鼓励用户在客户旅程的早期就创建个人会话(例如,登录,添加购物车等)的网站都将意味着Varnish最终将是多余的。

例如,私人购物网站鼓励用户从一开始就登录,但是这样做意味着Varnish永远不会真正拥有可缓存的非唯一内容。因此,您的命中率将大大降低,并且使用Varnish绝对不会带来任何好处。

新鲜内容或更高的点击率

清漆命中率
图片由 magestack.com提供

有效地使用Varnish就是在过时的内容和网站上的访问者之间取得平衡。

如果您的网站繁忙 -很有可能您可以使用较低的TTL来解决,但仍然具有较高的清漆命中率-并且还可以继续使用较低的TTL-因此,内容会更新鲜。因此,您的库存/价格变化会迅速反映出来,并且缓存将继续由人流量引起。

如果您的网站流量少,那么您将不得不做出让步。要么增加您的TTL以确保更高的命中率,要么拥有最新的内容。你们不能两者兼得。是的,您可以连续运行爬网/蜘蛛工具-但是这会消耗资源,而且可以爬网的数量或URL庞大(对于小型商店,通常为数万个)意味着它根本无效。因此,通常情况下,较小的商店会从优质商品中受益更多 FPC扩展和高度优化的服务器配置中。

但是,即使用户登录,我当然也可以使用Varnish,每用户缓存或ESI呢?

信息系统

ESI是一种出色的实用程序,能够将内容保留在缓存中,并且仍然能够在页面上具有动态块。但是要有效使用,您需要将回调的数量减至最少。您可以使用一些简单的入门模块作为此过程的基础-只需确保收紧其中的安全漏洞,默认情况下它是非常不安全的-对可以/不能加载的布局处理没有任何限制

每次加载Magento引导程序时,都会损失大约200毫秒的性能-甚至还没有加载一个集合/渲染一个块等。因此,如果您的ESI超过3倍,那么最终结果是使用Varnish + ESI获得动态内容的页面加载时间要比仅绕过Varnish并将请求直接传递给Magento本身要慢。

因此,要真正有效地使用ESI,您必须能够将多个请求合并到一个请求中。

例如,列出20种产品的类别视图页面需要显示准确的库存水平。因此,您将ESI用于页面上的每个块。那将是ESI股票需求的20倍。尽管库存需求非常轻巧,但同时运行20倍的库存需求会降低性能。因此,相反,您可以提供20种产品的整个商品/集合,而只是得到那个1x请求。但是无论如何,加载和呈现集合可能是页面上最慢的元素-因此您收获不多。

有效地使用ESI需要适当的计划和执行,否则您的站点将比根本不使用Varnish的站点慢。

每用户缓存

然后,可以使用特定于用户的缓存。除非您的网站流量很少,否则这不是一个好主意。您的点击率将非常低-访客访问同一页面的几率非常低。对于每位客户,该6Kb页面将在您的Varnish存储箱中占据越来越多的空间。

例如,如果您为Varnish分配了1GB。在一个典型的网站上,用户每次访问可浏览8个页面,这些页面中平均有6个是唯一的。这样一来,每1MB的存储空间可容纳28位访问者。然后将图像,CSS和JS纳入考虑范围(很幸运),它们很常见,但可能仍会占用7-800MB的可用存储空间。这样就剩下200MB的存储空间,足以容纳5,600位唯一身份访问者。

好吧,我不在乎,我只想要清漆

好的,那么您需要执行以下操作:

  1. 安装SSL端接器,使其位于Varnish之前(例如,stud / pound / nginx)
  2. 在服务器上安装Varnish
  3. 确保X-Forwarded-For正确配置
  4. 在商店中安装Varnish模块
  5. 设置您的Varnish VCL以排除第三方扩展

由于前三点超出了此答案的范围,因此我将自己处理。第4点是儿童游戏,第5点是继续阅读。

Varnish实现最重要的事情是确保您永远不要缓存不应缓存的内容。

例如。

  • 支付网关回调
  • 购物车概述
  • 客户我的帐户概述
  • 结帐(以及相应的Ajax调用)

等等

对于核心的Magento URL,有一个相当标准的URI列表,您可以在Varnish中进行转义:

admin|checkout|customer|catalog/product_compare|wishlist|paypal

但是,您还需要考虑正在运行的具有自定义路由,路由器和名称空间的任何自定义/第三方扩展。不幸的是,没有一种简单的方法可以知道这些扩展名中的哪些URL可以缓存,也不能缓存。因此,您需要逐案评估。

通常,每当配置Varnish时,我们将从识别它们可能占用并从那里到达的各自的路由,路由器和名称空间开始。我们通过SSH执行此操作:

grep -Eiroh "<frontName>.*</frontName>" community | sed "s/<frontName>//gI;s#</frontName>##gI" | sort -u
grep -A10 -ir "<rewrite>" community | grep "<from>"
grep -A5 -ir "<routers>" community 
grep -Eiroh "<frontName>.*</frontName>" local | sed "s/<frontName>//gI;s#</frontName>##gI" | sort -u
grep -A10 -ir "<rewrite>" local | grep "<from>"
grep -A5 -ir "<routers>" local 

这不会为您提供确定的URL列表-但几乎可以肯定,它将为您提供一个入门指南。

我们不能强调永远不要缓存不应缓存的内容有多么重要。结果可能是灾难性的。

综上所述

与其他任何Magento服务器一样,对性能进行优化,正确实施和调整确实可以带来好处。但是,只是在没有正确配置的情况下插入软件,不仅会使您的商店不再快,而且可能使速度更慢,更不安全且可靠性更低。


@SimonJGreen。如果您对答案感到满意,请确保将其标记为已接受。测试版需要更多可接受的答案才能毕业。
Ben Lessani-Sonassi

感谢您的回答。但是“配置apache和Varnish”步骤呢?仅仅“安装光油”是不够的。
Yaroslav Rogoza

我的观点是,您不应该首先考虑使用Varnish作为解决方案。清漆是使快速站点使用较少的资源,而不是使慢速站点快速使用。大多数人出于错误原因使用它。更不用说正确的配置不是1种尺寸适合所有人。您必须考虑到它如何适应基础架构的整体情况,它如何与SSL终结器交互,如何处理负载平衡,TTL定义和排除项。对于交通流量低的站点而言,这不是必需的,他们没有足够的后备力量来进行启动。
Ben Lessani-Sonassi

对于使用Ben的搜索命令在Mac上的任何人,请注意OSX版本的sed需要不同的标志。如果安装gnu-sed,则如下所示。
benz001 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.