Skip to content

Instantly share code, notes, and snippets.

@mirakui
Last active July 15, 2018 10:06
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mirakui/5e5a75d66bae314555a2 to your computer and use it in GitHub Desktop.
Save mirakui/5e5a75d66bae314555a2 to your computer and use it in GitHub Desktop.
ISUCON4 本選 AMI マニュアル

ISUCON4 本選 AMI マニュアル

ディレクトリ構成

参考実装のアプリケーションコードおよび、スコア計測用プログラムはアプリケーション用インスタンスの /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 の場合

なお、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 へリダイレクトします。

isuad クッキーを付与する

/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 のバイナリが同じパスに置いてあります。これを使って負荷走行をローカルに対して実行することができますが、動画セットがベンチマーカー用インスタンスのものとは異なるので、あくまで動作確認での利用にとどめてください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment