ISUCON6参加記

kstm(カスタム)でISUCON6の本選に参加してきた。今回も学生枠。

サークル部屋にあったわにさんも一緒に参加

予選はDBオンメモリ化とかやって(あんまり効果なかったけど)なんとか学生枠の9番目に滑り込んだ

10:00 - 11:00

競技が始まっても問題がデプロイできなかったのでレギュレーション読んでた。修正後も1回デプロイに失敗してちゃんと動くようになったのがたしか11時くらいだった気がする。

11:00 - 12:00

docker-compose.yml 見たり Node.jsのサーバー読んだりして構成把握してた。Node.jsでHTTPS使ってたりappにリバースプロキシしたりしてたのでとりあえずNginx入れる方針に。

前回みたい(学生チーム全Fail)にはなりたくなかったので5台あるサーバーの1つ目だけ使ってました。(実はwebappが1つ目のサーバーにしかなかったことには後で気づいた)

appをgolang実装に切り替えてスコアが4,174=>6,630に

12:00 - 13:00

appは全部馬さんに任せて、NginxからNodeとappにリバースプロキシする設定をした。

まずNginxいれて80番ポート開けてみたものの、外から接続できないという事態に。どうやらAzureのファイアウォールのせいだったみたいなんですが、このときは気づかなくて2つ目のサーバーにNginxいれて443ポートで接続できるのを確認。NodeのTLSの処理を全部Nginxに移して、あとはgzip圧縮したファイルを静的配信とかした。

このあたりでスコアが9,000くらいまで上がるようになって1位2位あたりをうろうろ。

13:00 - 14:00

ベンチ回しながらtopを眺めてるとMySQLとNodeが結構CPU食ってたのでそれぞれ3つ目4つ目のサーバーに移した。ディレクトリごとscpでコピーして`docker-compose up -d`すればいいだけなのでめっちゃ楽だった。

13:30くらいにスコア16,000を超えて全体で1位に。

14:00 - 15:00

/img/:idが重かったのでなんとかキャッシュできないかなーと。

馬さんがstrokeのキャッシュ、ふぉのさんがNginxでキャッシュ、僕は馬さんがコード書いてるのを見ながら頷くみたいな担当で動いてた。

NodeがCPU使いきれてなかったのでdocker-compose.ymlに同じコンテナをもう一つ建てるように書いた。

このときスコア18,000くらい。

15:00 - 16:00

Nginxでのキャッシュがうまくいかず、点数があがらない

strokeのキャッシュが実装完了して20,000点くらい。

16:00 - 17:00

ちょっと早めの再起動試験。

systemdの設定とか書くの忘れててDockerがあがってこなかった。このタイミングで再起動試験しててよかった。

なんかやることもなくなってきたのでDBのオンメモリキャッシュとか書き始めた。

17:00 - 18:00

DBのオンメモリキャッシュは何故かFailするのでボツ。

17:20にはもう一回再起動試験をしてちゃんと上がってくるのを確認。あとはベンチガチャ何回か引いて20,000点以上が出たらそのまま放置してFinish!
するつもりだったのだが...

結果

f:id:bgpat:20161028080205p:plain

おまけ