きんめも

語彙力がヤバイ

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点超えたら書く)