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さんはじめ運営に携わった皆様、最高に楽しい場をありがとうございました!!!

isucon6

追記@2015/11/04 12:30

最終的なリポジトリは以下になります

https://github.com/takashabe/isucon5-final