Skip to content

Latest commit

 

History

History
195 lines (122 loc) · 7 KB

manual.md

File metadata and controls

195 lines (122 loc) · 7 KB

社内ISUCON 当日マニュアル

What is ISUCON

お題となる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をお渡しします。計測ツールで測定したスコアはこのポータルに送られ、集計結果を見ることができます。

Getting Started

はじめに以下の操作を行い、問題なく動くかを確認して下さい。

2. 起動したEC2インスタンスに ubuntu ユーザで SSH ログインする

例:

ssh -i <設定した鍵ファイル> ubuntu@xx.xx.xx.xx -p 443

ログイン後にisuconユーザーでログインできるようにすることをおすすめします。

3. アプリケーションの動作を確認

EC2インスタンスのパブリックIPアドレスにブラウザでアクセスし、動作を確認してください。以下の画面が表示されるはずです。

例として、「アカウント名」は mary、 「パスワード」は marymary を入力することでログインが行えます。

ブラウザでアクセスできない場合、主催者に確認してください。

4. 負荷走行を実行

この操作後、ポータルにて、あなたのチームのスコアが反映されているか確認して下さい。

ディレクトリ構成

参考実装のアプリケーションコードおよび、スコア計測用プログラムは /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への切り替え方

起動する実装を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への切り替え方

起動する実装を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への切り替え方

起動する実装をnode.jsに切り替えるには、以下の操作を行います。

$ sudo systemctl stop isu-ruby
$ sudo systemctl start isu-node

プログラムの詳しい起動方法は、 /etc/systemd/system/isu-node.service を参照してください。

エラーなどの出力については、

$ sudo journalctl -f -u isu-node

などで見ることができます。

MySQL

3306番ポートでMySQLが起動しています。初期状態では以下のユーザが設定されています。

  • ユーザ名: root, パスワードなし

memcached

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に存在しない