32

GitHub - isucon/isucon8-qualify

 4 years ago
source link: https://github.com/isucon/isucon8-qualify
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

ISUCON8 予選問題

本番のマシンスペック

  • vCPU 2コア : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
  • メモリ 1GB
  • ネットワーク帯域 1Gbps
  • ディスク SSD

のVMを競技用に3台。同スペックのVMをベンチマーカー用に1台。

本番のOS/初期ミドルウェア

  • CentOS 7.5.1804
  • MariaDB 5.5.60
  • H2O 2.2.5

感想戦用、1VMでの動かし方

環境構築の詳細については provisioning を参照。

環境構築

xbuildで言語をインストールする。ベンチマーカーのためにGoは必須。他の言語は使わないのであればスキップしても問題ない。

cd
git clone https://github.com/tagomoris/xbuild.git

mkdir local
xbuild/go-install     1.10.3  $HOME/local/go
xbuild/perl-install   5.28.0  $HOME/local/perl
xbuild/ruby-install   2.5.1   $HOME/local/ruby
xbuild/node-install   v8.11.4 $HOME/local/node
xbuild/python-install 3.7.0   $HOME/local/python
xbuild/php-install    7.2.9   $HOME/local/php -- --with-pcre-regex --with-zlib --enable-fpm --enable-pdo --with-pear --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-pcre-regex --with-pcre-dir --with-libxml-dir --enable-opcache --enable-bcmath --with-bz2 --enable-calendar --enable-cli --enable-shmop --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-mbregex --enable-mbstring --enable-pcntl --enable-sockets --with-curl --enable-zip

ベンチマーカーの準備

Goを使うのでこれだけは最初に環境変数を設定しておく

export PATH=$HOME/local/go/bin:$HOME/go/bin:$PATH

ビルド

$ cd bench
$ make deps
$ make

初期データ生成

$ cd bench
$ ./bin/gen-initial-dataset   # ../db/isucon8q-initial-dataset.sql.gz ができる

データベース初期化

データベース初期化、アプリが動くのに最低限必要なデータ投入

$ mysql -uroot
mysql> CREATE USER isucon@'%' IDENTIFIED BY 'isucon';
mysql> GRANT ALL on torb.* TO isucon@'%';
mysql> CREATE USER isucon@'localhost' IDENTIFIED BY 'isucon';
mysql> GRANT ALL on torb.* TO isucon@'localhost';
$ ./db/init.sh

参考実装(perl)を動かす

初回のみ

$ cd webapp/perl
$ cpanm --installdeps --notest --force .

起動

$ ./run_local.sh

ベンチマーク実行

$ cd bench
$ ./bin/bench -h # ヘルプ確認
$ ./bin/bench -remotes=127.0.0.1:8080 -output result.json

結果を見るには sudo apt install jq で jq をインストールしてから、

$ jq . < result.json

既知の不具合

  • 管理画面から新規イベントを作成する際に、ベース金額を初期値から変更した場合、金額を数値型ではなく文字列型で POST してしまう JS のバグがありました。 初期実装を確認したところ、このバグに影響を受けるのは go 実装のみでした。また、ベンチマークには影響がないことが分かっているため、JS の修正は見送りました。 なお、JS を書き換えるとベンチマークが fail しますので JS の改修はお勧めしません。
  • 変数名等で使われている、座席を意味する単語 sheets の、正しいスペルは seats です。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK