Closed6

ISUCON11予選の素振りをvultrで建てる

akkyakky

何故Vultrか?

多分安い。AWSは高い。

deployインスタンスの性能

app server

  • CPU optimized
  • CPU 2core
  • Memory 4GB
  • OS Ubuntu 22.04
  • その他は適当

benchmarker

  • CPU optimized
  • CPU 4core
  • Memory 8GB
  • OS Ubuntu 22.04
  • その他は適当
akkyakky

注意点

  • 最初はrootログイン&パスワード認証
  • ufwでport 22しか開いていない

portは22と443のみ開くのが想定だが、論理ネットワークを作るのが面倒だったので色々開いている

  • 22
  • 80
  • 443
  • 5000(JIA API)
akkyakky

setup

https://github.com/matsuu/ansible-isuconをforkしたものを利用してsetupする
go実装で挑戦するので、他の言語実装を削除したansibleファイルにする

sudo apt update
sudo apt install -y ansible git
git clone https://github.com/AkkyOrz/ansible-isucon.git
cd ansible-isucon/isucon11-qualifier
git switch feature/install-for-golang
ansible-playbook -i standalone.hosts --connection=local site.yml
  • feature/install-for-golangの変更点
  • sites.yml
    • langs.go以外の環境を削除
  • roles/contestant/tasks/isucondition.yml
    • isucondition-go.yml以外を削除
  • roles/contestant/tasks/mariadb.yml
    • mariadb-server-10.3がないので、maria-db-server-10.6に変更

https://github.com/isucon/isucon11-qualify/releases/tag/public
gitに入っていない最初に必要なデータは自分で用意してあげる必要がある

benchmarkの回し方 (for local)

$ sudo -i -u isucon
$ cd bench
$ ./bench -all-addresses 127.0.0.11 -target 127.0.0.11:443 -tls -jia-service-url http://127.0.0.1:4999
akkyakky

benchmarkとアプリケーションサーバを分離したい場合は、色々工夫する必要がある

自分の場合はDNSにAレコードを登録し、Let's Encryptで証明書を発行し、それをnginxで利用した

$ sudo apt install snapd
$ sudo snap install core; sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
$ sudo certbot --nginx
email: <mail>
Domain Name: <my-URL>
# $ sudo certbot renew --dry-run
/etc/nginx/sites-enabled/isucondition.conf
-     ssl_certificate /etc/nginx/certificates/tls-cert.pem;
-     ssl_certificate_key /etc/nginx/certificates/tls-key.pem;
+    ssl_certificate     /etc/letsencrypt/live/<my-url>/fullchain.pem;
+    ssl_certificate_key /etc/letsencrypt/live/<my-url>/privkey.pem;
sudo systemctl restart nxinx
~/bench/main.go
 var (
         allowedTargetFQDN = []string{
 -                "isucondition-1.t.isucon.dev",
 -                "isucondition-2.t.isucon.dev",
 -                "isucondition-3.t.isucon.dev",
 +               "<my-url1>",
 +               "<my-url2>",
 +               "<my-url3>",
         }   
 )
~/env.sh
 - # POST_ISUCONDITION_TARGET_BASE_URL="https://isucondition-1.t.isucon.dev"
 + POST_ISUCONDITION_TARGET_BASE_URL="<my-base-url>"
$ sudo systemctl restart isucondition.go.service
akkyakky

これで一応ベンチマークは回せる

akkyakky

certbotでそれぞれの証明書を発行する代わりにワイルドカード証明書を発行する

$ sudo apt install snapd
$ sudo snap install core; sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo certbot certonly --manual \
            --preferred-challenges dns-01  \
            --server https://acme-v02.api.letsencrypt.org/directory \
            -m mail@example.com \
            -d *.isucon.example.com

3ヶ月はもつらしい

このスクラップは2022/07/01にクローズされました