ISUCON6参加記
kstm(カスタム)でISUCON6の本選に参加してきた。今回も学生枠。
isuconお疲れさまでした会なう!
— 馬 (@Goryudyuma) 2016年10月21日
明日死ぬからね!!
…がんばろ…
@bgpat_ @fono09 @Goryudyuma チームkstm
明日よろしくお願いしまーす! pic.twitter.com/mnFHrcESs9
サークル部屋にあったわにさんも一緒に参加
よろしくお願いします #isucon pic.twitter.com/UiKqnRNm26
— bgpat (@bgpat_) October 22, 2016
予選はDBオンメモリ化とかやって(あんまり効果なかったけど)なんとか学生枠の9番目に滑り込んだ
学生枠ギリギリで本選出場決定!!#isucon
— bgpat (@bgpat_) September 18, 2016
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!
するつもりだったのだが...
結果
学生1位、全体5位!!
— bgpat (@bgpat_) October 22, 2016
楽しいコンテストでした、運営の方々ありがとうございました。
また来年もよろしくお願いします。#isucon pic.twitter.com/eeEtig4AO8
おまけ
超適当なタスク管理表の様子 pic.twitter.com/H9LwKh89UN
— bgpat (@bgpat_) October 22, 2016