ソフトウェアの推奨事項
Commerce の実稼動インスタンスには、次のソフトウェアが必要です。
- PHP
- Nginx と PHP-FPM
- MySQL
- Elasticsearch または OpenSearch
マルチサーバー環境の場合、またはビジネスの拡大・縮小を計画しているマーチャントの場合は、次の操作をお勧めします。
- Varnish キャッシュ
- セッション用 Redis (2.0.6 以降)
- デフォルトキャッシュとして個別の Redis インスタンスを使用します(ページキャッシュにはこのインスタンスを使用しないでください)。
各タイプのソフトウェアでサポートされるバージョンの詳細については、 システム要件を参照してください。
オペレーティングシステム
オペレーティングシステムの設定と最適化は、他の高負荷 web アプリケーションと比較して、Commerce で同様です。 サーバーが処理する同時接続の数が増えると、使用可能なソケットの数が完全に割り当てられることがあります。 Linux カーネルは、TCP 接続を「再利用」するメカニズムをサポートしている。 このメカニズムを有効にするには、/etc/sysctl.conf
に次の値を設定します。
net.ipv4.tcp_tw_reuse = 1
カーネルパラメータ net.core.somaxconn
は、接続を待っている開いているソケットの最大数を制御します。 この値は 1024 に安全に増やすことができますが、この量を処理するサーバーの機能と相関させる必要があります。 このカーネルパラメーターを有効にするには、/etc/sysctl.conf
に次の値を設定します。
net.core.somaxconn = 1024
PHP
Magentoは PHP 7.3 と 7.4 を完全にサポートしています。リクエスト処理の速度と効率を最大限に高めるために PHP を設定する際に考慮すべき要素はいくつかあります。
PHP 拡張機能
アクティブな PHP 拡張モジュールのリストは、Commerce の機能に必要なものに制限することをお勧めします。
Magento Open SourceとAdobe Commerce:
- ext-bcmath
- ext-ctype
- ext-curl
- ext-dom
- ext-fileinfo
- ext-gd
- ext-hash
- ext-iconv
- ext-intl
- ext-json
- ext-libxml
- ext-mbstring
- ext-openssl
- ext-pcre
- ext-pdo_mysql
- ext-simplexml
- ext-soap
- ext-sockets
- 外部ナトリウム
- ext-tokenizer
- ext-xmlwriter
- ext-xsl
- ext-zip
- lib-libxml
- lib-openssl
また、Adobe Commerceには次の項目が必要です。
- ext-bcmath
- ext-ctype
- ext-curl
- ext-dom
- ext-fileinfo
- ext-gd
- ext-hash
- ext-iconv
- ext-intl
- ext-json
- ext-libxml
- ext-mbstring
- ext-openssl
- ext-pcre
- ext-pdo_mysql
- ext-simplexml
- ext-soap
- ext-sockets
- 外部ナトリウム
- ext-spl
- ext-tokenizer
- ext-xmlwriter
- ext-xsl
- ext-zip
- lib-libxml
- lib-openssl
拡張機能を追加すると、ライブラリの読み込み時間が長くなります。
PHP 設定
データやコードをディスクにダンプせずに、すべての Commerce インスタンスが正常に実行されるようにするには、次のようにメモリ制限を設定します。
memory_limit=1G
デバッグの場合は、この値を 2G に増やします。
Realpath_cache 構成
Commerce のパフォーマンスを向上させるには、php.ini
ファイルで以下の推奨 realpath_cache
設定を追加または更新します。 この設定により、PHP プロセスは、ページが読み込まれるたびにパスを検索する代わりに、ファイルへのパスをキャッシュすることができます。 PHP ドキュメントの パフォーマンスチューニングを参照してください。
realpath_cache_size=10M
realpath_cache_ttl=7200
ByteCode
PHP 7 上で Commerce から最大の速度を得るには、OpCache モジュールを有効にし、適切に設定しなければなりません。 モジュールには、次の設定をお勧めします。
opcache.memory_consumption=512
opcache.max_accelerated_files=60000
opcache.consistency_checks=0
opcache.validate_timestamps=0
opcache.enable_cli=1
opcache のメモリ割り当てを微調整する場合、Magentoのコードベースとすべてのエクステンションのサイズを考慮します。 Magentoのパフォーマンス・チームは、インストールされた拡張機能の平均数に対して opcache に十分な領域を提供するため、前述の例の値をテストに使用します。
低メモリのマシンで、インストールされている拡張機能やカスタマイズの数が少ない場合は、次の設定を使用して同様の結果を得ます。
opcache.memory_consumption=64
opcache.max_accelerated_files=60000
APCU
PHP APCu 拡張モジュールを有効にしそれをサポートするために composer
を設定する を有効にして、パフォーマンスを最大限に高めるための最適化を行うことをお勧めしますこの拡張機能では、開いたファイルの場所をキャッシュするので、ページ、Ajax 呼び出し、エンドポイントを含む Commerce サーバー呼び出しのパフォーマンスが向上します。
apcu.ini
ファイルを編集して、以下を含めます。
extension=apcu.so
[apcu]
apc.enabled = 1
Web サーバー
Magentoは、Nginx および Apache web サーバーを完全にサポートしています。 Commerce には、<magento_home>/nginx.conf.sample
(Nginx)ファイルと <magento_home>.htaccess.sample
(Apache)ファイルで推奨される設定ファイルのサンプルが用意されています。 Nginx サンプルには、パフォーマンスを向上させるための設定が含まれており、再設定をほとんど必要としないように設計されています。 サンプルファイルで定義されている主な設定のベストプラクティスには、次のものが含まれます。
- ブラウザーで静的コンテンツをキャッシュする設定
- PHP のメモリと実行時間の設定
- コンテンツ圧縮設定
また、次に示すように、入力リクエスト処理のスレッドの数を設定する必要があります。
MySQL
このドキュメントでは、各ストアと環境が異な MySQL ので、詳細なチューニング手順は提供しませんが、一般的な推奨事項を作成しておくことはできます。
MySQL 5.7.9 には多くの改善が行われています。MySQL は適切なデフォルト設定で配布されていると確信しています。 最も重要な設定は次のとおりです。
innodb_buffer_pool_instances
innodb_buffer_pool_size
innodb_buffer_pool_instances
と innodb_buffer_pool_size
の組み合わせを指定して、各バッファープールインスタンスが少なくとも 1 GB になるようにします。max_connections
max_connections
パラメーターの値は、アプリケーションサーバーで設定された PHP スレッドの合計数に関連付ける必要があります。 一般的な推奨事項は、小規模の場合は 300、中規模の環境の場合は 1,000 です。innodb_thread_concurrency
innodb_thread_concurrency = 2 * (NumCPUs + NumDisks)
Varnish
Magentoでは、ストアのフルページキャッシュサーバーとして Varnish を使用することを強くお勧めします。 PageCache モジュールはコードベースにまだ存在していますが、開発目的でのみ使用する必要があります。 Varnish と一緒に、または代わりに使用しないでください。
Web 層の前にある別のサーバーに Varnish をインストールします。 すべての受信リクエストを受け入れ、キャッシュされたページコピーを提供する必要があります。 セキュリティで保護されたページで Varnish が効果的に作業できるように、SSL ターミネーションプロキシを Varnish の前に配置できます。 Nginx はこの目的に使用できます。
Commerce は、パフォーマンスのためのすべての推奨設定を含む Varnish (バージョン 4 および 5)のサンプル構成ファイルを配布します。 パフォーマンスの面で最も重要なものは次のとおりです。
- バックエンドのヘルスチェック は、Commerce サーバーをポーリングして、サーバーが適切なタイミングで応答しているかどうかを判断します。
- 猶予モード を使用すると、オブジェクトを有効期間(TTL)の期間を超えてキャッシュに保持し、正常でない場合や新しいコンテンツがまだ取得されていない場合に、この古 Commerce いコンテンツを提供するように Varnish に指示できます。
- セントモード は、設定可能な時間、異常な Commerce サーバーをブラックリストに登録します。 その結果、正常でないバックエンドは、Varnish をロードバランサーとして使用する場合、トラフィックを提供できません。
これらの機能の実装について詳しくは、 詳細 Varnish 設定を参照してください。
アセットのパフォーマンスの最適化
通常、最適なパフォーマンスを得るには、アセット(画像、JS、CSS など)を CDN に保存することをお勧めします。
サイトで多数のロケールをデプロイする必要がなく、サーバーが大部分の顧客と同じ地域にある場合は、CDN を使用する代わりにアセットを Varnish に保存することで、低コストで大幅なパフォーマンスの向上が得られる可能性があります。
アセットを Varnish に保存するには、Commerce for Varnish 5 で生成された default.vcl
ファイルに次の VCL エントリを追加します。
vcl_recv
サブルーチンの PURGE リクエストの if
文の最後に、次を追加します。
# static files are cacheable. remove SSL flag and cookie
if (req.url ~ "^/(pub/)?(media|static)/.*\.(ico|html|css|js|jpg|jpeg|png|gif|tiff|bmp|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)$") {
unset req.http.Https;
unset req.http./* {{ ssl_offloaded_header }} */;
unset req.http.Cookie;
}
vcl_backend_response
サブルーチンで、GET
要求または HEAD
要求の Cookie を設定解除する if
ステートメントを探します。
更新された if
ブロックは次のようになります。
# validate if we need to cache it and prevent from setting cookie
# images, css and js are cacheable by default so we have to remove cookie also
if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) {
unset beresp.http.set-cookie;
if (bereq.url !~ "\.(ico|css|js|jpg|jpeg|png|gif|tiff|bmp|gz|tgz|bz2|tbz|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)(\?|$)") {
set beresp.http.Pragma = "no-cache";
set beresp.http.Expires = "-1";
set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
}
}
サイトをアップグレードしたり、アセットをデプロイまたは更新したりするたびに、Varnish サーバーを再起動して、キャッシュされたアセットをフラッシュします。
キャッシュサーバーとセッションサーバー
Magentoは、Redis、Memcache、filesystem、database など、キャッシュとセッションデータを保存する多くのオプションを提供します。 これらのオプションの一部については、以下で説明します。
単一 Web ノードの設定
1 つの web ノードですべてのトラフィックを処理する予定がある場合、リモート Redis サーバーにキャッシュを配置しても意味がありません。 代わりに、ファイルシステムまたはローカルの Redis サーバーを使用します。 ファイルシステムを使用する場合は、RAM ファイルシステムにマウントされたボリュームにキャッシュフォルダーを配置します。 ローカルの Redis サーバーを使用する場合は、HTTP 経由でデータを交換するのではなく、直接接続にソケットを使用するように Redis を設定することを強くお勧めします。
複数の web ノードの設定
複数の Web ノードを設定する場合は、Redis が最適なオプションです。 パフォーマンスを向上 Commerce せるために大量のデータを能動的にキャッシュするので、web ノードと Redis サーバーの間のネットワークチャネルに注意を払います。 チャネルがリクエスト処理のボトルネックになることを望まない場合。