Skip to content

isucon/isucon13

Folders and files

NameName
Last commit message
Last commit date
Nov 27, 2023
Nov 1, 2023
Nov 27, 2023
Nov 23, 2023
Nov 27, 2023
Nov 23, 2023
Nov 28, 2023
Jul 10, 2024
Nov 21, 2023
Nov 25, 2023
Dec 31, 2023
Aug 17, 2023
Sep 21, 2023
Dec 5, 2023

Repository files navigation

ISUCON13 問題

当日に公開したマニュアルおよびアプリケーションについての説明

ディレクトリ構成

.
+- bench          # ベンチマーカー
+- development    # 開発環境用 docker compose
+- docs           # ドキュメント類
+- envcheck       # EC2サーバー 環境確認用プログラム
+- frontend       # フロントエンド
+- provisioning   # Ansible および Packer
+- scripts        # 初期、ベンチマーカー用データ生成用スクリプト
+- validated      # 競技後、最終チェックに用いたデータ
+- webapp         # 参考実装

ISUCON13 予選当日との変更点

Node.JSへのパッチ

当日、アプリケーションマニュアルにて公開した Node.JSへのパッチは適用済みです。#408

TLS証明書について

ISUCON13で使用したTLS証明書は provisioning/ansible/roles/nginx/files/etc/nginx/tls 以下にあります。

本証明書は有効期限が切れている可能性があります。定期的な更新については予定しておりません。

ISUCON13のインスタンスタイプ

  • 競技者 VM 3台
    • InstanceType: c5.large (2vCPU, 4GiB Mem)
    • VolumeType: gp3 40GB
  • ベンチマーカー VM 1台
    • ECS Fargate (8vCPU, 8GB Mem)

AWS上での過去問環境の構築方法

用意されたAMIを利用する場合

リージョン ap-northeast-1 AMI-ID ami-041289d910c114864 で起動してください。 このAMIは予告なく利用できなくなる可能性があります。

本AMIでは、Node.JSへのパッチは適用済みとなり、ベンチマーカーも含まれています。

自分でAMIをビルドする場合

上記AMIが利用できなくなった場合は、 provisioning/packer 以下で make build を実行するとAMIをビルドできます。packer が必要です。(運営時に検証したバージョンはv1.9.4)

Ansibleで環境構築を行います。すべての初期実装の言語環境をビルドするため、時間がかかります。下記のAnsibleの項目も確認してください。

AMIからEC2を起動する場合の注意事項

  • 起動に必要なEBSのサイズは最低8GBですが、ベンチマーク中にデータが増えると溢れる可能性があるため、大きめに設定することをお勧めします(競技環境では40GiB)
  • セキュリティグループは TCP/443TCP/22 に加え、 UDP/53 を必要に応じて開放してください
  • 適切なインスタンスプロファイルを設定することで、セッションマネージャーによる接続が可能です
  • 起動時に指定したキーペアで ubuntu ユーザーでSSH可能です
    • その後 sudo su - isuconisucon ユーザーに切り替えてください

Ansibleでの環境構築

ubuntu 22.04 の環境に対して Ansible を実行することで環境構築が可能です

対象サーバにて git clone してセットアップする方法

$ cd provisioning/ansible
$ ./make_latest_files.sh # 各種ビルド
$ ansible-playbook -i inventory/localhost application.yml
$ ansible-playbook -i inventory/localhost benchmark.yml

make_latest_files.sh ではフロントエンドおよび、ベンチマーカーのビルドが行われます。 Node.JSと、Go言語のランタイムが必要となります。

対象言語の絞り込み

Ansibleではすべての初期実装の言語環境をビルドするため、時間がかかります。

すべての言語が必要ない場合、 provisioning/ansible/roles/xbuildwebapp/tasks/main.yml および provisioning/ansible/roles/webapp/tasks/main.yaml で必要の無い言語をコメントアウトしてください。

docker compose での構築方法

開発に利用した docker composeで環境を構築することもできます。ただし、スペックやTLS証明書の有無など競技環境とは異なります。

$ cd development
$ make down/go
$ make up/go

go以外の環境の起動は down/{言語実装名} および up/{言語実装名} で行えます。

ベンチマーカーの実行

ベンチマーカーのビルド

docker composeの場合、ホストとなるマシン上でベンチマーカーをビルドする必要があります。

ベンチマーカーのビルドにはGo言語が必要です。

以下の手順でベンチマーカーをビルドをしてください

$ cd bench
$ make

macOSとLinux用のバイナリが作成されます。

ベンチマーカーの実行

docker compose 環境の場合、次のようにベンチマークを実行します

$ ./bench_darwin_arm64 run --dns-port=1053 # M1系macOSの場合

競技環境に向けては次のように実行します

$ ./bench_linux_amd64 run --target https://pipe.u.isucon.dev \
  --nameserver 127.0.0.1 --enable-ssl \
  --webapp {サーバ2} --webapp {サーバ3}

オプション

  • --nameserver は、ベンチマーカーが名前解決を行うサーバーのIPアドレスを指定して下さい
  • --webapp は、名前解決を行うDNSサーバーが名前解決の結果返却する可能性があるIPアドレスを指定して下さい
    • 1台のサーバーで競技を行う場合は指定不要です
    • 複数台で競技を行う場合は、--nameserver に指定したアドレスを除いた、競技に使用するサーバーのIPアドレスを指定してください
  • --pretest-only を付加することで、初期化処理と整合性チェックのみを行うことができます。アプリケーションの動作確認に利用してください。

フロントエンドおよび動画配信について

フロントエンドの実装はリポジトリに存在していますが、競技の際に利用した動画とサムネイルについては配信サーバを廃止しており、表示できません。

Links