1k至10k网站/商店的性能问题


9

当网站/商店的数量超过1k,并且我的目标是大约1万时,我试图找到一种提高Magento性能的方法。这里有一些问题;任何提示/帮助都非常欢迎!

  1. 添加新网站/商店的速度很慢;
    我在Mage_Core_Model_Abstract的_afterSave()中的$ this-> cleanModelCache()注释掉了,情况似乎更好,但随着网站/商店数量的增加,它变得越来越慢。而且我不知道这会在将来影响整个系统。

  2. api通话速度变慢。
    主要过程之一是下订单。我的定制模型通过处理一些数据来处理它,并且基本上使用了sales / quote模型和sales / service_quote模型。该过程从Oauth开始。当网站/商店数量增加时,Oauth和下订单都需要更长的时间,并且内存消耗似乎更大。这与Mage加载配置xml有关,并且随着网站数量的增加,配置数据变得越来越大这一事实吗?

  3. 打开n98-magerun dev:console需要更长的时间;不知道原因。

  4. 从管理面板保存配置需要更长的时间;不知道如何改善它。

是否可以重构Magento生成和加载配置数据的方式以降低其内存消耗?这是导致我的情况出现性能问题的因素之一吗?

当前的Magento实例:版本= Magento EE 1.14.2.4;
开启配置缓存;其他缓存关闭;
使用Mysql 5.6和MongoDB(用于catalog_category_entity,catalog_product_entity,core_website);
网站数量=商店数量=观看次数= 1024;
产品数量= 4501;

谢谢大家!


2
为什么magento支持无法帮助您???
MagenX

我如何从他们那里获得帮助?我是社区的新手..谢谢!
Jack.W

1
您拥有企业版,不确定从哪里获得,但是如果背后没有magento支持,那只会浪费金钱和时间。您必须将它们击中以使它们像兔子一样帮助您运行。有企业版有什么意义???
MagenX

1
但您查询的明显答案是-具有独立数据库的独立magento商店,例如每10-20个商店的批次...
MagenX

嗯,对了。我要问老板这个帐户。哈哈。
Jack.W

Answers:


3

它变慢的原因之一是因为每个商店的配置都从/ config / websites和/ config / global复制,并且这样做的代码效率最低。任何设置更改最终都可能导致数十分钟(如果不是数小时)的时间降低性能和吞吐量。从根本上讲,使它变得更有效率将意味着Ben Marks将跟随您……而不是一个好的方法。

如果您要走这条路,最简单的方法是安装1万个Magento,并使用某种代理将请求委托给相应的网站。虽然这当然取决于您的实际用例。

[添加]

根据使用情况,您可能可以将类别用作伪存储。从技术上讲,您可以使用布局XML更改每个商店的主题。但随后您将遇到结帐的限制。所有商店都需要共享结帐。

无论哪种方式,都可以实现1万个Magento商店的实现,因为这并非不可能。但是,无论选择哪种方式,这都是一条艰难的道路。


嗨,凯文,谢谢您的回复!是的,如果我没记错的话,我会看到更新配置树的代码,该代码是loadToXml()。我的想法是;您说修改它不是一个好主意吗?您是本·马克(Ben Marks)跟我来,这是什么意思?另外,似乎每个到Magento的http请求最终都会加载配置树,对吗?有什么办法可以缩小它的大小吗?我可能应该考虑获取1万个Magento实例...关于需要多少资源的任何想法?非常感谢凯文!
Jack.W

但是安装10k Magento意味着10k mysql实例对吗?我不知道如何执行此操作,或者这是个好主意
。–

1
不,这意味着拥有10k mysql数据库,但所有10k都可以在单个mysql实例中。
基督徒

1
您之后的“ Ben Marks”是对此camo.githubusercontent.com/…
Kevin Schroeder

1
10k Magento安装意味着10k MySQL数据库,但是这种数据库会散布开来。脚本化部署10k个单个Magento安装要比使现有的核心代码与10k个存储一起工作要容易得多。
凯文·施罗德2016年

1

您可以尝试破解核心并启用网站缓存拆分。您可以尝试修改数据库并将配置信息存储在内存中。您可以尝试用更智能的方式替换配置缓存-例如说动态地获取覆盖数据时,从xml文件中缓存信息(这些文件是静态的并且适用于所有网站和商店)。

我是服务器专家,所以我会处理数据库问题。特别是因为这样做是微不足道的。

如果您可以控制数据库服务器:将core_config_data表重命名为core_config_data_offline使用MEMORY存储引擎http://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html创建一个新的core_config_data表。 将所有数据从core_config_data_offline复制到core_config_data

设置一个cron作业以检查core_config_data是否存在,如果确实将所有数据从那里复制到core_config_data_offline。如果没有,请创建它并将所有内容从core_config_data_offline复制到core_config_data

关闭配置缓存。启用配置高速缓存后,只有在第一次从数据库中读取配置数据时,性能才会得到提高-之后,配置数据将进入高速缓存中,您将遭受痛苦。不利的一面是,不再缓存xml文件,因此您将反序列化大量配置数据的性​​能损失换成了解析一堆xml文件的性能损失。

您可能还想尝试更改Mage / Core / Model / Config.php文件并启用各个网站缓存。默认情况下,每个商店特定的配置数据都单独缓存。所有网站配置数据都缓存在一个对象中。

请注意,这仅用于配置覆盖[管理员设置]。因此,如果您在商店级别进行了所有配置更改,那么您已经设置的更改。如果您使用“从网站继承”并在站点级别对商店的大多数特定配置进行更改-则缓存将包含每个网站。通过拆分,可以更好地进行拆分。受保护的$ _cacheSections = array('admin'=> 0,'adminhtml'=> 0,'crontab'=> 0,'install'=> 0,'stores'=> 1,'websites'=> 0);

protected $_cacheSections = array(
    'admin'     => 0,
    'adminhtml' => 0,
    'crontab'   => 0,
    'install'   => 0,
    'stores'    => 1,
    'websites'  => 1
); 

嗨,加里,谢谢您这么有用的回复!我有一些问题:1)根据我的观察,即使有超过1000个网站/商店,数据库查询也不是问题;因此,如果是这样,使用内存存储是否仍会有所帮助?2)我不知道它是否正确,但是配置缓存似乎只存储系统和模块信息;那么它与网站/商店配置有关吗?3)magento是否可以通过http请求识别特定的商店/网站ID,从而仅加载相应的配置文件?非常感谢加里!
Jack.W

2
这些建议并未解决OP注意到的问题。关闭配置缓存将最终杀死系统。这将导致Magento加载所有配置文件,合并它们,然后合并所有/ global,然后合并所有/ websites,然后将所有这些合并到每个/ stores节点中。对于每个请求都会发生这种情况。如果使用1万个站点,则每个请求的挂钟时间可能只有几分钟。
凯文·施罗德

嘿凯文,谢谢你的答复。实际上,我正计划将core_config_data表移至内存中,为系统和模块配置启用缓存,停止将core_config_data合并到配置树中,并使读取此部分数据的函数直接从数据库中查询。你怎么看?
Jack.W

1
问题不在于core_config_data。问题是商店配置是从/ websites合并的,而/ websites是从XML的/ global合并的。数据库将是完美的。由于配置合并,令人讨厌的是PHP。在您的调试器步骤中,通过Mage_Core_Model_Resource_Config :: loadToXml特别注意第110行及其后
Kevin Schroeder

1
现在回到我的内存表。缓存数据意味着将其存储在可以快速访问的位置。Magento将配置数据缓存到php序列化的对象中-如果您的配置数据很大,则意味着PHP必须为每个请求反序列化大量数据。如果您知道如何使用xdebug,请分析一些较慢的页面加载,并查看运行反序列化功能所花费的时间:php.net/manual/en/function.unserialize.php- 如果它很大[超过100毫秒],则“缓存”配置破坏了系统。
加里·莫特
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.