.
+- bench # ベンチマーカー
+- development # 開発環境用 docker compose
+- docs # ドキュメント類
+- envcheck # EC2サーバー 環境確認用プログラム
+- frontend # フロントエンド
+- provisioning # Ansible および Packer
+- scripts # 初期、ベンチマーカー用データ生成用スクリプト
+- validated # 競技後、最終チェックに用いたデータ
+- webapp # 参考実装
当日、アプリケーションマニュアルにて公開した Node.JSへのパッチは適用済みです。#408
ISUCON13で使用したTLS証明書は provisioning/ansible/roles/nginx/files/etc/nginx/tls
以下にあります。
本証明書は有効期限が切れている可能性があります。定期的な更新については予定しておりません。
- 競技者 VM 3台
- InstanceType: c5.large (2vCPU, 4GiB Mem)
- VolumeType: gp3 40GB
- ベンチマーカー VM 1台
- ECS Fargate (8vCPU, 8GB Mem)
リージョン ap-northeast-1 AMI-ID ami-041289d910c114864 で起動してください。 このAMIは予告なく利用できなくなる可能性があります。
本AMIでは、Node.JSへのパッチは適用済みとなり、ベンチマーカーも含まれています。
上記AMIが利用できなくなった場合は、 provisioning/packer
以下で make build
を実行するとAMIをビルドできます。packer が必要です。(運営時に検証したバージョンはv1.9.4)
Ansibleで環境構築を行います。すべての初期実装の言語環境をビルドするため、時間がかかります。下記のAnsibleの項目も確認してください。
- 起動に必要なEBSのサイズは最低8GBですが、ベンチマーク中にデータが増えると溢れる可能性があるため、大きめに設定することをお勧めします(競技環境では40GiB)
- セキュリティグループは
TCP/443
、TCP/22
に加え、UDP/53
を必要に応じて開放してください - 適切なインスタンスプロファイルを設定することで、セッションマネージャーによる接続が可能です
- 起動時に指定したキーペアで
ubuntu
ユーザーでSSH可能です- その後
sudo su - isucon
でisucon
ユーザーに切り替えてください
- その後
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で環境を構築することもできます。ただし、スペックや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
を付加することで、初期化処理と整合性チェックのみを行うことができます。アプリケーションの動作確認に利用してください。
フロントエンドの実装はリポジトリに存在していますが、競技の際に利用した動画とサムネイルについては配信サーバを廃止しており、表示できません。