ISUCON13 に参加してきました。
チーム名は「ぽよ〜」でメンバーは自分ひとりでした。毎年チームを組んで参加しているので試しにソロで参加したくなったのが背景です。
あと今年は個人スポンサー枠で参加しました。
結果
スコアは6,381で、順位は上から370番目?付近でした
やったこと
- kataribe, pt-query-digest, OpenTelemetry + Cloud Trace を導入
- kataribe の集計結果から重たいエンドポイントのボトルネックを順番につぶしていく
GET /api/user/:userId/statistics
の一部改善- 処理が複雑だったので一旦目についた簡単そうな N+1 を解決した
GET /api/user/:userId/icon
の304実装GET /api/livestream/search
の改善- utils 以下にある関数に N+1 がたくさんあったのでいくつか解決した
POST /api/livestream/*/moderate
の改善- for 文の中で DELETE 文を実行している and 不要な NG ワードに対しても DELETE 文を実行していたのでどっちも直した
- アイコンを Nginx で返す
- ベンチマークを回すと整合性チェックで
アイコン未設定の場合は、NoImage.jpgを返さなければなりません
と怒られて、これを解消できずに諦めた
- ベンチマークを回すと整合性チェックで
- 複数台構成化に挑戦
- とりあえず app と mysql を別のサーバにしようとしたけど時間がなくて諦めた
Host 'ip-192-168-0-11.ap-northeast-1.compute.internal' is not allowed to connect to this MySQL server
というエラーが出て直す時間がないな〜となってた
- とりあえず app と mysql を別のサーバにしようとしたけど時間がなくて諦めた
反省
- 終了直後の配信でインデックス張るだけで1万点超えるって言われてメンタルにきた
- Nginx の config を書くのに時間かかりすぎたし結局できないので、もっと理解を深めておく必要があった
- そもそもだけどやっぱりチームを組んで参加しないと手が回らない...
- 複数台構成にする時間がなかった
- N+1 の解決にだいぶ時間を取られた
感想
- こんいす〜良すぎ、問題設定が神
- 今年は予選決勝形式じゃなくて一発勝負になった影響か例年の予選よりボリュームが多い気がした
- スコアがさばいたリクエストの数じゃなくてスパチャの合計額なのはより実サービスに近い設定で良かった
- DNS がテーマに含まれているのはさくらインターネットぽくてよかった
- https://speakerdeck.com/kazeburo/dns-water-torture-attack-monitoring-and-slo は読んだことあったけど、DNS 周りを触るほど余裕なかった
- TS 実装は hono が使われていてお〜となった
- 同時に
@opentelemetry/instrumentation-express
が使えないなとなった@opentelemetry/instrumentation-http
は動いていたっぽいので、エンドポイントなどの情報は追えた
- 同時に
- TS の実行には tsx が使われていた
今年の ISUCON も楽しむことができました。 特に今年は一人参加だったのでいつもより集中して挑めたと思います。
関係者の方々ありがとうございました。 来年も参加します。