Skip to content

Latest commit

 

History

History
223 lines (137 loc) · 11.8 KB

File metadata and controls

223 lines (137 loc) · 11.8 KB

NRI-ISUCON 2022 当日マニュアル

かならず、 NRI-ISUCON 2022 レギュレーション も併せてご確認ください。レギュレーションの内容と本マニュアルの内容に矛盾がある場合、本マニュアルの内容が優先されます。

はじめに

課題アプリケーション isubnb について

isubnb は 顧客 ISU 社グループ の「民泊をサポートするサービス。既存の民泊アプリを参考に後発サービスとしてローンチされた Webサービス」です。

ワーケーション需要やAfterコロナのGoto需要を狙ってサービス化され、関東を中心にスモールスタートしたサービスになります。

直近はワーケーション需要の緩やかな増加を想定していていましたが、急なGoto事業の再開で予想以上に利用が加速しています。

とても偉い人「この間始めた新サービス、うまくいってるらしいじゃないの!!」

プロダクトマネージャー「はい!コロナ禍で外出自粛していた分フラストレーションを抱えていた人が多かったようで、ユーザに響いています!」

とても偉い人「響いているのは良いことだね!!」

プロダクトマネージャー「ただ予想外の反響で、ちょっとサイトが重い、という声もありますね…」

とても偉い人「明日からヒカキンにYoutubeで紹介してもらったり、松坂桃李と内田理央に宣伝して貰うことになったから、問題なくサービスが使えるように準備しといてね!!!」

プロダクトマネージャー「あ、明日からですか!!聞いてないですよ!!うーーん…なんとかします!!(部下が…)」

チーム内会議

プロダクトマネージャー「…ってことで、この間リリースしたアレ、明日からCMとか流れちゃうんで、今日中に性能なんとかしといてね」

後輩(開発チーム)「え、またですか!今でさえ想定外のユーザ量で大変なのに、無茶な!追加リソースもクラウド管理部門に依頼すると明日には間に合いません・・・」

プロダクトマネージャー「まぁ・・・とりあえず、今3台くらい使えるマシンがあったと思うから、それ使ってなんとかしてくれないかな。頑張ってね…ということで、今日の18:30には様子教えてね」

後輩(開発チーム)「・・・。頑張ってはみますが…今日の18:30にまた報告します・・・」

重要事項

競技終了後は、ベンチマーク走行成績の追試を行いますので、Discord サーバ にて運営からお知らせをするまで、サーバの操作はしないでください (競技終了後の作業は禁止行為にあたります)。お知らせは当日夜あるいは翌日夜までに行います。

競技に利用できる計算機資源は主催者側が指定した 3 台までのインスタンスのみです。 外部のメトリクス計測サービスの使用のみ特例として許可しますが、スコアを向上させるいかなる効果も持つものであってはいけません。

変更してはいけない点

下記は追試や環境確認に利用するため、変更した場合は失格となります。

  • データベース内のユーザテーブルのデータ
  • その他、主催者による追試を妨げる変更(例: サーバー上の isucon 以外のユーザに関する、ユーザ削除や既存の公開鍵の削除)

作業手順

以下の順序で作業を開始してください。

1. サーバーへのログイン

競技用サーバーに対して SSH 接続します。 サーバにログインするための SSH 秘密鍵はポータルからダウンロードしてください。

SSH ログインのユーザ名は isucon です。

[重要]isucon ユーザーの以外のアカウントに関して、アカウントの削除や既存の公開鍵の削除を行ったことにより主催者による追試をおこなうことができない場合は、失格とします。

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

ブラウザからアクセスするとWebアプリケーションが表示されます。 Webアプリケーションを操作することで、今回提供するアプリケーションにどのような機能があるのか確認してみてください。

踏み台を経由したブラウザアクセスには、 SSH におけるローカルポートフォワーディング などを用いて表示することができます。 これ以外の方法で動作確認してもかまいません。

GET / へアクセスすることで、トップページにアクセスすることができます。

3. 負荷走行 (ベンチマーク)

負荷走行はポータルサイト上からリクエストします。 ポータルサイトの Benchmark にアクセスし、 "Target Server" から負荷走行対象のサーバーを選択、"Send" をクリックで実行が開始されます。

なお、負荷走行が待機中もしくは実行中の間は追加の Send を行うことはできません。

ベンチマークからのリクエストは、 API に対してのみ行われます。 画像や HTML などの静的ファイルに対するリクエストは行われませんが、追試にてブラウザ上でアプリケーションが動作するかを確認します。 詳細は 制約事項 を参照してください。

参考実装

参考実装として下記の言語が提供されています。

  • Go
  • Python
  • Java

ただし、言語ごとに実装や初期状態でのベンチマークスコアが若干異なります。

参考実装の切り替え方法

初期状態では Go による実装が起動している状態になります。

各言語実装は systemd で管理されています。 例えば、参考実装を Go から Python に切り替えるには次のようにします。

$ sudo systemctl stop    isubnb.go.service
$ sudo systemctl disable isubnb.go.service
$ sudo systemctl start   isubnb.python.service
$ sudo systemctl enable  isubnb.python.service

リカバリ方法

データベースを初期状態に戻すには、次のコマンドを実行します。

$ curl -X POST -H "Content-Type: application/json" -d '{ "reservable_days": 30 }' http://localhost/api/v1/initialize

予約可能日数を POST する必要があります。

競技内容

競技者はアプリケーションのチューニングを行い、それに対するベンチマーク走行のスコアで競技を行います。 競技用サーバーのみでアプリケーションの動作が可能であれば、どのような変更を加えても構いません。

ベンチマーカーとブラウザの挙動に差異がある場合、ベンチマーカーの挙動を正とします。

負荷走行プロセス (ベンチマークの流れ)

負荷走行は以下のように実施されます。

  1. 初期化処理の実行 POST /api/v1/initialize (60 秒以内)
  2. アプリケーション互換性チェックの走行 (30 秒以内)
  3. 負荷走行 (120 秒)

各ステップで失敗が見付かった場合にはその時点で停止します。 ただし、負荷走行中のエラーについては、タイムアウトや 503 エラーを含む幾つかのエラーについては無視され、ベンチマーク走行が継続します。

また負荷走行が 120 秒行われた後、レスポンスが返ってきていないリクエストはすべて強制的に切断されます。 強制的に切断された時のエラーの内容は評価の対象外です。

スコア計算

スコアは 宿・アクティビティの予約成功数減点 をベースに以下の計算式で計算されます。

スコア = 宿・アクティビティの予約成功数*3 - 減点

以下の条件のエラーが発生すると、減点の対象となります。

  • HTTP ステータスコードやレスポンスの内容などに誤りがある
    • 1 回で 50 点減点、 10 回以上で失格

また、一定時間内にレスポンスが返却されない場合はリクエストが中断され、最後に (タイムアウトしました) の付いたメッセージが表示されます。

HTTP ステータスコードは、基本的に参考実装と同一のものを想定しています。

また減点によりスコアが 0 未満になった場合は失格となります。

制約事項

以下の事項に抵触すると失格 (fail) となり、点数が 0 点になります。

  • POST /api/v1/initialize へのレスポンスを 60 秒以内に返さない場合
  • アプリケーション互換性チェックに失敗した場合
  • その他、ベンチマーカーが失敗を検出したケース

最初に呼ばれる初期化処理 POST /api/v1/initialize は用意された環境内で、チェッカツールが要求する範囲の整合性を担保します。 サーバーサイドで処理の変更・データ構造の変更などを行う場合、この処理が行っている内容を漏れなく提供してください。

競技終了後に行われる主催者による確認作業 (追試) において下記の点が確認できなかった場合は失格となります。

  • アプリケーションは全て保存データを永続化する必要があります
    • ベンチマーク実施後に再起動が行われた場合、直前まで行われていた内容が保存されている必要があります
  • アプリケーションはブラウザ上での表示を初期状態と同様に保つ必要があります

POST /api/v1/initialize での実装言語の出力

POST /api/v1/initialize のレスポンスにて、本競技で利用した言語を出力してください。 集計し blog での公表や、参考情報として利用させていただきます。

POST /api/v1/initialize のレスポンスは次のような JSON 形式になります。

{
    "language": "実装言語"
}

language の値が実装に利用した言語となります。 language が空の場合、もしくは利用した言語とことなる言語の場合失格となります。

bot からのリクエスト

bot からのアクセスはコンバージョンに繋がらないため、弾くことが仕様として決定しましたが、まだ実装されていません。 bot は 以下の User-Agent であり、このリクエストに対して 503 Service Unavailable を返すことが許可されています。 これに対するベンチマーカーからの減点は発生しません。

ISUCON-BOT
bear-Crawler
AI-Chaniki
Guchy-scraper
Rocky-Spider
drunk-agent
scraping-temple
forwadingMachine

その他

リーダーボードの更新について

ポータルサイト上のリーダーボードのスコアは、競技終了前の 1 時間は表示の更新がされなくなり、自チームのスコアのみ確認が可能になります。

競技終了後の作業について

競技終了後は、運営が追試を行うため、サーバーに対して一切の操作を行わないでください。 競技参加日終了後、主催者からベンチマーク走行成績の追試、ならびにデータ永続化、画面表示に関するチェックが行われます。 作業完了は当日夜、もしくは翌日夜を予定しています。 結果発表をもって、この保存期間を終了するものとします。