ISUCON5本戦で完敗してきました
予選に引き続き、@zakiry, nohamaと3名でISUCON本戦に出場してきました。
結果は以下の通り、9位フィニッシュでした。実装しきれなかった部分や見逃しが多く、ただただ悔しい。
http://isucon.net/archives/45869121.html
以下やったこと
競技開始〜14時くらい
- ssh, zshなどの下準備をする
- ベンチを回してアクセスログの解析
- DBがpostgresだったのでMySQL移行を試行する
- pg_stat_statementsでクエリ解析するも、特にボトルネックでは無かったのでpostgresのまま行くことに
- endpointsをコード中に移植
- nginx, unicornのワーカー数を上げる
- 2, 3台目のセットアップ
14時〜18時
- APIレスポンスをRedisにキャッシュし始める
- kenなどの不変的なものをキャッシュ対象としていた
- nginxにAPIレスポンスをキャッシュさせる作戦を試みる
- 実装しきれずに投入出来ず…
- DBとKVSを1箇所にまとめて複数台構成にする
ざっくりとしたスコア推移
スコア | タイミング |
---|---|
1,000 | 初期 |
10,000 | nginx, unicornのワーカー増やした |
20,000 | Redisに一部APIをキャッシュ |
35,000〜45,000 | 3台に分散 |
サーバ構成
サーバ | 役割 |
---|---|
A | unicorn + postgres + redis |
B | unicorn |
C | nginx + unicorn |
フロントはCのnginxで受け、各サーバのunicornにプロキシする構成としました。
反省
MySQL移行
- 時間を使いすぎた。DBボトルネックではないことを早々に確認すべきだった
- postgresでクエリの解析をしている間, @zakiryにMySQL移行準備を行ってもらっていたが、完全にリソースの無駄遣いだった
nginxキャッシュ
- nginxキャッシュを各自ググりながら実装し、結局実装しきれずに終わってしまった
- 実力不足だった
APIリクエストの並列化
- 一度検討したがRubyでそれをサクッと書けるメンバーが居なかったためスルーした
APIレスポンスヘッダ読んでなかった
- 読んでいなかったのもダメだし、仮に読んでいてもそれを活かせたとは考えづらい
最後に
悔しい。来年こそは入選するぞという思いしかない。
そして@tagomorisさん, @kamipoさん, @941さんはじめ運営に携わった皆様、最高に楽しい場をありがとうございました!!!
追記@2015/11/04 12:30
最終的なリポジトリは以下になります