ISUCON8予選問題をクラウドサービス上で動かしてみる
概要
Alibaba Cloud上でISUCON8予選問題を動かした。やり方のメモ。
Ansibleでプロビジョニング
公式のをカスタムしてあって練習に使いやすそうなリポジトリを見つけた。ありがたく使わせて頂く。
構成1:Ansible実行サーバもまとめて1サーバでやってみる(失敗)
CentOS VMインスタンスを1つ立て、自身にプロビジョニングさせたら全部1VMで済むのでは?と思いやってみた。(Windowsなので自機にansible実行環境を作るのも面倒だった)--connection=localを使う。接続も考えなくてよくて楽かも。
しかし、フォルダ同期をする箇所でrsyncが Permission denied (13)を吐いてしまい、色々試したがこれが解消できなかったため諦めた。
構成2:Ansible実行サーバと、プロビジョニング対象1サーバでやってみる(成功)
これはAnsibleがエラーを吐くことなく終了した。
手順
- VMインスタンス(CentOS 7.5 64 ビット)を2つ立てる(VM-A,VM-Bとする)
- VM-A->VM-Bの鍵設定
- VM-A上で、
- パスフレーズがキャッシュされるように設定
- git,ansible(2.7.9が入る),emacsインストール
- リポジトリクローン
- provisioning/README.mdの手順に従う。ansible-playbookを実行し、エラーが出なかったらOK。
今回書いたdevelopmentは下記の通り(VM-BのプライベートIPを書いた。例にはroot@があったが、なくてもいけるようである。)
[portal_web] 172.24.xx.xx [bench] 172.24.xx.xx [webapp1] 172.24.xx.xx
ちゃんとプロビジョニングできたかの確認
まずVM-Bにisuconユーザでログインする。(isucon/isuconでログインできるかと思ったができなかったので、鍵認証で。)
Webアプリ
Webアプリ「Torb」のサービスステータスを確認する。
$ systemctl | grep torb torb.go.service loaded active running isucon8 qualifier webapp in go
ブラウザからBのパブリックIPアドレスにアクセスしたが、接続できない。 curl localhostするとページが取れるので、アクセス制御の問題のようだ。 ECSのセキュリティグループ>ルール設定>ルールのクリック設定から、自端末のIPの接続を許可する。
これでブラウザからWebアプリにアクセスできた。
ベンチマーク
provisioning/README.mdの手順で、1発で動いた。スコアは932。
Webアプリサーバスペック
- Alibaba Cloud ECS
- CentOS 7.5 64 ビット
- ecs.t5-lc1m2.large 2 vCPU 4 GiB 基準パフォーマンス10 % Intel Xeon CPU 2.5 GHz
- イントラネット帯域 0.4 Gbps
- パケット転送速度 100,000 PPS
ベンチ実行時のモニタリングはこんな感じ。
このあと
動かせる環境が手に入ったので、改善を色々試してみたい。