このツイートで書いたとおり、Webサービスの高速化はいろいろやりようがあるということで。
この記事では、WordPress内で発生している通信をUnix Domain Socketにし高速化しました。
変更前と変更後とでベンチマークした結果も載せていますので、参考になるかと。
全体構成で言うと、ここです。
青枠で囲った部分。
WordPress<->mariadbはこちらの記事を参考にさせていただきました。
TCP SocketからUnix Domain Socketに変更することで、3way handshakeがなくなりパフォーマンス改善が期待できます。
その他の改善については、こちらの記事にて整理しています。
変更内容
ベースはこちらを使います。
Nginx <-> WordPress
まずNginx<->WordPressをUnix Domain Socketに。
Nginx側はserverブロックのある/etc/nginx/conf.d/default.confを変更。
-fastcgi_pass wordpress:9000; +fastcgi_pass unix:/var/run/php-fpm.sock;
WordPress側はphp-fpmの設定ファイルを変更します。
/usr/local/etc/php-fpm.d/zz-docker.conf
-listen = 9000 +listen = /var/run/php-fpm.sock
docker-compose.ymlに/var/run/を共有するように設定します。
関係ない部分は省略。
version: '3.1' services: nginx: volumes: - php_socket:/var/run wordpress: - php_socket:/var/run volumes: php_socket:
これでNginxとWordPressとの通信がUnix Domain Socketになりました。
WordPress <-> mariadb
WordPress側はwp-config.phpを変更します。
-define( 'DB_HOST', 'db:3306' ); +define( 'DB_HOST', 'localhost:/var/run/mysqld/mysqld.sock' );
mariadbは既に/var/run/mysqld/mysqld.sockでlistenしています。
そのため、必要なのは/var/run/を共有してWordPressからmysqldのソケットファイルに接続できるようにすることだけです。
version: '3.1' services: db: - php_socket:/var/run volumes: php_socket:
変更前 vs 変更後
ベンチマークで性能を比較。
環境はRaspberry Pi 4で動作中のWordPressを使います。
↓の記事で紹介
計測は以下の仕様で行います。
n=5と少ないかもですが、中央値を使うのでそれなりに傾向はつかめるのではないかと。
・ChromeのDeveloper Toolsに付属しているLightHouseで計測する。 パフォーマンスのみにチェックを入れる。 ・Mobile/Desktopそれぞれ5回ずつ計測し、中央値を採用する。 ・Chromeのシークレットタブでページを開いてから計測する。
変更前
←Mobile Desktop→
変更後
←Mobile Desktop→
Mobileは2ポイント、Desktopは1ポイント上がりました!
ある程度改善をやった後なので、伸び幅が鈍化していますが、改善自体はできています!
終わりに
いかがでしたか。
それほど難しくないので、やって損はないですよ!
Comments