NaCl 松江本社のyharaです。こんにちは。Webアプリケーションの高速化技術を競うコンテスト「ISUCON」の本戦に弊社メンバー(@sada4 @yhara @shugomaeda)で参加してきたので、簡単ですが参加記を書こうと思います。
結果は予選の15位から少し上がって13位でした。Go言語での参加チームが多いということで優勝もGoになるのかと思いきや、Rubyを使用した白金動物園チームが優勝でしたね。
以下では、今後ISUCON本戦に参加するチームのために、予選と本戦の違いなどを書いていこうと思います。
ISUCONは2011年から行われているコンテストで、課題となるアプリケーションが与えられ、それを(挙動を大きく変えない範囲で)最も性能が出るよう改造できたチームが優勝、というイベントです。
予選ではAlibaba Cloudのクーポンが参加者に付与されて、そこにインスタンスを立てて作業するという流れでした。本戦の環境も引き続きAlibaba Cloudでしたが、予選と違って3台のインスタンスが最初から用意されており、本戦開始とともにSSHで繋げるようになっていました。
予選と大きく違ったのは、アプリとDBがdocker-composeで起動するようになっていたことです。アプリケーションコードの再読み込みは変わらずsystemctlでできるよう設定されていましたが、例えばMySQLに別ホストからアクセスする際にdocker-composeの設定を直す必要がある点に注意が必要でした。
会場は新宿のLINE本社のカフェテリアでした。電源タップはチームごとに一つ提供されますが、それ以外のものは各自が持ち込む形式で、例えば外付けディスプレイを持ってきた人をちらほら見かけました。その他には紙とペンがあると簡単な図を書きたいときに役に立つかもしれません。
今回はデフォルトのものより柔らかい椅子がいくつか用意されており、早いもの勝ちで使用することができました。開場は開始の1時間前でしたが、時間に余裕を持って集合すると良いでしょう。
テーブル間は窮屈ではないもののそれなりに近く、大声で話をすると聞こえてしまう距離ではありました。しかし本戦中は他チームの話を聞いているような暇もなく、またボトルネックだけわかってもそれを解消するのが簡単でなかったり、チームの状況によってボトルネックの箇所も変わったりするので、あまり影響はないのかもしれません。
参加者にはISUCON9 Tシャツとステッカー、ネームプレートが配られました。ネームプレートは紙ではなくプラスチックでできています(すごい)。
昼食はお弁当、夕食はケータリングが用意されていました。またカフェテリア内に自動販売機もあり、外に出る必要はありませんでした。
pumaやSinatraの設定は予選と同じことをやりました。それ以外だとseats APIのクエリの軽量化などが私の担当でした。チームとしては、予選のときは時間切れでできなかったDB-app-appという3台構成を実現できたのが良かったです。
ライバルチームが同じ場所にいる環境で戦うというところが予選と本戦の最大の違いで、やることや重要なこと(ボトルネックをこまめに確かめること、とか)は予選と大きな違いはないと思います。予選や練習で培った知見は、本戦でも役に立つと思われます。
あと、11月に行われるRubyWorld Conferenceの協賛企業によるショートプレゼンテーションの枠でチームメンバーである前田さんがISUCONの話をされるそうです。そちらもお楽しみに。