1000〜10,000のWebサイト/ストアのパフォーマンスの問題


9

Webサイト/ストアの数が1kを超え、私の目標が約10kである場合、Magentoのパフォーマンスを改善する方法を見つけようとしています。ここにいくつかの質問があります。ヒント/ヘルプは大歓迎です!

  1. 新しいWebサイト/ストアの追加には時間がかかります。
    Mage_Core_Model_Abstractの_afterSave()の$ this-> cleanModelCache()をコメントアウトしました。状況は改善されたように見えますが、Webサイト/ストアの数が増えるにつれて遅くなっています。そして、これが将来システム全体にどのような影響を与えるかわかりません。

  2. API呼び出しが遅くなります。
    主なプロセスの1つは注文を出すことです。私のカスタマイズしたモデルは、一部のデータを処理し、基本的にはsales / quoteモデルとsales / service_quoteモデルを使用して処理します。プロセスはOauthから始まります。ウェブサイト/ストアの数が増えると、Oauthと注文の両方に時間がかかり、メモリ消費量が大きくなります。これはMageがconfig xmlをロードすることと関係がありますか、そしてwebサイトの数が増えるとconfigデータが大きくなるという事実はありますか?

  3. n98-magerun dev:consoleを開くのに時間がかかります。その原因はわかりません。

  4. 管理パネルから設定を保存すると時間がかかります。それを改善する方法がわからない。

Magentoが構成データを生成してロードする方法を再構築して、メモリ消費量を減らすことは可能ですか?これは、私の状況でパフォーマンスの問題を引き起こす要因の1つですか?

現在のMagentoインスタンス:バージョン= Magento EE 1.14.2.4;
設定キャッシュがオンです。他のキャッシュオフ;
Mysql 5.6とMongoDBを使用する(catalog_category_entity、catalog_product_entity、core_websiteの場合);
ウェブサイトの数=店舗の数=ビューの数= 1024;
製品数= 4501;

よろしくお願いします!


2
なぜmagentoのサポートはあなたを助けることができないのですか?
MagenX 2016年

どうすれば彼らから助けを得ることができますか?私はコミュニティに新しいです。ありがとう!
Jack.W 2016年

1
あなたはエンタープライズ版を持っていますが、どこで入手できるかはわかりませんが、その背後にmagentoサポートがない場合は、お金と時間を無駄にしてしまいます。ウサギのように走らせるには、ボールを打つ必要があります。エンタープライズ版を持っていることのポイントは何ですか???
MagenX 2016年

1
しかし、クエリに対する明確な答えは
-10-20

あ、そうだね。上司にアカウントを頼むよ。
Jack.W

回答:


3

遅くなる理由の1つは、各ストアの構成が/ config / websitesおよび/ config / globalから複製され、それを行うためのコードが少なくとも効率的でないためです。設定を変更すると、パフォーマンスとスループットが低下する場合があります。それをより効率的にすることは、基本的にベン・マークスがあなたの後に来ることを意味します...そして、良い方法ではありません。

このルートを使用する場合、最も簡単な方法は、1万のMagentoをインストールし、適切なWebサイトにリクエストを委任するブローカーのようなものを用意することです。もちろん、実際の使用例によって異なります。

【追加】

ユースケースによっては、カテゴリーを疑似ストアとして使用できる場合があります。技術的には、レイアウトXMLを使用して店舗ごとのテーマを変更できます。しかし、チェックアウトの制限にぶつかります。すべての店舗がチェックアウトを共有する必要があります。

いずれにせよ、Magentoの10kストアは不可能ではありません。しかし、それはあなたがどんな道を選んでも難しい道になるでしょう。


こんにちはケビン、返信ありがとうございます!はい、設定ツリーを更新するコードが表示されます。これは、私が間違っていなければloadToXml()です。私の考えは、そして、あなたはそれを修正するのは良い考えではないと言いましたか?ベンマークスが私の後に来るとはどういう意味ですか?また、Magentoに送信される各HTTPリクエストは最終的に設定ツリーをロードするようですが、それは正しいですか?サイズを縮小する方法はありますか?おそらく10kのMagentoインスタンスを取得することを考える必要があります...どれだけのリソースが必要になるかについての考えはありますか?ケビンさん、ありがとうございました!
Jack.W 2016年

しかし、1万のMagentoインストールがあるということは、1万のmysqlインスタンスが正しいことを意味しますか?..私はこれを行う方法が分からない、またはそれは良い考えである場合
Jack.W

1
いいえ、それは10kのmysqlデータベースを持つことを意味しますが、それらすべての10kが単一のmysqlインスタンスに存在する可能性があります。
クリスチャン

1
あなたの後に来る「ベンマーク
Kevin Schroeder

1
10k Magentoのインストールは、10000 MySQLデータベースを意味しますが、それは広がっています。既存のコアコードを1万のストアで機能させるよりも、1万のMagentoインストールをスクリプトで展開する方がはるかに簡単です。
Kevin Schroeder 2016年

1

コアをハックしてWebサイトのキャッシュ分割を有効にしてみてください。データベースをハッキングして構成情報をメモリに保存してみることができます。オーバーライドデータを動的に取得しながら、構成キャッシュをよりスマートなものに置き換えてみてください。たとえば、xmlファイルからの情報をキャッシュするとします(静的であり、すべてのWebサイトとストアに適用されます)。

私はサーバーの男なので、データベースをいじくり回します。特にそうするのは簡単です。

データベースサーバーを制御できる場合:core_config_dataテーブルの名前をcore_config_data_offlineに変更しますMEMORYストレージエンジンを使用して新しいcore_config_dataテーブルを作成します http://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html すべてのデータを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ファイルを変更して実験し、個々のWebサイトのキャッシュを有効にすることもできます。デフォルトでは、各ストア固有の構成データは個別にキャッシュされます。すべてのWebサイト構成データは1つのオブジェクトにキャッシュされます。

これは、構成の上書き[管理者設定]のためだけのものであることに注意してください。したがって、ストアレベルですべての構成変更を行う場合は、既に設定されています。「ウェブサイトから継承」を使用し、ストア固有の設定変更のほとんどをサイトレベルで行う場合、キャッシュにはすべてのウェブサイトが含まれます。それを分割することで、あなたはそれをよりよく分解することができます。保護された$ _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)私の観察から、1k以上のWebサイト/ストアがあっても、データベースクエリは問題ではありません。その場合は、メモリストレージを使用しても問題が解決しますか?2)正しいかどうかはわかりませんが、構成キャッシュにはシステムとモジュールの情報しか保存されていないようです。それで、それはウェブサイト/ストア構成と関係がありますか?3)magentoがhttpリクエストから特定のストア/ウェブサイトIDを認識し、対応する構成ファイルのみをロードする方法はありますか?ゲイリーさん、ありがとうございました!
Jack.W 2016年

2
これらの推奨事項は、OPが指摘していた問題には対応していません。構成キャッシュをオフにすると、最終的にシステムが強制終了されます。これにより、Magentoはすべての構成ファイルをロードし、それらをマージしてから、/ globalのすべてをマージしてから、/ websitesのすべてをマージして、各/ storesノードにすべてマージします。これは、各リクエストで発生します。1万のサイトでは、リクエストごとに分の数の実時間を見ることができます。
Kevin Schroeder

やあケビン、返事ありがとう。実際、core_config_dataテーブルをメモリに移動し、システムとモジュールの構成のキャッシュを有効にし、core_config_dataが構成ツリーにマージされないようにして、データのこの部分を読み取る関数がデータベースから直接クエリを実行することを計画しています。どう思いますか?
Jack.W

1
問題はcore_config_dataではありません。問題は、XMLの/ globalからマージされた/ websitesからストア構成がマージされることです。データベースは完全に正常です。構成のマージのために人生を嫌うのはPHPです。デバッガーでMage_Core_Model_Resource_Config :: loadToXmlをステップスルーして、110行目以降に特別な注意を払います
Kevin Schroeder

1
さて、私の記憶表に戻りましょう。データのキャッシュとは、すばやくアクセスできる場所にデータを保存することです。Magentoは設定データをphpシリアル化オブジェクトにキャッシュします-設定データが巨大な場合、PHPはリクエストごとに大量のデータを非シリアル化する必要があります。あなたはxdebugのを使用する方法を知っている場合は、アンシリアライズ機能実行に費やされているどのくらいの時間であなたに遅いページが読み込まれ、ルックの一部をプロファイル:php.net/manual/en/function.unserialize.phpを -それは巨大だならば、[100ミリ秒にわたり]構成を「キャッシュ」すると、システムが壊れます。
Gary Mort
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.