Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Takuya Obara (barbara)

October 03, 2021
Tweet

More Decks by Takuya Obara (barbara)

Other Decks in Programming

Transcript

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

    PHP / ちょっとReact / たまにUXデザイン 🏓 インターネット / 音楽 / カレーライス / 銭湯 / Jリーグ / ポッドキャスト @takoba @takoba_
  2. • PHP 参考実装のアプリケーションは Slim Framework で書かれている ◦ 薄くて一通り読める ◦ アプリのコアとなる

    app/routes.php は1,800行くらい ▪ アクションメソッドがごっそり集中している ▪ app/routes.php の各種メソッドの実装で、エラーの受け取り方とかが なんとなく Go っぽいかんじに書かれてること以外は特に... • 実行環境は nginx + php-fpm + MariaDB ◦ 特筆すべきことは特にないかな(いまどきのナウい構成) ISUCON で PHP に関係するところ
  3. • 「推測するな、計測せよ」(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 の勝負どころはアプリだけにあらず
  4. • 「推測するな、計測せよ」(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の勝負どころはアプリだけにあらず
  5. • 「推測するな、計測せよ」 (20秒ぶり3回目) ◦ 意味がないわけじゃないけど、ボトルネックをシューティングしなくちゃ スコア(=パフォーマンス)に影響してこない ◦ 限られた時間の中で、どのボトルネックをシューティングすべきかが肝 ▪ アプリの問題を見つけてもボトルネックパズルの中の一部に過ぎない

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

    ▪ 各イスから status が秒単位で大量に送られてくる、という設定 • どのエンドポイントに集中するのか?みたいなシナリオをイメー ジすると、自ずとボトルネック候補が絞られてくる ◦ マニュアル無視すると、結局はどこがボトルネックか特定しづらい 「マニュアル読むの大事」
  7. • 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 参考文献
  8. • New Relic APM | サービス紹介 | New Relic(ニューレリック) •

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