handlename's blog

コード片など

#ISUCON 3 本戦に(スタッフとして)参加してきました

今回の成果↓

f:id:handlename:20131109115826j:plain

(参加してきましたエントリにちょこちょこ登場しててうれしい)

予選でなすすべなく敗退したので、本戦では問題アプリの言語移植と、テスト回答、当日運営のお手伝いをしていました。

移植

@fujiwaraさんが作ったperlのリファレンスアプリをnodejsに移植するというのを担当したのですが、 mysqlのユーザー指定が空になっている(オブジェクトのキーが間違っていた…!)ことを本戦中に指摘されてしまいました…。 nodejsで挑戦していたチームの方々ごめんなさい。

いちおう言い訳をしておくと、 nodejsのmysqlモジュールは、ユーザー名の指定がない場合はrootとしてつなぎに行くようになっていて、 検証中(=サーバー1台)では問題なく動作してしまっていたのです。 サーバーを増やすとrootでは外からつなぐことができないので正常動作しないという…。 すべての言語のアプリをがっつりテスト解答することは、 時間と人手が足りない中ではなかなか厳しい物があったのですが、もう少し慎重になるべきだったと反省しています。 なんせ賞金100万がかかってますし。

テスト回答

本戦前日に、おなじく出題手伝いをしていた@mix3さんと perlのアプリを使って本番サーバーでテスト回答を行いました。 大事なことなので二回言われていた「初期画像を消したらゲームオーバー」にバッチリハマったりしながら、 ひたすら画像変換の最適化をしつつアプリケーションサーバー1台/workload=2で 17000弱のスコアが出るところまでいってその日は時間切れ。

memcachedを5台すべてで動かして、画像のuidでシャーディングする、という戦法でした。 memcachedの1アイテム1Mb制限(と、Cache::Memcached::Fastのmax_sizeのデフォルト1Mb制限) に引っかかって時間を食っていなければアプリ4/DB1くらいにして 複数台で走らせるところまでいけたんじゃないかなぁ…。

当日のお手伝い

出発予定時刻の5分前に目が覚めて、慌てて会場に向かったらなんとか間に合った組。 会場をうろうろしてルールの質問に答えたり、レゴでISUCONロゴ作ったりしてました。

中盤以降はほとんど質問も無くなったので、スタッフ控室で問題アプリのScala移植でもしてみようかなーと思っていたら 隣の@m0t0k1ch1くんが全く同じことをやっていたので完成したら見せてもらうことにしました。Scala書けるようになりたい。 代わりに ST2のセットアップ が捗りました。

LINE選抜チームが4万点台を叩きだした時には会場がざわめいてましたねー。 1分半遅れでカヤック選抜チームも惜しかった! 寿司おごってもらいたかった!

最終計測では再起動後のベンチマークでFAILして脱落していくチームをどきどきしながら見てました。 勝負の世界はきびしいなーと。 トップスコアを維持しつつ最後までベンチを完走したLINE選抜チームはさすがです。

おわり

次回(があれば)自力で本戦にでたい。

f:id:handlename:20131109163923j:plain