预热Magento Enterprise全页缓存
-
16-10-2019 - |
题
Magento Enterprise全页缓存的性能优势是众所周知的。可能还不那么众所周知的是,要实现这一目标的全部利益,它必须是完全人口组成的,尤其是在您只有几页的大型产品集中,因此可以利用有机交通足够快速。
Magento包括一个内置的Cronjob,可以在清晨爬行该站点并在FPC上加热。
我已经看到和听说过,清晨工作需要花费太长时间,阻止其他工作跑步而引起的问题,并想知道其他人使用或建议使用什么来做到这一点。我有几个想法:
- 将Shell脚本汇总到生成的SiteMap文件中的每个页面。
- 使用单独的crontab条目和一个简短的PHP脚本来引导Magento并直接执行轨道过程。
欢迎任何想法和/或经验!
解决方案
您可以使用 围城 结合 sitemap.xml
文件,喜欢 magespeedTest 做。
#categories
curl http://yourmagentostore.com/sitemap.xml | sed 's/\<url\>/\<url\>\n/g' | grep 0.5 | sed 's/.*loc>\(.*\)<\/loc.*/\1/g' > urls.txt
#products
curl http://yourmagentostore.com/sitemap.xml | sed 's/\<url\>/\<url\>\n/g' | grep 1.0 | sed 's/.*loc>\(.*\)<\/loc.*/\1/g' >> urls.txt
然后运行
siege -i -c 1 -t 7200s -f urls.txt
内容来自 这里.
其他提示
我们只是没有 - 一点。曾经。我们会一遍又一遍地说
缓存!=性能
您的网站 需要 在不添加FPC的情况下快速(或为此事实)。总是会有一个时间未启动内容的时间(您上面的情况)。
在卸载的商店中,使用FPC的页面加载时间不应该比非FPC更令人印象深刻。 Magento非常幸福 < 400ms
标准缓存(类别/产品/搜索页面)上的页面加载时间。 FPC会将其降低到 < 80ms
- 但带有警告。
- 股票/价格信息已过时,直到无效或TTL到期
新项目/更多相关搜索已过时,直到无效或TTL到期
等等
为什么依赖FPC(或Varnish)是个坏主意
如果您想不断确保手动启动缓存,则可能有一些原因
- 您没有足够的自然脚步来保持缓存 (请参阅“ FPC有用的地方”)
- 没有他们,您的网站太慢了
你不能缓存一切
如果您仅使用5个类别的商店,则嵌套了2个级别,5个可过滤属性,5个属性选项和1000个产品;那是 很多 可能的组合。
25个选项可供选择,连续选择5次 - 我不是统计学家, ,但我知道那是...(假设属性选项的数量并不能完全减少)
25 possible URLs on the first selection
20 possible URLs on the second selection
15 possible URLs on the third selection
10 possible URLs on the fourth selection
5 possible URLs on the fifth selection
5^5 = 3,125 possible combinations (for top level categories)
5^4 = 625 possible combinations (for 2nd level categories)
好的,上面的情况并不是我想象的,在3次点击之内 - 可用产品的数量将足以减少以供客户找到其产品。所以即使是...
25 possible URLs on the first selection
10 possible URLs on the second selection
3 possible URLs on the third selection
5^3 = 125 possible URL combinations
然后以5个类别为单位,即625个URL。在此阶段,我们正在谈论一个很小的目录,并且完全忽略了所有产品URL。
如果您有嵌套类别,我们也不会考虑 is_anchor
在上面,它将指数增长。
因此,要爬行书页 - 您要么希望您的页面加载时间良好且一开始很低,因此这是一个快速轻量级的过程(因此击败了爬网的目的),或者您有在TTL到期之前,足够的时间可以完成。
如果您的页面的页面加载时间为0.4,并且您有一个8核CPU,则...
625 * 0.4 = 250 / 8 = 31 seconds
0.5分钟,还不错 - 但让我想象您有2页的加载时间
625 * 2 = 1250 / 8 = 156 seconds
但是,如果您采取了最大可能的情况
3,750 * 2 = 7,500 / 8 = 937 seconds ~ 15 minutes
因此,这就是您的生产服务器,15分钟以下100%的CPU负载。您将与所需的TTL成比例地降低爬网速度。
因此,如果您希望内容具有3600s TTL,则爬网可能会慢4倍 - 即。只有25%的CPU专用于爬网。这是很多资源,只是为了保持类别内容的准备 - 我们甚至在此阶段都没有考虑到产品,搜索词或其他商店视图
实际上,仅查看巨大的组合大小 catalog_url_rewrites
表(甚至没有从分层导航中考虑参数中的问题)将有一个想法,即您可以结束多少个URL需要爬网。
每家商店肯定会有所不同,但是我想回家的是,将网站爬上Prime FPC并不实际。 只需确保您的商店从.
FPC有用的地方
FPC的好处是在一家大量装载的商店中发挥作用 - 您确实有很高的交通流量,并且缓存自然而然地被脚落下而不断地启动。
然后,FPC通过减少通常要求的内容的基础架构开销来发挥作用 - 减少对Magento后端的重复呼叫。
因此,我们发现,当您拥有非常高的流量水平时,FPC非常适合部署 - 不要减少页面加载时间 - 而是减少资源使用情况。
谁在乎,我仍然想爬行
好吧,那你有两个选择
- 从模板爬网(例如站点地图)
- 提取链接逐页,每个页面爬网
而且有很多公用事业要做,这是我知道的
- 法师浪潮
- httrack
- 蔬菜
- Sphider
- crawler4j
使用法师浪潮
您可以很容易地使用法师 - 浪漫主义者爬行,首先下载它
wget http://sys.sonassi.com/mage-perftest (64bit) OR
wget http://sys.sonassi.com/mage-perftest-i386 (32bit)
chmod +x http://sys.sonassi.com/mage-perftest*
然后使用Magento Sitemap来定义爬网过程(您可以通过制作任何URL的站点地图来自定义此,前提是URL包裹在 <loc></loc>
标签)。以下命令将读取SiteMap文件中的所有URL,然后在1440分钟(1天)的过程中爬网(仅PHP)URL。如果服务器超过20%的CPU或平均负载2-爬网将暂时暂停。
./mage-perftest -u www.example.com -s www.example.com/sitemap.xml -r auto -b -d 1440 -z -a 20 -l 2
如果您有1000个URL,则在1天内爬行,那将是大约。 1要求每86秒(s)〜目标0.011 rps
这些天,我将全力以赴地写一篇博客文章,但与此同时 wfpc
.
测试性能
您可以测试Magento网站的性能
./wfpc -t http://mymagentosite.com/sitemap.xml
Finished testing your Magento site performance
Total download time (in seconds) : 5.0269110202789
Total download time (formatted) : 0:0:5.026
Average page time (in milliseconds): 502.69110202789
FPC变暖
您可以加热FPC,它将击中SiteMap.xml中的每个URL。
./wfpc -w http://mymagentosite.com/sitemap.xml
您还可以在请求之间延迟延迟,这是请求之间的1秒钟延迟。
./wfpc -w -d=1 http://mymagentosite.com/sitemap.xml
测试模式仅随机命中10个URL,因此,一旦您加热了FPC,就可以运行测试模式以找出FPC产生的差异!
想法
就我个人而言,我认为一个温暖的人是有意义的...在一个约40页的小网站上,下载时间大约将FPC切成一半。在一个使用lesti_fpc的近40,000种产品的大型网站上,将APCU用作后端,我将使用超过200MB的缓存使用,坦率地说,这在8GB生产服务器上没有。