Save 37% off PRO during our Black Friday Sale! »

PHPerがISUCON11にチャレンジした時のあれこれ / ISUCON11 Challenge with PHPer

PHPerがISUCON11にチャレンジした時のあれこれ / ISUCON11 Challenge with PHPer

E41c91eb3efe7a796b8ae20c51a07f06?s=128

Takuya Obara (barbara)

October 03, 2021
Tweet

Transcript

  1. PHPer が ISUCON11 に チャレンジした時のあれこれ 2021/10/03 PHP Conference Japan 2021

    #phpcon2021 @takoba
  2. 誰? takoba / ばーばら 🌹 🏢 コネヒト株式会社 󰳕 Webアプリケーション /

    PHP / ちょっとReact / たまにUXデザイン 🏓 インターネット / 音楽 / カレーライス / 銭湯 / Jリーグ / ポッドキャスト @takoba @takoba_
  3. [PR]会社紹介 「あなたの家族像が実現できる社会をつくる」というビジョンを掲げ、 ママの3人に1人(※) が利用する「ママリ」などを運営しています。 ※「ママリ」で2019年に出産予定と設定したユーザー数と、厚生労働省発表「人口動態統計」の出生数から算出

  4. [PR]会社紹介 「あなたの家族像が実現できる社会をつくる」というビジョンを掲げ、 ママの3人に1人(※) が利用する「ママリ」などを運営しています。 ※「ママリ」で2019年に出産予定と設定したユーザー数と、厚生労働省発表「人口動態統計」の出生数から算出 「ママリ」は主にサーバーサイドが CakePHP 3-4 で書かれています! (ご興味のある方は

    Twitter: @takoba_ まで 💌 )
  5. ISUCON とは? 前提

  6. https://isucon.net/

  7. いいかんじにスピードアップコンテスト ( Web アプリケーションのパフォーマンス向上を競う)

  8. None
  9. 今年で11回目、約600チーム参加、 優勝賞金100万円のなかなか規模のでかいコンテストです

  10. 2021年8月21日 朝 ISUCON11 予選当日

  11. ISUCON11 予選に参加しました

  12. うおおおおおおおおおお おおおおおおおおおおお おおおおおおおおおおお おおおおおおおおおおお

  13. 8時間後 2021年8月21日 夕方

  14. 惨敗しました (スコア: 1,000点 / 428位タイ)

  15. https://commons.nicovideo.jp/material/nc109721

  16. というのは冗談で、 冷静にふりかえりします

  17. PHPer が参加してみてどうだったか 感想

  18. ISUCON は参考実装が選べます。 Go / Ruby / Python / Node.js /

    Perl / Rust / PHP
  19. 我々は、当然 PHP を選びました。

  20. だけど...

  21. 結論、PHPあんま関係ねえ!

  22. 詳しく掘り下げていきます

  23. • PHP 参考実装のアプリケーションは Slim Framework で書かれている ◦ 薄くて一通り読める ◦ アプリのコアとなる

    app/routes.php は1,800行くらい ▪ アクションメソッドがごっそり集中している ▪ app/routes.php の各種メソッドの実装で、エラーの受け取り方とかが なんとなく Go っぽいかんじに書かれてること以外は特に... • 実行環境は nginx + php-fpm + MariaDB ◦ 特筆すべきことは特にないかな(いまどきのナウい構成) ISUCON で PHP に関係するところ
  24. None
  25. • 「推測するな、計測せよ」(cf. ISUCON 事前講習2021 座学 ) ◦ e.g. CPU /

    memory /process の状態を htop などで探る ◦ e.e. nginxのアクセスログを解析してボトルネックを探る ▪ alp とかを使って、どこにアクセスが集中しているかを集計する ◦ e.g. MariaDB(ほぼMySQL) の slow-query.log を解析して改善計画を練る ▪ cf. スローログの集計に便利な「pt-query-digest」を使ってみよう | Think IT(シンクイット) • 実際に使うときは matsuu/docker-pt-query-digest を使うと便利 ▪ slow-query の改善に関しては 本カンファレンスの @mamy1326 の セッション がとても参考になった〜〜 ISUCON の勝負どころはアプリだけにあらず
  26. • 「推測するな、計測せよ」(20秒ぶり2回目) ◦ e.g. アプリケーションをプロファイリングしてボトルネックを探る ▪ APM(Application Performance Monitoring)を活用したいけど... •

    e.g. New Relic APM, Tideways XHProf etc. ◦ APM、どれもだいたい有料なんですよね... ▪ ISUCON11 では Sponsored してくれて無料で使えた 🙌 • 本家 XHProf は PHP7 以上に公式で対応してない 😢 ▪ PHP8 に対応したプロファイリングは 本カンファレンスでの @seike460 によるセッション がめちゃ詳しかった! • cf . PHP8のプロファイリングにXdebug3とWebgrindを使う - Fusic Tech Blog ISUCONの勝負どころはアプリだけにあらず
  27. • 「推測するな、計測せよ」 (20秒ぶり3回目) ◦ 意味がないわけじゃないけど、ボトルネックをシューティングしなくちゃ スコア(=パフォーマンス)に影響してこない ◦ 限られた時間の中で、どのボトルネックをシューティングすべきかが肝 ▪ アプリの問題を見つけてもボトルネックパズルの中の一部に過ぎない

    • e.g. N+1問題 ▪ アプリケーションの問題以上にトラフィックの問題が大きかったり ▪ そのへんを解決してようやくN+1を解決したのが効いてくるかも • 結局そこまで辿り着けずに終わってしまった... 😭 N+1問題を解決したぜドヤァがあまり意味をなさない
  28. • これも 事前講習 で言われてたけど「マニュアル読むの大事」 ◦ 前提を理解しないとアプリもトラフィックもDBも特徴掴めない ▪ 今回は ISUCONDITION というイスの調子を記録するサービス(?)

    ▪ 各イスから status が秒単位で大量に送られてくる、という設定 • どのエンドポイントに集中するのか?みたいなシナリオをイメー ジすると、自ずとボトルネック候補が絞られてくる ◦ マニュアル無視すると、結局はどこがボトルネックか特定しづらい 「マニュアル読むの大事」
  29. というわけで、

  30. 結論、PHPあんま関係ねえ!

  31. PHPより前に解決することがある (今回は特に、序盤のボトルネックがインフラ寄りだった感)

  32. つまりは、Webアプリケーションエンジニアの総合力が問われるので、 ISUCON 参加はめちゃくちゃ経験値になるはず 💪

  33. というわけで、みんな来年も ISUCON 参加しような!! 🤝 (練習問題やるだけでも力になります)

  34. 個人的には PHPer の参加を増やして、 PHP 参考実装を継続してほしい…!🙏(切実)

  35. 終 制作・著作

  36. • Slim Framework • ISUCON 事前講習2021 座学 • isucon/isucon11-qualify: ISUCON11

    予選 (ISUCONDITION) • htopコマンドで覚えておきたい使い方11個 | 俺的備忘録 〜なんかいろいろ〜 • alpの使い方(基本編) - Zenn • スローログの集計に便利な「pt-query-digest」を使ってみよう | Think IT(シ ンクイット) ◦ matsuu/docker-pt-query-digest: Dockerfile for pt-query-digest(Percona Toolkit) • PHPer が知るべき MySQL クエリチューニング/What PHPers Need to Know about MySQL Query Tuning - Speaker Deck 参考文献
  37. • New Relic APM | サービス紹介 | New Relic(ニューレリック) •

    XHProf for PHP7 – Tideways • PHPWebアプリケーションパフォーマンスチューニングの勘所〜なぜアプリケー ションは速くなるのか〜 / Why PHP Applications are Faster - Speaker Deck 参考文献