選手は主催者からWebアプリケーション (問題) が与えられ、選手は競技時間内にその Web アプリケーションの高速化を行う。選手は高速化された実装 (回答) を作成する時、主催者より与えられたソフトウェア (初期実装) をベースに実装しても良いし、しなくても良い。 どのプログラミング言語で初期実装が提供されるかは主催者は事前にアナウンスするが、その各々の性能が一致することは保証されない。
問題に使われるOSはUbuntu、提供する参考実装は Go,Python,Java を予定する。
高速化の際、主催者より問題として与えられた Web アプリケーションから、以下の部分は変更しないこと。
- アクセス先のURI、ただしサーバで生成する部分(IDなど)は文字種([0-9] や [0-9a-zA-Z_] など)を変えない範囲で自由に生成しても良い
- レスポンス (HTMLのDOM,JSONオブジェクト等) の構造
- JavaScript/CSSファイルの内容
- 画像および動画等のメディアファイルの内容
各サーバにおけるソフトウェアの入れ替え、設定の変更、アプリケーションコードの変更および入れ替えなどは一切禁止しない。ベンチマーク中にポータルサイト・マニュアル・レギュレーションといった、主催の指示以外で利用が認められたサーバ以外の外部リソースを使用する行為(他のインスタンスに処理を委譲するなど)は禁止する。ただしモニタリングやテスト、開発などにおいては、PCや外部のサーバを利用しても構わない。
許可される事項には、例として以下のような作業が含まれる。
- 複数台あるサーバの役割の変更
- DBスキーマの変更やインデックスの作成・削除
- データベースに利用するミドルウェアの変更
- キャッシュ機構の追加、ジョブキュー機構の追加による遅延書き込み
- 他の言語による再実装
ただし以下の事項に留意すること。
- コンテスト進行用のメンテナンスコマンドが正常に動作するよう互換性を保つこと
- サーバ再起動後にすべてのアプリケーションコードが正常動作する状態を維持すること
- ベンチマーク実行時にアプリケーションに書き込まれたデータは再起動後にも取得できること
ソフトウェア事項の詳細は競技当日に主催者より公開されるマニュアル (当日マニュアル) に記載され、当日マニュアルに記載されている内容が本レギュレーションに記載されている内容より優先される。
選手は主催者が用意したインスタンスで Web アプリケーションを動作させ、競技へ参加する。インスタンスへの接続は踏み台サーバを経由したSSHで行う。具体的な接続方法、および資格情報は事前および当日マニュアル・ポータルサイトなど主催者の指示に従うこと。
SSH公開鍵認証に必要な秘密鍵は、当日ポータルサイトにて配布、もしくは、当日競技開始までに何らかの方法で主催者から選手に提供する予定である。
踏み台を経由した接続には ssh_config(5) の ProxyJump ProxyCommand LocalForwarding などを用いた接続を指す。設定例は以下のとおりである。なお、あくまで例示であり必ず以下の設定を利用する必要はない。
Host isucon-bastion
HostName <指示された踏み台サーバ>
Port 5022
User <指示されたユーザー名>
IdentityFile <指示された秘密鍵>
Host isucon-server1
HostName <指示されたインスタンスのアドレス>
LocalForward localhost:8080 localhost:80
ProxyCommand ssh -CW %h:%p isucon-bastion
User <指示されたユーザー名>
IdentityFile <指示された秘密鍵>
採点は採点条件をクリアしたチームの間で、性能値 (スコア) の高さを競うものとする。
主催者は性能計測ツール (ベンチマーカ) を選手に提供する。選手がツールへ実行リクエストを送る事で、ツールから選手に提供されているインスタンスに対し計測用の処理が実行され、スコアが記録される。 採点条件・性能値・ベンチマーカについての詳細は、当日マニュアルに記載する。
競技終了後、主催者はインスタンスに対して再起動を含む性能計測の追試を行う。 複数台のインスタンスが提供されており、それを使用していたとしても、主催者がインスタンスを再起動する順序は保証しない。
ここで、アプリケーションがレギュレーション・マニュアル・ベンチマーカ実装など、主催者の意図通り正常に動作しない、あるいは競技時間中に登録されたスコアに近い結果が再現されない場合、ベンチマークの結果に捏造があると判断される場合には、判断基準の公開と共にそのチームを失格とする。
以下の行為を特に禁止する。
- 競技終了時間までに、競技の内容に関するあらゆる事項 (問題内容・計測ツールの計測方法など)を公開・共有すること(内容を推察できる発言も含む)
- 不特定多数への公開はもちろん、他チームの選手と連絡を取り、問題内容等を共有する事 (結託行為) も禁止とする。
- 主催者が他チームへの妨害、競技への支障となるとみなす全ての行為
- 主催者が競技に不必要とみなす競技環境からのネットワークアクセス
- 競技に必要なネットワーク利用としては、主催者の指示 (レギュレーション, マニュアル等含む) で許可・想定されている行為、提供されたインスタンスの初期状態で利用可能なサービスや、外部のバージョン管理システム (GitHub 等)、ソフトウェアパッケージのリポジトリ (apt, yum リポジトリや、docker, npm, RubyGems レジストリ, proxy.golang.org 等) が例として挙げられる。
- 一方、提供されたインスタンスからインターネットまでの経路上にあるホスト等、選手がその選手へ提供されていないホストについて直接のアクセスを試みる行為や、外部への不正アクセスを試みる行為は、主催者により不必要と判断される場合がある。なお、例示のため、これに限らない。
- 他チームと結託する行為 (程度を問わず)
- 競技時間中、チーム外の人物と 問題にまつわる事項のやりとり
本レギュレーション, ポータルサイト, また当日マニュアルにおいて禁止とされた行為 (禁止事項) への違反は、そのチームを失格とする。