Nikushi's blog Our Time is Limited.

ISUCON4本戦に出場しました!! 悔しい!!

週末、ISUCON4本戦に参加しました。

去年に引き続き2度目となる本戦出場です。メンバは前回同様@sonots, @Spring_MT, GoMiamiというチーム名で参加しました。予選はGoでしたが本戦は慣れてるRubyで戦いました。

お題は動画広告システムのパフォーマンス・チューニング。最初は動画広告とかやったことないしな..とおもいましたが、実質的には数MのファイルのPOST(入稿)とそのファイルのGET(impression, conversion)を中心としたサイト構成でした。

結果は30チーム中17位…..! 8017点でした。チームの目標が失格にならないことだった点はクリアしたものの、上位に食い込む…という目標は達成できませんでした。 本戦結果のとおりほとんどのチームが7千から8千点台の中で僅差で並んでて、抜きん出ることは出来きず悔しい感じでした。

今回の問題の本質はベンチが賢い点に気づけるかどうかで、レスポンスヘッダで適切にキャッシュコントロールさせればベンチサイドでキャッシュが効いて0バイトでレスポンス返すことが出来た、ということでした、、、、。本戦後の結果発表まで気づけてなくて本当に悔しかったです。ベンチ(!=ブラウザ)という先入観。

事前準備しことはChefレシピを仕込んでおいたくらいです。sshの鍵、/etc/hostsにエイリアス書く、vimrc、各種秘伝のたれ設定(nginx.conf, redis.conf, my.cnf)、nginxアクセスログ等の集計スクリプト等を開始直後にがっとまくやつ。一応各ホスト間もsshとおしたけどこれは大して意味なかった。あとはtd-agentでメトリクスシステム(事前に用意)に飛ばした。chefのお陰で開始20分くらいで環境整えれました。

@Spring_MTと@sonotsで方針ぎめやって、自分は設計に適宜つっこみ入れつつも基本的に2人にお任せしました。自分はnginxをメインに担当しつつ、その他もろもろ。

後半、local benchでは20000以上出る一方でremote benchだと8000程度でこれは何で…という状況になってその後も策出せず時間切れという感じでした。なんでremote bench遅いの〜〜 と悩む、というかremote benchでスコア出ないの他チームもqueueして遅くなってるんじゃない!?くらいしか考えが及びませんでした。実は仕様(レギュレーションには無かったものの)というところに気づいてどう帯域を使わないでレスポンス返せるか、という点に考えが及ばなかった。remote bench実行時にネットワーク帯域が頭打ってることは早くから気づいてので悔しい限りです!!!

次回に向けた反省。レギュレーションとコードを腰を据えてじっくり読む余裕。ベンチの挙動とアクセスログに向き合う余裕!!

なお超便利だったのは@mikedaさんのtmuxで複数サーバの同時オペレーションでした。chefなくてもかなり捗ったかも。

悔しさ山盛りですが毎度楽しいイベントです。みんな同じコンテキストでお酒飲みながら盛り上がれる懇親会はいいものです!!

最後にこのような素晴らしいコンテストを開催していただきありがとうございます!! 出題者、関係者のみなさま本当にお疲れ様でした!!