【爆速】WordPressの内部通信をUnix Domain Socketにしてみた【快適】

mysql


このツイートで書いたとおり、Webサービスの高速化はいろいろやりようがあるということで。



この記事では、WordPress内で発生している通信をUnix Domain Socketにし高速化しました。
変更前と変更後とでベンチマークした結果も載せていますので、参考になるかと。

全体構成で言うと、ここです。
 青枠で囲った部分。
WordPress<->mariadbはこちらの記事を参考にさせていただきました。

TCP SocketからUnix Domain Socketに変更することで、3way handshakeがなくなりパフォーマンス改善が期待できます。



その他の改善については、こちらの記事にて整理しています。

変更内容

ベースはこちらを使います。

GitHub - kurofuku/wordpress-container
Contribute to kurofuku/wordpress-container development by creating an account on GitHub.



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

タイトルとURLをコピーしました