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. PHPer が ISUCON11 に
    チャレンジした時のあれこれ
    2021/10/03 PHP Conference Japan 2021 #phpcon2021
    @takoba

    View Slide

  2. 誰?
    takoba / ばーばら 🌹
    🏢 コネヒト株式会社
    󰳕 Webアプリケーション / PHP / ちょっとReact / たまにUXデザイン
    🏓 インターネット / 音楽 / カレーライス / 銭湯 / Jリーグ / ポッドキャスト
    @takoba @takoba_

    View Slide

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

    View Slide

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

    View Slide

  5. ISUCON とは?
    前提

    View Slide

  6. https://isucon.net/

    View Slide

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

    View Slide

  8. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. だけど...

    View Slide

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

    View Slide

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

    View Slide

  23. ● PHP 参考実装のアプリケーションは Slim Framework で書かれている
    ○ 薄くて一通り読める
    ○ アプリのコアとなる app/routes.php は1,800行くらい
    ■ アクションメソッドがごっそり集中している
    ■ app/routes.php の各種メソッドの実装で、エラーの受け取り方とかが
    なんとなく Go っぽいかんじに書かれてること以外は特に...
    ● 実行環境は nginx + php-fpm + MariaDB
    ○ 特筆すべきことは特にないかな(いまどきのナウい構成)
    ISUCON で PHP に関係するところ

    View Slide

  24. View Slide

  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 の勝負どころはアプリだけにあらず

    View Slide

  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の勝負どころはアプリだけにあらず

    View Slide

  27. ● 「推測するな、計測せよ」 (20秒ぶり3回目)
    ○ 意味がないわけじゃないけど、ボトルネックをシューティングしなくちゃ
    スコア(=パフォーマンス)に影響してこない
    ○ 限られた時間の中で、どのボトルネックをシューティングすべきかが肝
    ■ アプリの問題を見つけてもボトルネックパズルの中の一部に過ぎない
    ● e.g. N+1問題
    ■ アプリケーションの問題以上にトラフィックの問題が大きかったり
    ■ そのへんを解決してようやくN+1を解決したのが効いてくるかも
    ● 結局そこまで辿り着けずに終わってしまった... 😭
    N+1問題を解決したぜドヤァがあまり意味をなさない

    View Slide

  28. ● これも 事前講習 で言われてたけど「マニュアル読むの大事」
    ○ 前提を理解しないとアプリもトラフィックもDBも特徴掴めない
    ■ 今回は ISUCONDITION というイスの調子を記録するサービス(?)
    ■ 各イスから status が秒単位で大量に送られてくる、という設定
    ● どのエンドポイントに集中するのか?みたいなシナリオをイメー
    ジすると、自ずとボトルネック候補が絞られてくる
    ○ マニュアル無視すると、結局はどこがボトルネックか特定しづらい
    「マニュアル読むの大事」

    View Slide

  29. というわけで、

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide


  35. 制作・著作

    View Slide

  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
    参考文献

    View Slide

  37. ● New Relic APM | サービス紹介 | New Relic(ニューレリック)
    ● XHProf for PHP7 – Tideways
    ● PHPWebアプリケーションパフォーマンスチューニングの勘所〜なぜアプリケー
    ションは速くなるのか〜 / Why PHP Applications are Faster - Speaker Deck
    参考文献

    View Slide