Pocket

[DigitalOcean][Kubernetes]Nginxコンテナを分離してWordPressのソースコードをGit管理した

センシンロボティクス Advent Calendar 2023 10日目の記事です。

前回のブログで、個人環境(wiki.adachin.me)のWordPressソースコードをGit化し、新たに開発環境構築とNginxコンテナを分離しました。今回はようやく開発環境も整ったので、WordPressをPHP7.4からPHP8.3にバージョンアップしてみました。まずはPHP7と8のパフォーマンス比較について調べてみました。


PHP7と8のパフォーマンス比較

https://www.php.net/releases/8.0/ja.php

https://externals.io/message/116323

Benchmark PHP 8.1 vs PHP 8.0 vs PHP 7.4 vs PHP 7.3 vs PHP 7.0 vs PHP 5.6 vs PHP 5.5

  • JIT コンパイラの導入
    • PHP8ではJIT(Just-In-Time)コンパイラが導入され、コードが実行時に直接ネイティブマシンコードにコンパイルされ、実行速度が向上。
  • 新しい機能と最適化
    • 新しい言語機能や最適化が多数含まれており、コードの実行が効率的に行われ、パフォーマンスが向上。
  • 型付けの改善
    • PHP7からPHP8への移行に伴い、型付けの改善が行われました。型付けに関する新しい機能や最適化が導入され、静的解析が向上。
  • 新しいデータ構造
    • 新しいデータ構造や関数が導入され、コードの効率性が向上。
  • 共有メモリの改善
    • 共有メモリの管理が改善されました。同時実行中のスレッドがメモリーをより効果的に共有でき、パフォーマンスが向上。
  • コード最適化
    • コードの最適化が進められ、コードでの実行速度が向上。

    軽くPHP7と8のパフォーマンス比較を調べてみましたが、そもそもPHP5から7で3倍近く高速化していて、PHP8で約20%高速化してるようです。他の言語に追い抜きそうな勢いでこれはすごい。さて、PHP8からJITが追加されて、プログラムを高速に実行させる機能が導入されました。まずはDockerの開発環境からPHP8にバージョンアップしてみましょう。


    Docker開発環境の修正

    • docker/dev/app/Dockerfile

    • docker/dev/app/php.ini

    • JITが有効になっているのか確認

    開発環境からPHP8にバージョンアップしてみましたが、Dockerfileの変更点はimageのみで、php.iniにJITの設定を追加したくらいでした。また、WordPressのダッシュボード等は特にエラーが出ていなかったのと、記事の更新もできていました。ここで問題ないと判断したので、本番と同じように修正してデプロイしてみたところ…

    「このサイトで重大なエラーが発生しました。」

    開発環境のDBは本番DBをdumpしてrestoreしていないため、本番同等の環境になっていません。なので分からなかった…というオチ。とりあえず、Kubernetesのコンテナをログを見てみると以下のようにエラーログが出ていました。


    PHP8に対応していないプラグイン

    • WP Social Bookmarking Light

    https://ja.wordpress.org/plugins/wp-social-bookmarking-light/

    なんとWP Social Bookmarking Lightという長年愛用していたSNSシェアボタンプラグインが6年前からアップデートされていないという…しかも今はダウンロードできなくなっていました。残念!ということで、代替案として「AddToAny」を利用しました。(誰か開発してくれ!自分か!?)

    • SNS Count Cache

    SNS Count Cache

    SNS Count Cacheも5年前からアップデートされていなかったので、削除しました。(MaruyamaさんPHP8に対応してくれ!)

    これにてアクセスできるようになったので、バージョンアップ完了となりました。


    PHP8 JITの効果

    JITの設定をしてみると、ダッシュボードの速度が1秒早くなりました。ちなみに以下Query Monitor プラグインを利用して、各WordPressのレスポンス速度を可視化してくれるのでオススメです。レスポンスタイムも750msから650ms台に早くなりました。

    • 補足

    PHP 8の新機能(新機能、改善点、およびJITコンパイラー)

    JITを有効にすると、コードはZend VMではなくCPU自体により実行されるため、計算速度が向上します。WordPressなどのウェブアプリのパフォーマンスは、 TTFB、データベースの最適化、HTTPリクエストなどのその他の要素にもよるものです。したがって、WordPressなどのアプリに関しては、PHPの実行速度が大幅に向上することは期待できません。

    あれ…なんで早くなったのかはAPM入れないと分からなそうではある。


    まとめ

    PHP8.3へのバージョンアップの取り組みは開発環境等作っていたので楽でしたが、もう少し本番同等の環境を作るべきでした。今後は継続的にDBをリストアするCI/CDを作りたいと思います。また、PHP8の機能について把握できたのと、そんなに手間がかからなくてよかったです。ちなみにこのブログサーバーはDroplets(EC2的な)でAnsibleで管理しているので、バージョンアップ大変だなーという感じです。やるか分からないですが、コンテナ移行するなら大変ですね..次はNewRelicでモニタリングしてみたのをやります!

    Pocket


    adachin

    1989年生まれのSRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWS/Azureでのインフラ構築、Docker開発環境の提供、Kubernetes保守、インフラコード化、新技術の検証、リファクタリング、セキュリティ強化などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTAで未経験者にインフラのコーチング/コミュニティの運用を実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

    0件のコメント

    コメントを残す

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください