ISUCON4 予選1日目で惨敗しました
チーム 流れ弾 で ISUCON4 予選1日目に参加しました。
最終スコアは、29500 くらいでした。
言語は Ruby です。
残念な結果でしたが非常に有意義な時間を過ごすことが出来ました。
主催の LINE株式会社様、
協賛のクックパッド株式会社様、株式会社データホテル様、Amazon Web Services, Inc. 様、
ありがとうございました。
事前準備
- 社内 IRC 用 nopaste ラッパースクリプト作成
- RPM 作成
- ngx_openresty-1.7.2.1
- Monit-5.8.1
- Redis-2.8.14
- the_silver_searcher-0.24.1
- VPC 作成
- 起動時にログインできず未使用
- Security Group作成
- monit によるアプリ永続化の検証・設定ファイル作成
- Unicorn
- Resque 2.0
- Resque 用 Redis の redis.conf & initscript 作成
- Nginx の設定ファイル作成
- MySQL 5.6 の設定ファイル作成
- 5.5 インストール済みでしたので未使用
- Unicorn, Resque の stop, start, restart スクリプト作成
- Capistrano3 の検証・準備
- local のファイルを deploy
- セットアップスクリプト作成
- app ユーザ作成
- authorized_keys 設定
- install rbenv(2.1.3)
- yum install
- install percona-toolkit
- sudoers 設定
- stop service
- ip6tables mdmonitor cpuspeed lvm2-monitor messagebus udev-post
- アクセスログ集計スクリプト配置 (https://github.com/tkuchiki/uri-counter)
- app ユーザ作成
- github の private repository 作成
当日
開始前
- Monster ポカリ作成
- ディスプレイセッティング
- 当日用マニュアル熟読
- benchmarker のラッパースクリプト作成
競技中
10時
- EC2 Instance 起動
- セットアップスクリプト実行
- ベンチ実行
- tag:benchmarker type:score success:6030 fail:0 score:1303
- アクセスログ集計
# 左からアクセス回数、response time の min, max, avg, URI 1208 0.002 0.014 0.004 /images/isucon-bank.png 1208 0.001 0.037 0.004 /stylesheets/bootstrap.min.css 1208 0.001 0.015 0.003 /stylesheets/bootflat.min.css 1208 0.000 0.009 0.002 /stylesheets/isucon-bank.css 1105 0.002 0.006 0.003 / 604 0.004 0.375 0.068 /login 104 0.003 0.098 0.083 /mypage 1 18.605 18.605 18.605 /report
- ソースコードを repository に push
- Capistrano でデプロイできるように設定
- アプリを Monit で監視するように設定
- Redis の設定
- Resque の設定
11時
12時
- rack-lineprof で profiling (@hilotter)
- workload 2 で bench 実行
- tag:benchmarker type:score success:12390 fail:0 score:2677
- INDEX はる
- tag:benchmarker type:score success:65110 fail:0 score:14064 (workload 1)
- workload あげたら fail するようになる
13時から14時
- Session に Redis を使ったら fail しなくなる
- ローカルポートが枯渇していたことに気が付き対応
- tag:benchmarker type:score success:109820 fail:0 score:23723 (workload ?)
15時
- Unicorn と Nginx の worker 数、その他設定調整
- tag:benchmarker type:score success:131940 fail:0 score:28503
- 64 worker, workload 9 が最適だと判明
- tag:benchmarker type:score success:131940 fail:0 score:28503
- MySQL の Warming を init.sh に仕込む
- http://www.songmu.jp/riji/entry/2014-09-22-gotandapm-mysql-warmer.html @Songmu さんありがとうございます
16時
17時
- nginx lua module の導入が間に合わないと判断して、細かい調整を行う
- 競技終了
18時
- Reboot しても動くようにしていたので、すぐに AMI を作成して提出
感想
- 事前準備をしっかりしていたので、負荷を計測して INDEX を貼るまではそれなりに早く対応できた
- しかし、それ以降は、あまりスコアを伸ばすことができなかった
- 他のチームの方々とのスキルの差が如実に現れた
- しかし、それ以降は、あまりスコアを伸ばすことができなかった
- ぶっつけ本番で、がっつり nginx lua module を使うのは無理があった
- 確実にできることをしたほうが良い
- ローカルポートの枯渇に気がつくのに時間がかかったのが致命的だった
- Unix Domain Socket...
- ローカルのファイルを Deploy する Capistrano の sample 作りました (https://github.com/tkuchiki/capistrano3-local)