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力が全然足りず、アプリをがんがん修正できるとは思ってなかったので、ちゃんとボトルネックを計測できて、そこをきちんとチューニングできたのが要因かな、と思いました。
本戦にむけてまた頑張っていきます。