ISUCON11本選で学生1位をとった

September 19, 2021

こんにちは

9/19 に行われた ISUCON11 の本選に@masibw くん@tosa_now くんと一緒にチーム「雑談係」として参加しました。結果は学生 1 位でした!!!!!

予選の記事はこちら。予選は学生枠の 5 位でギリギリ通過でした。あぶね〜〜〜〜〜通過して良かった〜〜〜〜〜〜

ISUCON11 予選を学生枠で通過した

役割分担

僕は同じように人力 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 点あたりが平均だったのでリバートしてなかったら学生一位ではありませんでしたね。。

[17:00] dashboard が見えなくなる

17 時時点でベストスコアが 67000 点あたりで学生 1 位でした。

最終得点はそこからあまり伸びず 68000~71000 点あたりでした

最終

結果

75000 点くらいで学生 1 位でした。(全体順位は執筆時点ではわかっていません。)

結構上振れてますが、学生 2 位の方の得点は競技中のベストスコアでギリギリ抜いてるので運じゃないよってことで…

反省点

ベストスコアが出た commit の特定が大変だったのでちゃんと記録しておけば良かったです。

終わりに

賞金何に使おうかな〜

このエントリーをはてなブックマークに追加