暇人じゃない

ISUCON 4 本選に参加してきた

ISUCON 4 の本選に「Beer Qz's」というチームで参加してきた。
結果は 7879 で 21 位だった(言語は Ruby)。

やったこと

まずは、アプリや設定ファイルのバックアップを取りつつ、用意していたリポジトリに追加。アクセスログにレスポンスタイムを出す。 アプリやログを見ながら戦略を練る。

デプロイについては、設定ファイルやアプリを撒いて各種サービスを再起動するスクリプトを書いた。

初期スコアは 422 。

Redis に動画を置いていたものを public 以下に保存するように変更した。API 経由で出していたものを Nginx から配信。10547。

この辺りから複数台でベンチマークを走らせる構成に変更。

リダイレクト時のログ保存先をファイルから Redis に変更して、ログの集計で参照する。3 号機を Redis 専用に変更する(あとでコア数の違いに気がついて 1 号機に移動した)。
動画をアップロードされたサーバーを参照するように、request.host を保存して動画 URL を保存したサーバーで出力する。23023。

動画のハッシュを持っておいて、同じ動画を使いまわす。 保存した動画に HEAD リクエストを送ってメモリに載せる。

Nginx や Unicorn 周りの設定ももちろんやった。

JS, CSS, HTML を gzip で圧縮しておいて配信する。 send_file 、keep alive 、ワーカープロセスの調整…

色々試したけど、アプリ側でブレークスルーを起こせそうなところも無さそうで、bench で 23000 辺り、remote で 7500 辺りで止まっていて辛かった。 やけくそで h2o を試してみたりした。インストールに少し手間取ったけど、設定は簡単だった。

終わり

ベンチマーカーが賢くなっていて Conditional Get が効くと聞いた時は「やられたー!」と思った。 そういうところに気がつくようにならないといけない…。
優勝したチームは 60 万点とか出していて本当にすごい。おめでとうございます。

とても疲れたけど、最近の悩みとか忘れて没頭できた。来年も開催する予定とのことなのでぜひ参加したい。

他の方の参加エントリが楽しみである。
運営チームの皆様、ありがとうございました。本当にお疲れ様でした。