サーバチューニングコンテンストのISUCONの予選一日目に参加してきました。
結果は惨敗、2000点も超えられませんでした。。。すごく悔しかったので来年もあれば参加したいです!
振り返り
- Node.jsの実装が無いことを当日に発表される。Nodeで行く気満々だったので予定変更を強いられた。
ここで「みんな書いたことあるし言語のパフォーマンスが良いのでGoに賭けてみよう」という安直な理由でGoを選んだのが結果的に良くなかった。メンバーの中でGoに精通しているメンバーがいなかったので、内部使用を変更する場合の実装コストが高すぎた*1。一人でも精通している人がいる言語を選ばないとダメでした。
- 遅いリクエストやクエリを調査し始めるのが遅かった
やったこと
- 解析ツールを入れる
- GoAccess
- mackerel
- NewRelic(失敗)
- MySQLのインデックスをいくつか貼る
- 静的ファイルの配信をNginxで行う
- gzip圧縮を入れた
- Goのフレームワーク(というかルーター)をgorilla/muxからjulienschmidt/httprouterに変更する
- Relationsテーブルをアプリのメモリ上で持つように実装変更する(結局時間が足りずに失敗)