当前位置: 首页>>技术解读>>正文


Magento自动缓存洞察

webfans 技术解读 , , , , , 去评论

问题描述

我们使用memcache运行Magento EE 1.11。每个memcahce服务器2GB,总共4GB。我们有大约240k的产品。

  • 可用的RAM:6GB

  • 核心:16

  • 主题:32

交易中,增加了更多新产品,并且每天都会对产品进行更改,当然每次在back-end中添加/修改新产品时,缓存都会失效,特别是“整页缓存”。

当启用Magentos自动缓存生成时,需要花费大约2天的时间来构建缓存,并为其分配8个线程。两天后,memcache在两个ram磁盘之间分开约2GB左右。

问题是,当产品每天被修改时,缓存将变为无效状态,并且一旦刷新了“全页面缓存”,那么2GB的缓存将回到方块1,并且Magentos自动缓存的粘性循环再次开始。现在,不仅缓存恢复为0,而且CPU使用率达到90%,并且网站变成5-10秒的等待游戏,您可以忘记试图请求具有100多种变体的产品,如果它是没有缓存它需要几分钟才能加载第一次,这很荒谬。

所以,我的问题向社区。

  • 有没有办法让Magento自动”update”缓存失效,无需重建整个缓存并从0开始?我知道缓存何时失效,Magento知道某些事情已经改变,但并不完全在缓存中的位置(如果我错了,请纠正我)。有没有模块/配置可以绕过重建整个缓存?

在附注中,我们使用了Tiny Bricks LightSpeed模块。

  • Magentos自动缓存生成可以通过cronjob进行时间控制吗?说,开始爬行在晚上10点 – 早上6点。

  • 处理这种情况的最佳方式是什么?如你所知,重建每天千兆字节的缓存是不可接受的。

最佳解决方案

你没有足够的内存

We have about 240k products
Available ram: 6GB
Threads: 32

你没有足够的内存来满足你的产品数量。作为一个经验法则,我们推荐每个逻辑核心至少有2-4GB的RAM。

如果你绘制出可能的内存使用情况:

  • max_memory约为768MB = 24GB的64条PHP线程

  • 240,000个产品可能意味着大约15GB的InnoDB表空间

  • 64个PHP线程将保证大约128个MySQL连接,通常这是以每个连接最少200MB为代价的

  • 在Redis和lzf压缩的240,000产品的后端存储 – 仍然会消耗大约6GB的RAM

所以迄今为止总共有70GB的承诺内存 – 我们甚至没有提到操作系统等。

您的硬件严重低估。我建议您阅读这篇Magento server set up文章,了解如何进步。

Memcached不支持缓存标签

如果你使用Memcached(不是一个问题,它的性能很高),那么你要么存储缓存标记,要么不存储缓存标记。如果您没有定义slow_backend – 那么您不存储标签,这意味着您的缓存不能区分任何不同的缓存类型 – 因此您将无法独立刷新它们。

阅读一下这个http://www.sonassi.com/knowledge-base/magento-kb/what-is-memcache-actually-caching-in-magento/

我们强烈建议切换到Redis。它有它的怪癖,并且确实需要用于大型商店的重要fine-tuning。但总体而言,它会比Memcached略胜一筹,并且可以获得cache-tag支持的实惠。

404和FPC

FPC有一个真正的问题,in-fact,所有缓存引擎都有404s问题。原因是,任何旧的URL仍然被抓取或链接到一个页面,必须遍历整个core_url_rewrite表,尝试找到一个匹配所有定义的路由器和命名空间,然后才能最终放弃和加载404。

然后缓存一个没有任何价值的资源,并占用缓存存储空间。你可能会发现你的Memcached存储的很大一部分实际上被404内容所占用。

随着大型目录(240k产品),你肯定会有你的公平份额的产品营业额,因此,URL的变化,随后,许多404的。

FPC无效与清洁

目前 – 默认情况下 – FPC的行为是清除缓存上的变化,而不是仅仅使缓存条目无效。我们编写了一个扩展来改变EE商店的这种行为,以完成您所需的功能。

这里有一个快速补丁,让你了解如何解决你的问题。

app/code/core/Enterprise/PageCache/etc/config.xml
index 6a56a80..85ebc92 100644
--- app/code/core/Enterprise/PageCache/etc/config.xml
+++ app/code/core/Enterprise/PageCache/etc/config.xml
@@ -139,7 +139,7 @@
             <observers>
                 <enterprise_pagecache>
                     <class>enterprise_pagecache/observer</class>
-                    <method>cleanCache</method>
+                    <method>invalidateCache</method>
                 </enterprise_pagecache>
             </observers>
         </catalogrule_after_apply>

不要运行爬虫

如果你有足够的足迹 – 我们不建议运行抓取工具,它会产生不必要的负载。浏览网站的人/漫游器/抓取工具应该保持缓存准备就绪。

但要回答你的问题,如果你查看上面提到的配置文件 – 你会看到为爬行浏览窗口定义的cron时间表。

如果你能买得起陈旧的内容

最终,如果你有足够的内存。您可以从增加FPC中存储的内容的TTL中获益 – 以使您的缓存数据保持更长时间。

./app/etc/local.xml中的<full_page_cache>标签中,只需定义

<lifetimelimit>86400</lifetimelimit>

寿命是以秒为单位定义的。您需要在内容新鲜度,性能和实际可用的存储空间量之间取得平衡。

为什么你在EE上使用第三方缓存扩展

你为FPC支付额外费用 – 这让我很难说,这是非常好的。那么,为什么你要在第一线上运行第三方替代品。去掉它。

这样说吧。如果您的汽车运行不良 – 您是否只需在引导装置中添加另一台引擎来进行补偿;或者只是修理已经在那里的引擎?

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/1243.html,转载请务必附带本地址声明。