ISUCON5で惨敗した

ISUCON5に参加して惨敗しました。

チーム「チームSELinuxはEnforcing」という名前で @matsuu @ishikawa84g ご両人と共に意気揚々と申し込みしたものの誤算続きで、、、司令塔としてリカバリできず惨敗でした。

  • 今まで同様redhat系だと踏んでいたら申し込み後にUbuntuと判明しSELinuxが(実質)使えない
  • goで練習・準備したものの当日参照実装のバグ取りからとのアナウンス→何が正しいかもわからないのにgoでいくのは厳しかろうとPythonに変更したものの準備不足で右往左往
  • N+1なクエリを書き換えたら余計遅くなったりタマキでfailしたりして戻した

ISUCON5で予選敗退しましたがアクセスログ解析ツールkataribeは充実しました - Dマイナー志向 で @matsuu さんが書いてくれてますが、最終構成はVarnish + Python + MySQLでした。その場でkataribeでvarnishのログ解析できるようにしてくれた @matsuu++

よかったこと

Ubuntuだというのは事前に公開されていてわかっていたので matsuu/vagrant-isuconmatsuu/ansible-isucon のUbuntu版を用意したり試し解きしたりときちんと準備できてました。なので /etc/my.cnf がAppArmorのせいで読み込みできない件は事前に知ってました。みんなハマった? /var/log/syslog にログ出てるよ。

systemdについてもさすがに知ってたので、使い方がわからないとかdaemon-reloadしなくて反映されないとかのトラブルはなかったです。 チームで少しハマったのはsystemdの設定ファイル(/etc/systemd/system/isuxi.python.service)上で % を書くときにエスケープしないとならなくて、それがうまく反映できずハマりました。これよく考えたらcrontabと同じですね。

ダメだったこと

Pythonにしてはみたものの、bottleで使えるプロファイラがみつけられなかったりgunicornのチューニングノウハウがなかったりと大苦戦。 @matsuu さんも言ってましたがgoでいけばよかった。

結局時間内にプロファイラが作れず遅いところの特定がいまいちだったこと、普段「遅いものをまあまあにする」ことばっかりやってて「そこそこ早いものを詰めていく」ことをしてないこと、事前の準備不足、なにより私の判断ミス(ボトルネックにがっつりリソース投入して取り組む意志)がダメで惨憺たる結果になってしまいました。flaskならまだプロファイラの心当りがあったんですが、bottleはなかった。去年までflaskで、なんで今年はbottleなんだ・・・ とはいえいろいろとあまりにもなので技術的に悔しいという感情はなくてただヘコんでおります。次回(あれば)に向けてイチから修行する所存。

準備・運営ありがとうございました

しかしまぁ準備は大変ですよね。 参照実装バグありのままスタートしてたし、ベンチマーカー作り始めたのも開催1〜2週間前みたいだし、あまり試し解きとかの準備ができてないのでは、という感じがしました。 アンケートにも書きましたが、あけてびっくりは辛いので早めにギブして参照実装の数を減らして欲しかったなぁという気持ち。 できればPythonかGoは残してほしいけど、「今回用意できるのはPerlとRubyだけです!」って言ってもらえればそれで準備しますし。

(社内ISUCONしたときは自分一人でアプリ・ベンチマーカー・開催・試し解きなど全部したのでPythonだけしか用意しませんでした。ひとりでやるのほんと大変だった)

ともあれ運営のみなさまお疲れさまでした!ありがとうございました! ベンチマーカーの公開楽しみにしています! 当日も結局朝まで復習してたので、公開されたらサルのようにやり続けるとおもいます。

・・・しかし結局go/java/scalaのバグって何だったんだろう?

Event 

See also