Skip to content

Instantly share code, notes, and snippets.

@yosuke-furukawa
Last active December 7, 2018 05:49
Show Gist options
  • Save yosuke-furukawa/3b8363b963927b22ef2304aa99bd357e to your computer and use it in GitHub Desktop.
Save yosuke-furukawa/3b8363b963927b22ef2304aa99bd357e to your computer and use it in GitHub Desktop.

RISUCON レギュレーション

RISUCONは以下のレギュレーションに従って実施されるものとする。

禁止事項

以下の行為を特に禁止する。

  • 主催者が他チームへの妨害とみなす全ての行為
  • 出題内容に関するあらゆる事項の公開

サーバー事項

サーバーは主催者で用意する。パスワード認証でsshできるように構成されており、パスワードは事前にメールで通知され、IPアドレスは当日用意されるポータルサイトから確認できる。 サーバーは sudo reboot コマンドで再起動できるが、停止した場合は参加者側からの起動はできない。(その場合は運営からの救済措置は保証しない。)

ソフトウェア事項

コンテストにあたり、参加者は与えられたソフトウェア、もしくは自分で競技時間内に実装したソフトウェアを用いる。 高速化対象のソフトウェアとして主催者から Java, Node.js, Go によるWebアプリケーションが与えられる。 ただし各々の性能が一致することを主催者は保証しない。どれをベースに用いてもよいし、独自で実装したものを用いてもよい。

競技における高速化対象のアプリケーションとして与えられたアプリケーションから、以下の部分は変更しないこと。

  • アクセス先のURI
  • レスポンス(HTML)のDOM構造(表示に影響しない範囲での空白文字の増減は許可される)

各サーバにおけるソフトウェアの入れ替え、設定の変更、アプリケーションコードの変更および入れ替えなどは一切禁止しない。 ベンチマーク中に与えられたサーバー以外の外部リソースを利用する行為 (他のインスタンスに処理を委譲するなど) は禁止する。ただしモニタリングやテスト、開発などは、PCや外部のサーバーを利用しても構わない。

許可される事項には、例として以下のような作業が含まれる。

  • DBスキーマの変更やインデックスの作成・削除
  • データベースに利用するミドルウェアの変更
  • キャッシュ機構の追加、ジョブキュー機構の追加による遅延書き込み
  • 他の言語による再実装

ただし以下の事項に留意すること。

  • コンテスト進行用のメンテナンスコマンドが正常に動作するよう互換性を保つこと
  • 各サーバの設定およびデータ構造は任意のタイミングでのサーバ再起動に耐えること
  • サーバ再起動後にすべてのアプリケーションコードが正常動作する状態を維持すること
  • ベンチマーク実行時にアプリケーションに書き込まれたデータは再起動後にも取得できること
  • 静的ファイル(JS, CSS, 画像)の変更がないこと

失格事項

  • 競技終了後の再起動に失敗した場合はたとえ順位が1位であっても失格とする。
  • 競技終了後に運営が再起動確認と視認によるブラウザでの操作を行う、確認した際に不正が発覚した場合は失格とする。

採点

採点は採点条件(後述)をクリアした参加者の間で、性能値(後述)の高さを競うものとする。 予選参加者に提供される性能計測ツール(以下計測ツール)に参加者が実行リクエストを送り、その後ツール側から計測用の処理が実行される。

採点条件として、以下の各チェックの検査を通過するものとする。

  • 負荷走行中、更新を伴うHTTPリクエストに対してレスポンスを返した後は、以降に発生したリクエストにその更新結果が正しく反映されていること
  • 適切なHTTPステータスコードを返すこと
  • 時間以内にレスポンスを返すこと
  • /initialize の実行は30秒以内に200のレスポンスがあること
  • レスポンスHTMLのDOM構造が変化していないこと(表示に影響しない範囲での空白文字の変更は認める)
  • ブラウザから対象アプリケーションにアクセスした結果、ページ上の表示および各種動作が正常であること
  • 静的ファイルの変更がないこと

また、採点時の仕様は下記の通り。

  • 並列度の高い負荷で発生するステータスコード500のエラーとタイムアウトは失格扱いにせず、加点も減点もしない
  • 並列度の高い負荷でエラー、タイムアウトが発生した場合、その時点では並列度は上がらない
  • WebSocketからの受信は送信後1秒以内に行うこと、タイムアウトの場合は加点されない
  • WebSocketは自分に関係のあるイベントを受信した場合のみ加点される

性能値として、以下の指標を用いる。

成功レスポンス数(GET) x 2 + 成功レスポンス数(POST) x 2 + WebSocketの受信 x 1

計測ツールの実行時間は 1分間 とする。

計測時間内に成功したHTTPリクエストに対して、当日マニュアルに記載される配点で加点する。 500エラーやタイムアウトは加点も減点もしない。

キャッシュでレスポンスを返した場合は内容チェックさえ通れば成功レスポンスとみなす。

順位について

最後の点数 + 10% 以内の最高点

で順位付けを行う。最高点ではなく、10%以内の誤差を認めた上での最高点なので留意すること。

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