ISUCON10 の予選に参加した
unasuke, lime1024 とともにチーム「たんぽぽの上の刺身」として、Ruby 実装で参加した。最終スコアは 1302 点。 明確に役割を決めてはいなかったが、結果として自分は主にインフラ周りをみていた。
今年はリモートで参加したが特に不便は感じなかった。Zoom つなぎっぱなしで、あとは GitHub, Scrapbox, Discord でコミュニケーションをとっていた。思いの外画面共有は一度もしなかった。
やったこと
1 週間くらい前
- 人々と ISUCON8 の予選問題をやりつつ ISUCON 便利ツールについて調べた
当日
開始まで
- 緊張してきたので縄跳びをする
12:20 - 15:00
- マニュアルを読む
- unasuke がデプロイの準備とかしていた
- alp, pt-query-digest, rack-mini-profiler, rack-lineprof, New Relic をいれた
- New Relic は新 UI に慣れないのもあってあんまり使いこなせなかった
- わりと他のツールで確認できる情報で事足りていた
- alp, pt-query-digest の結果は GitHub の Issues に貼っていた
- ブラウザで見れるようにしていなかったので rack-mini-profiler は出番がなかった
- 面倒くさがらずにやったほうがよかったと思う
- New Relic は新 UI に慣れないのもあってあんまり使いこなせなかった
- app サーバを 3 台に増やしてみる
- そんなに効かない
- top を見るととにかく DB がボトルネックになっている
15:00 - 18:00
- とりあえず nginx で bot を弾く
POST /api/{chair,estate}
の N+1 をなおす- nginx の error ログを見ていたら
a client request body is buffered to a temporary file
が出ていたので適当にclient_body_buffer_size
を増やす
18:00 - 21:00
- JOIN していないしテーブルごとに DB わけられそうな気がしてくる
- アプリはそんなに見ていなかったので人々に確認したら lime1024 が即答してきて助かった
- 今回、他の人にアプリをほとんど任せられたのはやりやすかった
- ソシャゲの開発経験がなかったら思いつかなかったかもしれない、ソシャゲはとにかくパーティショニングする
- app (web), chair DB, estate DB の構成にして 720 点
- アプリはそんなに見ていなかったので人々に確認したら lime1024 が即答してきて助かった
- unasuke が app サーバを puma に変更して 840 点
- これそんなに効くと思っていなかった
- アクセスログを見ると bot がいたので再び nginx で弾くようにした
- 多分スコアが低いと出てこないんだと思う
- New Relic とか切ってベンチマークガチャして 1302 点
2 年ぶりの参加で、以前よりは手を動かせたと思う反面、改めてまだまだ力不足であるとも感じた。最近は金の弾丸で殴れることが多くあんまりこういうことをする機会がないのだけれど、日頃からやってないと難しい。あと最近の MySQL 全然追えてなかった、Generated Columns 便利すぎる。