こんにちは
9/19 に行われた ISUCON11 の本選に@masibw くんと@tosa_now くんと一緒にチーム「雑談係」として参加しました。結果は学生 1 位でした!!!!!
予選の記事はこちら。予選は学生枠の 5 位でギリギリ通過でした。あぶね〜〜〜〜〜通過して良かった〜〜〜〜〜〜
やったーーーーーー!!ISUCON学生一位取りました!#isucon pic.twitter.com/7pk9zM3Mfm
— さんぽし/sanposhiho (@sanpo_shiho) September 19, 2021
役割分担
僕は同じように人力 CI/CD 係をしつつ、インフラをいじりながら、メンバーを眺め、応援する係をしていました。
時系列やったこと
他のチームメンバーがなにをやっていたのかはあまり知りません。
競技開始
競技開始と同時に色々ツールを入れました。
予選と同じく、無難に
- alp
- pt-query-digest
- pprof
あたりを使っています
複数台構成
今回もさっさと複数台にしました。
mysql を 1 台、app を 2 台にしました。
アプリケーションのうち、/:courseID/classes/:classID/assignments/export
, /:courseID/classes/:classID/assignments
が重く、また、サーバー内のファイルを操作するため、app の一台をこれらのリクエストを集約し、それら以外をもう一方のサーバーに流すということをしました。
これによって、
- mysql が CPU100%に張り付く
- リクエストを集約した方の app サーバーも CPU が時々 100%近くになり、結構ギリギリ
- それ以外のリクエストを捌いている app サーバーは CPU 的には余裕あり
という状態になりました。
nginx の改善
Cache-Controll など、無難な改善を入れましたがあまり効果が見えませんでした。
スロークエリ改善
ここからは mysql をどうにかしないと次のボトルネックがわからず、インフラ的にはできることが減ったので、キャッシュの実装やスロークエリの改善を手伝ったり、一部実装にも参加したりしていました。が、全体的にあまり効果は見られませんでした。
また、いずれかの改善が原因で点数がベストより数千点低くなっていたので、犯人 commit を探すことをせず、最終的にはほとんどをリバートし、ベストスコアの状態に戻して、終了しました。えらい
これをリバートしていなかった場合 60000 点あたりが平均だったのでリバートしてなかったら学生一位ではありませんでしたね。。
ベストスコアのcommitにちゃんとリバートしてなかったら負けてた#isucon https://t.co/aJdcrYcNUI
— さんぽし/sanposhiho (@sanpo_shiho) September 19, 2021
[17:00] dashboard が見えなくなる
17 時時点でベストスコアが 67000 点あたりで学生 1 位でした。
最終得点はそこからあまり伸びず 68000~71000 点あたりでした
結果
75000 点くらいで学生 1 位でした。(全体順位は執筆時点ではわかっていません。)
結構上振れてますが、学生 2 位の方の得点は競技中のベストスコアでギリギリ抜いてるので運じゃないよってことで…
反省点
ベストスコアが出た commit の特定が大変だったのでちゃんと記録しておけば良かったです。
終わりに
賞金何に使おうかな〜