参考実装のアプリケーションコードおよび、スコア計測用プログラムはアプリケーション用インスタンスの /home/isucon
ディレクトリ以下にあります。
/home/isucon
├ benchmarker # スコア計測用プログラム
├ env.sh # ↓の環境変数ラッパー
├ env_variables.sh # アプリケーション用の環境変数
└ webapp/ # 各言語の参考実装
参考実装の言語は Ruby, Python, PHP, Perl, Go が用意されており、初期状態では Ruby の実装が起動しています。
80番ポートでアクセスできるので、ブラウザから動作確認をすることができます。
起動する実装を Ruby 以外に切り替えるには、まず supervisord
を終了させます。
sudo /etc/init.d/supervisord stop
その後、 /etc/supervisord.conf
において希望の言語を autostart=true
にし、 [isucon_ruby]
を autostart=false
したうえで、
sudo /etc/init.d/supervisord start
を実行することで切り替えることができます。
なお、PHP を利用する場合のみ、上記に加えて、以下の操作を行ってください。
sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig
sudo mv /etc/nginx/nginx.php.conf /etc/nginx/nginx.conf
sudo /etc/init.d/nginx restart
イスコンAd は動画広告配信アプリケーションです。
/
にアクセスすると、下記のようなページが表示されます。
- パラメータ
advertiser
は、出稿主の ID を表す文字列です。スラッシュ/
を除くあらゆる文字が利用可能です。 - パラメータ
slot
は、広告枠を表す文字列です。スラッシュ/
を除くあらゆる文字が利用可能です。
"Create Ad" フォームを入力して Post をクリックすると、ファイルがアップロードされ広告が入稿されます。
/view.html
にアクセスし、"Display test" に slot を入力して Show をクリックすると、指定した slot に入稿されている広告が表示されます。
広告をクリックすると再生が始まり、再度クリックすると destination
へリダイレクトします。
/view.html
にアクセスし、"User attribute test" のフォームに入力し Set をクリックすることで、isuad
クッキーをブラウザに付与することができます。
/
へアクセスし、"Report test" フォームに advertiser を入力し、Show report, Show final_report をクリックする事でレポートを表示することができます。
インスタンスを立てたら、ベンチマークを実行してみましょう。各インスタンスには、インスタンス作成時に指定した鍵ペアを利用し、 root ユーザで SSH ログインすることができます。ログインしたら isucon ユーザに su してください。
実際の本選とは異なり、ベンチマーカー用インスタンスから benchmarker の「bench」コマンドを利用してアプリケーション用インスタンスに負荷走行を実行します。本選競技で利用した「remote」コマンドは使えないので気をつけて下さい。
(ベンチ―マーカー用インスタンス)
$ su - isucon
$ pwd
/home/isucon
$ ./benchmarker bench --hosts=XX.XX.XX.XX --workload=1
[2014-12-28 13:13:13] アセットデータを事前ロード中です...
[2014-12-28 13:25:04] 初期化エンドポイントへ POST リクエストを送信しています...
[2014-12-28 13:25:05] 初期化完了
[2014-12-28 13:25:05] ベンチマーク開始
[2014-12-28 13:26:05] ベンチマーク完了(1m0.000371136s)
[2014-12-28 13:26:25] レポートの検証開始
[2014-12-28 13:26:25] レポートの検証完了
[2014-12-28 13:26:25] 結果を JSON 形式で標準出力へ書き出します
[2014-12-28 13:26:25] 得点: 1000.00 (加点: 1000.00 / 減点: 0.00)
{
"errors": {},
"score": {
"fail": 0,
"success": 1000.00,
"total": 1000.00
}
}
「--hosts」オプションでは、負荷走行を行なう対象のアプリケーション用インスタンスの IP アドレスをカンマ区切りで指定します。IP アドレスはベンチマーカー用インスタンスから 80 番ポートが疎通するものにしてください。複数の IP アドレスを指定した場合は、その中からラウンドロビンで切り替わりながらリクエストされます。
「--workload」オプションでは負荷走行の並列度を 1 から 8 の中から指定することができます(デフォルトは1)。
「bench」コマンドの help は以下のコマンドから参照することができます。
$ ./benchmarker help bench
実際の本選でもそうであったように、アプリケーション用インスタンスにもベンチマーカー用インスタンスのものと全く同じ benchmarker のバイナリが同じパスに置いてあります。これを使って負荷走行をローカルに対して実行することができますが、動画セットがベンチマーカー用インスタンスのものとは異なるので、あくまで動作確認での利用にとどめてください。