ISUCON13にソロ参加した。
2023/11/25(土) に開催されたISUCON13に参加しました。
swamp というソロチームで参加して結果は32位でした。あと少しで30位だったので、少し悔しさが残りますがまずはFailではなくて結果を残せてよかったです。
あと、おそらくソロの学生という限られた母集団の中では2位かなと思います。(1位のtakonomuraさんには圧倒的差をつけられていますが笑)
前回のISUCON12も参加したので2回目の参加ではありますが、前回は外出先からの片手間の参加だったので、実質今回が初参加みたいなものでした。(前回は、mysqlの分割しただけで終わった)
今回は、最初の出だしは良くて、一瞬ですが4位になった時もありました!
(うれしくてスクショ取りました)
しかし、途中のベンチが止まっている間にした変更で、エラーになってしまい、それの解消に時間がかかったのと、複数台構成にするときにつまってしまい、後半は全然スコアが伸びませんでした。
以下やったことの一覧です。(大体、やった順番)
- getUserStatisticsのN+1の一部解消
- インデックスを貼る
- タグをアプリに乗せる
- アイコンをファイルに書き出してDBに挿入をやめる
- usersテーブルにdark_modeカラムを追加する
- ユーザーのキャッシュ
- 新たに追加したngwordだけを対象にチェックする。
- コメントを投稿した際の、ngwordsの判定をSQLを使わずにstrings.Containを使う
- getLivestreamStatisticsHandlerのN+1の解消
- iconのsha256sumの結果のキャッシュ
- livestream_tagのキャッシュ
- userのキャッシュ
- dbを2台目に移行
反省
ドキュメントの読み込みが足りませんでした。特に、dns周りはドキュメントをちゃんと読めておらず、全く触ることができませんでした。また、IconのIf-None-Matchなどについてもちゃんと読めてませんでした。
また、セキュリティグループを意識しない環境で素振りなどをやっていたため、DB分割に時間がかかってしまったり、2台目にinitializeのリクエストを送る方法などで苦労したため、順位表凍結の前の段階から、最後までずっと2台構成にすることに時間を使ってしまいました。ここはちゃんと練習しておくべきでした。
ソロ参加ということで、素振りをやってみたり計測ツールを用意したりといった準備をして迎えましたが、まだまだ実力が足りないことがわかりました。来年からは社会人になり学生枠ではなくなりますが、次のIsuconに向けてもっと実力をつけたいなと思います。
最後になりますが、運営していただいた方に感謝を述べたいと思います。ありがとうございました。とても楽しかったです!