あなたがISHOCON1に興味を持ち続けている間
AWSのイメージのみ作成しました。
- AMI: ami-0d00b2a9a38084503
- Instance Type: c5.xlarge
- EBS-optimized: Yes
- Root Volume: 8GB, General Purpose SSD (gp2)
参考画像
例:
$ ssh -i ~/.ssh/your_private_key.pem ubuntu@xx.xx.xx.xx
$ sudo su - ishocon
$ ls
benchmark #ベンチマーカー
db_init.sh #DBの初期化スクリプト(後で説明)
webapp #最適化するアプリケーション
$ cd ~/webapp/ruby
$ unicorn -c unicorn_config.rb
$ cd ~/webapp/python
$ gunicorn -c gunicorn_config.py app:app
$ cd ~/webapp/go
$ go get -t -d -v ./...
$ go build -o webapp *.go
$ ./webapp
$ cd ~/webapp/scala/ishocon1
$ sbt
> ~;jetty:stop;jetty:start
$ cd ~/webapp/nodejs/
$ npm install
$ npm start
TypeScript で書かれています。
~/webapp/nodejs/dist/
以下に生成された JavaScript ファイルを直接編集する場合は、 npm start
する前に package.json
から TypeScript のコンパイル処理を取り除いて下さい。
diff --git a/webapp/nodejs/package.json b/webapp/nodejs/package.json
index eb5e600..600ba5e 100644
--- a/webapp/nodejs/package.json
+++ b/webapp/nodejs/package.json
@@ -7,7 +7,7 @@
"scripts": {
"clean": "rm -rf ./dist/*",
"test": "echo \"Error: no test specified\" && exit 1",
- "start": "tsc && node dist/index.js",
+ "start": "node dist/index.js",
"build": "tsc"
},
"keywords": [
# メンテナンスされておらず動きません
$ cd ~/webapp/crystal
$ shards install
$ crystal build app.cr
$ ./app
これでブラウザからアプリケーションが見れるようになるので、IPアドレスにアクセスしてみましょう。
/login
からログインが可能です。
- email: ishocon@isho.con
- password: ishoconpass
スコアを計測するためのベンチマーカーの使い方の説明です。
$ cd ~/
$ ./benchmark --workload 3
- ベンチマーカーは並列実行可能で、負荷量を指定することができます。
- 何も指定しない場合は3で実行されます。
- 初期実装でスコアは100点前後になると思います。(workloadが3の場合)
- 並列度が高い場合は1分以上経っても終了しない場合がありますが、スコアには影響ありません。
3306 番ポートで MySQL(8.0) が起動しています。初期状態では以下のユーザが設定されています。
- ユーザ名: ishocon, パスワード: ishocon
- ユーザ名: root, パスワード: ishocon1
別のバージョンのMySQLに変更することも可能です。
その場合、初期データの挿入は
$ cd
$ ./db_init.sh
で行うことができます。
既存のMySQLを使う限りはこれを実行する必要はありません。
- スコアはベンチマーカーが1分間の負荷走行を行っている間にレスポンスが返された
(status code 200 * 1点) - (status code 4xx * 20) - (status code 5xx * 50)
により算出されます。 - ただし、200の場合でもベンチマーカーが期待するレスポンスを返す必要があります。 期待しないレスポンスが返ってきた場合にはその場でベンチマーカーが停止し、スコアは表示されません。
- 1分間の負荷走行の前にベンチマーカーが
/initialize
にアクセスをして、データの初期化を行います。 初期化で1分以内にレスポンスが返らない場合には無効となりスコアは表示されません。
- インスタンスを複数台用いることや、規定のインスタンスと別のタイプを使用すること。
- ブラウザからアクセスして目視した場合に、初期実装と異なること。
- 目視で違いが分からなければOKです。
- ベンチマーカーを改変すること。
- DOMを変更する
- ベンチマーカーにバレなければDOMを変更してもOKです。
- 再起動に耐えられない
- インスタンスを再起動して、再起動前の状態を復元できる必要はありません。