ISUCON5予選 学生枠5位だけど突破できた
isucon5予選参加してきました。
@nemupmと@itkqとで、
チーム アジ・タコ・エンガワ! で出場し、学生枠5位で予選突破しました。
当日までにやったこと
昨年も参加してたので、その反省を生かして、何度かチームでSkype会議で打ち合わせをしてました。
担当を、
- インフラ: @nemupm
- アプリ: @itkq @shiki
と決めて、当日の流れの打ち合わせ等をしてました。
実装言語はせっかくisuconなので、ということでやったことないGOでいくことに決め、過去の予選問題を解いたりしてました。
当日
@nemupmがSQLやnginxのlogを解析している間、@itkqとアプリの仕様の把握と、どこをチューニングしていこうか考えてました。
元々、載せれるものはどんどんメモリにのせて行こう、と考えてたのですが、アプリをみてちょっと厳しそうかな、と考えてました。
解析した結果を見ながら、インフラ周りはすべて@nemupmに任せといて、アプリのどこを改修しようか@itkqと相談し、自分はrelationsテーブル周りのSQLがかなり遅そうだったので、そこを担当しました。
もともとmysqlに入ってるデータが500,000件ほどだったので、全部展開してしまえということで、
dumpして出てきたクエリを、@itkqにtsv形式にしてもらい、"/initialize"の時点でそれを読み込んでmapとして持つように改修しました。
これができたのが18:00くらいで、その時点でスコアが1400くらい。この変更を適用したらスコアが7000くらいまで伸びました。
残った時間で"/authenticate"も直そうとしてたのですが、 時間がないので再起動テストを優先することにして、改修を終わりました。
結局、最終スコアは6566でギリギリで本戦に行けることが決まりました。
感想
運営のみなさんありがとうございました。
去年は予選で、最終的にチューニングが間に合わずにスコアなしで終わったので、今年はリベンジできてうれしいです。
自分のGO力が全然足りず、アプリをがんがん修正できるとは思ってなかったので、ちゃんとボトルネックを計測できて、そこをきちんとチューニングできたのが要因かな、と思いました。
本戦にむけてまた頑張っていきます。