ISUCON10本選 練習環境構築 ベンチマーカーを動作させる
ISUCON10本選に挑戦してみたくてまずは環境構築したメモ。
とりあえずベンチ実行してスコアが出てアプリが見えるところまでやった。
ISUCON10 本選当日マニュアルは以下。
isucon10-final/manual.md at master · isucon/isucon10-final · GitHub
インスタンス起動、SSH接続
「ISUCONの過去問にチャレンジするためのシンプルな環境構築」を使う(ISUCON9予選) - kavo’s diary と同様にami-0f7362c1bbc7e30ecを使ってインスタンスを立ち上げ、SSH接続。
isuconユーザに切り替え。
$ sudo -i -u isucon
サービス起動
立ち上げた直後は起動していないので、起動する。 参考実装の切り替え方法
sudo systemctl enable --now xsuportal-web-golang.service sudo systemctl enable --now xsuportal-api-golang.service
仮想ポータルアクセス
どこから仮想ポータルを見られるのかは当日マニュアルとアプリケーションマニュアルをざっと見ただけだと分からなかった。が、xsuportal-api-golang.serviceのログで9292で受けてるっぽいことに気づく。
$ sudo systemctl status xsuportal-api-golang.service ... http server started on [::]:9292
curlしてみると弾かれる。ポート開けてなかった。
$ curl localhost:9292
AWSコンソールで9292を開けたらcurlでhtmlが返ってきた。
$ curl localhost:9292 <!doctype html><html lang="ja" class="has-background-grey-lighter"><head><title>XSUCON Portal</title><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="xsu:api-base-url" content="/"/><link href="/packs/vendor.css" rel="stylesheet"></head><body><div id="app"></div><script src="/packs/vendor.js"></script><script src="/packs/audience.js"></script></body></html>i
ブラウザでhttp://x.x.x.x:9292/ を開くとタイトルだけ出て中身はカラのページが見えた。
ベンチマーク実行
ポータルの中身はカラに見えるのは以下の理由のよう。
なお、初期状態ではアプリケーションの動作に必要なデータが不足しているため、アプリケーションをブラウザから動作確認するためには、一度負荷走行を実行してください (後述)。
Running a benchmarker locallyのコマンドを参考に実行してみる。そのままだと下記エラーになる。3000番ポートで待ってなさそうだし、本番と同じ構成になってなさそう。
dial tcp [::1]:3000: connect: connection refused
$ sudo lsof -i:3000 $
試しにtargetのポートをapiが受けてる9292に変更し実行してみる。
$ ./bin/benchmarker -exit-status -target app.t.isucon.dev:9292 -host-advertise local.t.isucon.dev -tls-cert ../secrets/cert.pem -tls-key ../secrets/key.pem 16:56:17.000277 ISUCON10 benchmarker e858b2588a199f9c7407baacf48b53126b8aeed6+dirty 16:56:17.001955 ===> PREPARE 16:56:26.754919 Language: go 16:56:26.754936 HTTP: http://app.t.isucon.dev:9292/(tls=false) 16:56:26.754942 gRPC: localhost:50051 16:56:26.755009 ===> LOAD 16:56:26.755049 LOAD INFO Registration Open at: 2021-06-16 16:56:27 +0000 UTC Contest Start at: 2021-06-16 16:56:37 +0000 UTC Contest Freeze at: 2021-06-16 16:57:17 +0000 UTC Contest Ends at: 2021-06-16 16:57:27 +0000 UTC 16:57:36.762065 ===> VALIDATION 16:57:47.793989 ERR: validation: critical: http: Get "http://app.t.isucon.dev:9292/api/contestant/dashboard": context canceled 16:57:47.794491 ERR: validation: timeout: critical: timeout: http: timeout: Get "http://app.t.isucon.dev:9292/api/contestant/dashboard": context deadline exceeded 16:57:47.794515 ERR: validation: timeout: critical: timeout: http: timeout: Get "http://app.t.isucon.dev:9292/api/contestant/dashboard": context deadline exceeded 16:57:47.794636 ERR: validation: critical: http: Post "http://app.t.isucon.dev:9292/api/login": context canceled 16:57:47.794724 ERR: validation: critical: http: Get "http://app.t.isucon.dev:9292/api/contestant/dashboard": context canceled 16:57:47.794820 ERR: validation: critical: http: Get "http://app.t.isucon.dev:9292/api/contestant/dashboard": context canceled 16:57:47.794877 ERR: validation: critical: http: Get "http://app.t.isucon.dev:9292/api/contestant/dashboard": context canceled 16:57:47.794933 ERR: validation: critical: http: Get "http://app.t.isucon.dev:9292/api/contestant/dashboard": context canceled 16:57:47.794989 ERR: validation: critical: http: Get "http://app.t.isucon.dev:9292/api/contestant/dashboard": context canceled 16:57:47.795089 ERR: validation: critical: http: Get "http://app.t.isucon.dev:9292/api/contestant/dashboard": context canceled 16:57:47.805110 ===> SCORE Count: admin-answer-clarification: 8 admin-get-clarification: 8 admin-get-clarifications: 73 audience-get-dashboard: 370 create-team: 10 enqueue-benchmark: 118 finish-benchmark: 109 get-clarification: 8 get-dashboard: 60 join-member: 20 list-notifications: 1491 post-clarification: 8 resolve-clarification: 8 (1290 * 1.0) + 37 - 400(err: 0, timeout: 405) Pass: false / score: 927 (1327 - 400) Fail reason: Critical error
Pass: falseとあるが、一応スコアは出ている。
ポータルサイトもタイムラインチャートやリーダーボードが見えるようになった。
ユーザとしてログインして管理者・競技者のページも見えた。
XSUCON Admin
XSUCON Contestant
最低限ベンチ動作とアプリが見えるようになった。