お題となるWebアプリケーションを決められたレギュレーションの中でパフォーマンスチューニングするバトルです。
高速化対象のソフトウェアとしてPHP、Ruby、Node.js、golangによるWebアプリケーションを配布します。
使用言語に制限はありません。上記で挙げた言語以外を使用し独自で実装したアプリケーションで競っても問題ありません。
e.g.) Javaでの再実装 / C++での再実装 / ngx_luaでの再実装
以下の機能は変更しないでください。
- アクセス先のURI(ポート、およびHTTPリクエストパス)
- レスポンス(HTML)のDOM構造
- JavaScript/CSSファイルの内容
- 画像の内容
ソフトウェアの入れ替え、設定の変更、コードの変更および入れ替えなどは一切禁止しません。
ただし、外部リソースに処理を移譲する行為は禁止とします。
e.g.) Auroraにreplicateしてレコードを参照する。
許可される事項には、例として以下のような作業が含まれます。
- DBスキーマの変更やインデックスの作成・削除
- データベースに利用するミドルウェアの変更
- キャッシュ機構の追加、jobqueue機構の追加による遅延書き込み
- 他の言語による再実装
以下の点には注意してください。
- サーバの設定およびデータ構造は任意のタイミングでのサーバ再起動に耐えること(異常終了は考慮しないもとする。プロセス終了/開始時にデータが復元出来ていれば良い)
- サーバ再起動後にすべてのアプリケーションコードが正常動作する状態を維持すること
- ベンチマーク実行時にアプリケーションに書き込まれたデータは再起動後にも取得できること
SlackでURLをお渡しします。計測ツールで測定したスコアはこのポータルに送られ、集計結果を見ることができます。
はじめに以下の操作を行い、問題なく動くかを確認して下さい。
例:
ssh -i <設定した鍵ファイル> ubuntu@xx.xx.xx.xx -p 443
ログイン後にisucon
ユーザーでログインできるようにすることをおすすめします。
EC2インスタンスのパブリックIPアドレスにブラウザでアクセスし、動作を確認してください。以下の画面が表示されるはずです。
例として、「アカウント名」は mary
、 「パスワード」は marymary
を入力することでログインが行えます。
ブラウザでアクセスできない場合、主催者に確認してください。
この操作後、ポータルにて、あなたのチームのスコアが反映されているか確認して下さい。
参考実装のアプリケーションコードおよび、スコア計測用プログラムは /home/isucon
ディレクトリ以下にあります。
/home/isucon/
├ env.sh # アプリケーション用の環境変数
└ private_isu/
├ webapp/ # 各言語の参考実装
├ manual.md # 本マニュアル
└ public_manual.md # 当日レギュレーション
参考実装の言語はRuby, PHPが用意されており、初期状態ではRubyの実装が起動しています。
80番ポートでアクセスできるので、ブラウザから動作確認をすることができます。
プログラムの詳しい起動方法は、 /etc/systemd/system/isu-ruby.service を参照してください。
エラーなどの出力については、
$ sudo journalctl -f -u isu-ruby
などで見ることができます。
また、unicornの再起動は、
$ sudo systemctl restart isu-ruby
などですることができます。
起動する実装をPHPに切り替えるには、以下の操作を行います。
$ sudo systemctl stop isu-ruby
$ sudo rm /etc/nginx/sites-enabled/isucon.conf
$ sudo ln -s /etc/nginx/sites-available/isucon-php.conf /etc/nginx/sites-enabled/
$ sudo systemctl reload nginx
$ sudo systemctl start php7.0-fpm
php-fpmの設定については、/etc/php/7.0/fpm/以下にあります。
起動する実装をGOに切り替えるには、以下の操作を行います。
$ sudo systemctl stop isu-ruby
$ sudo systemctl start isu-go
プログラムの詳しい起動方法は、 /etc/systemd/system/isu-go.service を参照してください。
エラーなどの出力については、
$ sudo journalctl -f -u isu-go
などで見ることができます。
起動する実装をnode.jsに切り替えるには、以下の操作を行います。
$ sudo systemctl stop isu-ruby
$ sudo systemctl start isu-node
プログラムの詳しい起動方法は、 /etc/systemd/system/isu-node.service を参照してください。
エラーなどの出力については、
$ sudo journalctl -f -u isu-node
などで見ることができます。
3306番ポートでMySQLが起動しています。初期状態では以下のユーザが設定されています。
- ユーザ名:
root
, パスワードなし
11211番ポートでmemcachedが起動しています。
基本スコアは以下のルールで算出されます。
成功レスポンス数(GET) x 1 + 成功レスポンス数(POST) x 2 + 成功レスポンス数(画像投稿) x 5 - (サーバエラー(error)レスポンス数 x 10 + リクエスト失敗(exception)数 x 20 + 遅延POSTレスポンス数 x 100)
ただし、基本スコアと計測ツールの出すスコアが異なっている場合は、計測ツールの出すスコアが優先されます。
以下の事項に抵触すると減点対象となります。
- 存在するべきファイルへのアクセスが失敗する
- リクエスト失敗(通信エラー等)が発生する
- サーバエラー(Status 5xx)・クライアントエラー(Status 4xx)をアプリケーションが返す
- 他、計測ツールのチェッカが検出したケース
- リダイレクトはリダイレクト先が正しいレスポンスを返せた場合に、1回レスポンスが成功したと判断します
- POSTの失敗は大幅な減点対象です
以下の事項に抵触すると点数が無効となります。
- GET /initialize へのレスポンスが10秒以内に終わらない
- 存在するべきDOM要素がレスポンスHTMLに存在しない