ISUCON4の過去問をやる(1)
就活してて「ハッカソンでてるのでアイデアを形にするのが得意です。技術力は...」と言い淀むのがつらすぎたので、
前々からやってみたいと思っていたISUCONにでる決意を固めた。
(ISUCONはIikanji Speed Up CONtestというサーバチューニングコンテスト)
準備
ISUCONの過去問はAMIが公開されているが、偉大なるmatsuuさんがVagrantfileとDockerfileを用意してくれているので、
今回はそちらを利用させていただくことにした。
GitHub - matsuu/vagrant-isucon: ISUCON過去問を構築するためのVagrantfile集
GitHub - matsuu/docker-isucon: Dockerfile for isucon
最初使ったことのないVagrantを勉強がてら利用していたが、nginxのrpmが404だったりで所々手作業になってしまい、
なんとかWebアプリの起動までいったがメモしてなくて再現性がとれなかった。
なので最終的にイメージでバッコリ持ってこれるDocker版でやってみた。
Docker版ではReadmeに沿ってコマンド打てばシュッと立ち上がってくれてよかった。
score:949
Node版アプリの起動
既存のアプリはRubyなので、Nodeのアプリを立ち上げる。
https://gist.github.com/mirakui/e394ed543415852d34a6:ISUCON4 予選当日マニュアルにあるように、
ホスト側/etc/supervisor.confを書き換える。
その後、``sudo /etc/init.d/supervisord restart``だとinitプロセス(supervisord)をkillしてコンテナが落ちるので、
supervisorctl reload
をする。
ベンチマーカーの調査
$ tail -n +2 /tmp/isucon.node.log | awk '{ print $2 }' | sort | uniq -c 806 / 878 /images/isucon-bank.png 440 /login 74 /mypage 1 /report 878 /stylesheets/bootflat.min.css 878 /stylesheets/bootstrap.min.css 878 /stylesheets/isucon-bank.css
``/report``へのアクセスが1回しかさばけてない(?)。
とりあえず、以下の順序でやってみる。
- インデックスを貼ってみる(高速化 = インデックスという印象)
- 静的コンテンツをNode.jsに配信させない
- KVSとかmemcacheを使ってみる
インデックスを貼る
参考:漢(オトコ)のコンピュータ道: MySQLのEXPLAINを徹底解説!!
EXPLAIN句でインデックスが使われていないSQL(type=index OR type=ALL)を探す。
そこにインデックスを貼る。
score:1928
今後の方針
いろいろやっているがなかなか上手くいかない。
ISUCON初心者なのでしばらくはWriteup的なものを参考にしながら手を動かしていく。
次へつづく(10000点超えたら書く)