昨日、今日とISUCONという大会が開催されていまして、初参加してみたので初陣の記録として記事を書いておきます。
ISUCONとは
ISUCONとは、Iikanjini Speed Up Contestの略でWebアプリケーションを高速化し、予め決められたURLのアクセスに対していくつレスポンスを返せたか、またどのくらいの負荷まで耐えられるか等によってスコアを付けそのスコアで勝敗を決めるコンテストです。
参加チーム
今回僕は、アルバイトとして勤務している会社のCTOとエンジニアの三人で「チーム終活」として参加しました。 二人共色々な面においてお強い方で、僕のようなWeb素人が参加して貢献出来るかは懐疑的なものでしたが、せっかく誘っていただいたのでありがたく参加しました。
やっていた対策
メンバーの誰一人としてISUCONに出たことがなかったので、何をすればいいのかよくわかりませんでしたが、とりあえず過去問を何回か解こうということで、本番の2週間前から2回ほどチームメンバーと集まって過去問演習をしました。
過去問演習とはいっても、実際に過去問環境を立てるのにけっこう手間取ってしまい、ほとんど演習らしいものは出来ませんでしたが、色々見識は深められたと思います。環境構築難しい...
本番の状況
僕たちは、土曜日に出場しました。 今回のお題は、チケット予約サイト?の高速化でした。なかなか出来の良いサイトで、コンテストのためにこんなもの作ってしまうのかーと少し感銘を受けました。
具体的にやったこととしては、開発環境の構築、解析ツール等の導入、ソースコードの最適化、余計なプロセスの殺害、DB鯖とHTTP&アプリ鯖の分散と言った感じです。
複数台のサーバーを渡されるというのが通年の慣例のようですが、上で述べたように初陣だったため知りませんでした。そのため、このサーバーをどう使うか迷いましたが結局DB鯖とHTTP&アプリ鯖の分散に使ったという感じです。
この分散を行うためには、ソースコードの最適化を行う必要がありました。 なぜなら、この分散を行ってしまうととあるページがおそすぎてベンチマーク時にタイムアウトしてしまったからです。
実際にソースコードを覗いてみると、明らかに確信犯的な悪魔実装をしている箇所が見受けられました。
そうしたソースコードの変更等を含め建設的に改善を続けていった結果、最終的に25452というスコアを叩き出すことが出来ました。
このスコアは、学生2位になりえたスコア(後の画像参照)でした。他チームの状況等からして予選通過を確信していた僕達は、「よっしゃ予選通過や」とコンテスト終了30分前に片付けをはじめ、悠々とした態度でいました。
結果
予選敗退。
何度も言いますが、初陣だった私達は再起動試験というものがあることをすっかり忘却してしまっていたのです。 結果、コンテスト終了後の再起動試験で見事コケたらしく予選敗退という結果になってしまいました。
悔しい!!!
これからISUCONに出ようと思っているみなさんも、分かっているとは思いますが、再起動時にこけないか確認しましょう。僕との約束です。
PS: 25452ってスコア、25252だったら矢澤にこ(ガタッ