コンテストにあたり、参加者は与えられたソフトウェア、もしくは自分で競技時間内に実装したソフトウェアを用います。 高速化対象のソフトウェアとして主催者から Python による Web アプリケーションが与えられます。
競技における高速化対象のアプリケーションとして与えられたアプリケーションから、以下の機能は変更してはいけません。
- アクセス先の URI (ポート、および HTTP リクエストパス)
- レスポンス (HTML) の DOM 構造
- JavaScript/CSS ファイルの内容
- 画像および動画等のメディアファイルの内容
各サーバにおけるソフトウェアの入れ替え、設定の変更、アプリケーションコードの変更および入れ替えなどは一切禁止しません。 ベンチマーク中に与えられたサーバー以外の外部リソースを利用する行為 (他のインスタンスに処理を委譲するなど) は禁止します。 ただしモニタリングやテスト、開発などは、PC や外部のサーバーを利用しても構いません。
許可される事項には、例として以下のような作業が含まれます。
- DB スキーマの変更やインデックスの作成・削除
- データベースに利用するミドルウェアの変更
- キャッシュ機構の追加、jobqueue 機構の追加による遅延書き込み
- 他の言語による再実装
ただし以下の事項に留意してください。
- 初期化処理(reset)が正常に動作するよう互換性を保つこと
- 各サーバの設定およびデータ構造は任意のタイミングでのサーバ再起動に耐えること
- サーバ再起動後にすべてのアプリケーションコードが正常動作する状態を維持すること
- ベンチマーク実行時にアプリケーションに書き込まれたデータは再起動後にも取得できること
基本スコアは以下のルールで算出されます。
成功した GET リクエスト数 + 成功した POST リクエスト数 × 3
しかし、以下の注意事項があります。
- ベンチマーカーはリダイレクト先 URI をチェックしますが、リダイレクト先にアクセスするとは限りません。リダイレクト先にアクセスする場合はそれにも独立して加点されます。
- 500 エラーやタイムアウトは加点も減点もしません。
以下を満たした場合リクエストが成功したと判定します。
- タイムアウトせずにレスポンスを返却する
- HTTP ステータスコードが想定と一致する
- コンテンツの内容チェックを通過する
- HTTP ステータスコードは、基本的に参照実装と同一のものを想定しています。
以下の事項に抵触すると失格(fail)となり、点数が無効になります。
- GET /reset へのレスポンスが 25 秒以内に戻らない場合
- アプリケーション互換性チェックに失敗した場合
- 他、ベンチマークツールのチェッカが失敗を検出したケース
- エラー率が 1 % を超えた場合
最初に呼ばれる初期化処理 GET /reset は用意された環境内で、チェッカツールが要求する範囲の整合性を担保します。サーバサイドで処理の変更・データ構造の変更などを行う場合、この処理が行っている内容を漏れなく提供してください。またこの処理が 25 秒以上レスポンスを返さない場合、失格とします。
アプリケーションは全て、保存データを永続化する必要があります。つまり処理実施後に再起動が行われた場合、再起動前に行われた処理内容が再起動後に保存されている必要があります。 また、アプリケーションは、ブラウザ上での表示を初期状態と同様に保つ必要があります。 予選終了後に行われる主催者による確認作業(追試)においてこれらの点が確認されます。