Giter Site home page Giter Site logo

s-you / isucon7-qualify Goto Github PK

View Code? Open in Web Editor NEW

This project forked from keens/isucon7-qualify

0.0 3.0 0.0 40.08 MB

ISUCON7 予選問題の参照実装とベンチマーカー

License: MIT License

Makefile 1.10% Go 45.12% Shell 0.28% Ruby 5.55% HTML 13.99% JavaScript 6.27% Perl 4.78% PHP 5.64% CSS 0.62% Python 4.38% Rust 12.26%

isucon7-qualify's Introduction

ISUCON7 予選問題

予選マニュアル

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

ディレクトリ構成

db      - データベーススキーマ等
bench   - ベンチマーカー、初期データ生成器
webapp  - 各種言語実装
files   - 各種設定ファイル

環境構築

Ubuntu 16.04 のものをなるべくデフォルトで使います。

まずは isucon ユーザーを作り、そのホームディレクトリ配下の isubata ディレクトリに リポジトリをチェックアウトします。

$ sudo apt install git
$ git clone https://github.com/isucon/isucon7-qualify.git isubata

nginx と MySQL は Ubuntu の標準のものを使います。

$ sudo apt install mysql-server nginx

各言語は xbuild で最新安定版をインストールします。まず xbuild が必要とするライブラリをインストールします。

$ sudo apt install -y git curl libreadline-dev pkg-config autoconf automake build-essential libmysqlclient-dev \
	libssl-dev python3 python3-dev python3-venv openjdk-8-jdk-headless libxml2-dev libcurl4-openssl-dev \
        libxslt1-dev re2c bison libbz2-dev libreadline-dev libssl-dev gettext libgettextpo-dev libicu-dev \
	libmhash-dev libmcrypt-dev libgd-dev libtidy-dev

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

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

mkdir local
xbuild/ruby-install   -f 2.4.2   /home/isucon/local/ruby
xbuild/perl-install   -f 5.26.1  /home/isucon/local/perl
xbuild/node-install   -f v6.11.4 /home/isucon/local/node
xbuild/go-install     -f 1.9     /home/isucon/local/go
xbuild/python-install -f 3.6.2   /home/isucon/local/python
xbuild/php-install    -f 7.1.9   /home/isucon/local/php -- --disable-phar --with-pcre-regex --with-zlib --enable-fpm --enable-pdo --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 --with-mcrypt --enable-pcntl --enable-sockets --with-curl --enable-zip --with-pearAA

ベンチマーカーの準備

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

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

ビルド

go get github.com/constabulary/gb/...   # 初回のみ
cd ~/isubata/bench
gb vendor restore
make

初期データ生成

cd ~/isubata/bench
./bin/gen-initial-dataset   #isucon7q-initial-dataset.sql.gz ができる

データベース初期化

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

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

初期データ投入

zcat ~/isubata/bench/isucon7q-initial-dataset.sql.gz | sudo mysql isubata

デフォルトだとTCPが127.0.0.1しかbindしてないので、複数台構成に対応するには /etc/mysql/mysql.conf.d/mysqld.cnfbind-address = 127.0.0.1 になっている 場所を bind-address = 0.0.0.0 に書き換える。

nginx

$ sudo cp ~/isubata/files/app/nginx.* /etc/nginx/sites-available
$ cd /etc/nginx/sites-enabled
$ sudo unlink default
$ sudo ln -s ../sites-available/nginx.conf  # php の場合は nginx.php.conf
$ sudo systemctl restart nginx

参考実装(python)を動かす

初回のみ

$ cd ~/isubata/webapp/python
$ ./setup.sh

起動

export ISUBATA_DB_HOST=127.0.0.1
export ISUBATA_DB_USER=isucon
export ISUBATA_DB_PASSWORD=isucon
./venv/bin/gunicorn --workers=10 -b '127.0.0.1:5000' app:app

予選本番では、 /etc/hosts に各ホスト名を書いて、環境変数は systemd から env.sh ファイルを読み込んでいました。 この辺は適当に使いやすいように設定してください。

ベンチマーク実行

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

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

$ jq . < result.json

備考

systemd に置く設定ファイルなどは files/ ディレクトリから探してください。

使用データの取得元

isucon7-qualify's People

Contributors

kechol avatar keens avatar ma2gedev avatar methane avatar ryota-sakamoto avatar yokogawa-k avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.