GithubHelp home page GithubHelp logo

rosylilly / private-isu Goto Github PK

View Code? Open in Web Editor NEW

This project forked from catatsuy/private-isu

0.0 1.0 0.0 2.97 MB

社内ISUCON

License: MIT License

Ruby 2.79% HTML 1.26% CSS 30.53% Makefile 0.01% Go 3.01% JavaScript 60.75% Shell 0.05% PHP 1.17% EJS 0.29% CoffeeScript 0.02% SCSS 0.08% Dockerfile 0.04%

private-isu's Introduction

社内ISUCON 改

2016年に作成した社内ISUCONリポジトリを2021年に手直ししました。

[2016年開催時のブログ]

過去ISUCON公式で練習問題として推奨されたことがある。

[2021年開催時のブログ]

ISUCON」は、LINE株式会社の商標または登録商標です。

ディレクトリ構成

├── ansible_old  # ベンチマーカー・portal用ansible(非推奨)
├── benchmarker  # ベンチマーカーのソースコード
├── portal       # portal(非推奨)
├── provisioning # 競技者用・ベンチマーカーインスタンスセットアップ用ansible
└── webapp       # 各言語の参考実装
  • manual.mdは当日マニュアル。一部社内イベントを意識した記述があるので注意すること。
  • public_manual.md は事前公開レギュレーション

OS

Ubuntu 20.04

起動方法

  • Ruby/Go/PHPの3言語が用意されており、デフォルトはRubyが起動する
    • Node.jsは現状メンテナンスされていない
    • AMI・Vagrantで他の言語の実装を動かす場合はmanual.mdを参考にする
  • AMI・Docker Compose・Vagrantが用意されている
    • 手元で適当に動かすことも難しくない
    • Ansibleを動かせば、他の環境でも動くはず

AMI

セキュリティのアップデートなどは行わないので自己責任で利用してください。Node.jsのセットアップはskipしているので、Ruby/PHP/Goのみ利用可能。

以下のAMI IDで起動する。リージョンは『Asia Pacific (Tokyo)』。

用途 AMI ID 推奨インスタンスタイプ
競技者用 ami-01cd6a7a1991f1621 c4.large
ベンチマーカー ami-04a7c6eb0387c8bc8 c5.xlarge
  • 競技者用インスタンスはメモリが1GBに制限されるため、c4.largeなどコンピューティング最適化インスタンスで一番小さいインスタンスでの利用を推奨
    • t系インスタンスだと不安定になるみたいなので注意
  • 競技者用インスタンスは80番ポートを公開する必要がある
  • ベンチマーカー用インスタンスはコンピューティング最適化インスタンスでそれなりのスペックでの利用を推奨
    • 以下のコマンドでベンチマーカーが実行できる
$ sudo su - isucon
$ /home/isucon/private_isu.git/benchmarker/bin/benchmarker -u /home/isucon/private_isu.git/benchmarker/userdata -t http://<target IP>

最初はRuby実装が起動しているので、他の言語を使用する場合はmanual.mdを見て作業すること。

手元で動かす

いずれの手順もディスク容量が十分にあるマシン上で行うこと

  • アプリケーションは各言語の開発環境とMySQL・memcachedがインストールされていれば動くはず
  • ベンチマーカーはGoの開発環境とuserdataがあれば動く
  • Dockerとvagrantはメモリが潤沢なマシンで実行すること

MacやLinux上で適当に動かす

MySQLとmemcachedを起動した上で以下の手順を実行。Ruby実装以外は各言語で読み替えること。

curl -L -O https://github.com/catatsuy/private-isu/releases/download/img/dump.sql.bz2
bzcat dump.sql.bz2 | mysql -uroot

cd webapp/ruby
bundle install --path=vendor/bundle
bundle exec foreman start
cd ../..

cd benchmarker/userdata
curl -L -O https://github.com/catatsuy/private-isu/releases/download/img/img.zip
unzip img.zip
cd ../..

cd benchmarker
make
./bin/benchmarker -t "http://localhost:8080" -u $PWD/userdata
# ./bin/benchmarker -t "http://<競技者用インスタンスのグローバルIPアドレス>/" -u $PWD/userdata

# Output
# {"pass":true,"score":1710,"success":1434,"fail":0,"messages":[]}

Docker Compose

アプリケーションは以下の手順で実行できる。dump.sqlを配置しないとMySQLに初期データがimportされないので注意。

cd webapp/sql
curl -L -O https://github.com/catatsuy/private-isu/releases/download/img/dump.sql.bz2
bunzip2 dump.sql.bz2

cd ..
docker-compose up

デフォルトはRubyのため、他言語にする場合はdocker-compose.ymlファイル内のappのbuildを変更する必要がある。PHPはそれに加えて以下の作業が必要。

cd webapp/etc
mv nginx/conf.d/default.conf nginx/conf.d/default.conf.org
mv nginx/conf.d/php.conf.org nginx/conf.d/php.conf

ベンチマーカーは以下の手順で実行できる。

cd benchmarker/userdata
curl -L -O https://github.com/catatsuy/private-isu/releases/download/img/img.zip
unzip img.zip
rm img.zip
cd ..

docker build -t private-isu-benchmarker .
docker run --network host -i private-isu-benchmarker /opt/go/bin/benchmarker -t http://host.docker.internal -u /opt/go/userdata

Linuxの場合はhost.docker.internalが使用できないので、ip aしてdocker0のインタフェースでホストのIPアドレスを調べて指定する。以下の場合は172.17.0.1を指定する。

3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:ca:63:0c:59 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:caff:fe63:c59/64 scope link
       valid_lft forever preferred_lft forever

Vagrant

手元にansibleをインストールしてvagrant upすればprovisioningが実行される。

benchからappのIPアドレスを指定して負荷をかける。

# appのIPアドレスを調べる
$ vagrant ssh app
$ ip a

3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:37:2b:2c brd ff:ff:ff:ff:ff:ff
    inet 172.28.128.6/24 brd 172.28.128.255 scope global dynamic enp0s8
       valid_lft 444sec preferred_lft 444sec
    inet6 fe80::a00:27ff:fe37:2b2c/64 scope link
       valid_lft forever preferred_lft forever

# benchで負荷をかける
$ vagrant ssh bench
$ sudo su - isucon
$ /home/isucon/private_isu.git/benchmarker/bin/benchmarker -u /home/isucon/private_isu.git/benchmarker/userdata -t http://172.28.128.6

最初はRuby実装が起動しているので、他の言語を使用する場合はmanual.mdを見て作業すること。

競技者用・ベンチマーカーインスタンスのセットアップ方法

自分で立ち上げたい人向け。provisioning/ディレクトリ以下参照。

他の言語実装

private-isu's People

Contributors

catatsuy avatar edvakf avatar fujiwara avatar kazeburo avatar shinyasakurai avatar t-cyrill avatar walf443 avatar whywaita avatar

Watchers

 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.