ISUCON5の予選抜けました
出よう出ようと思っていて、毎年気づいたら終わっていたISUCON。
ついにチーム「へしこず」として出ることができました。
そして……予選突破しました!やった!
開始前は Node.js でやろうとチームで話していたのですが、
#isucon Node.js を書きたがってるんだ pic.twitter.com/GyeGtBxdwT
— りちゃ (@rch850) 2015, 9月 26
心が Node.js を書きたがってるんだ……ということで、書けずに、Ruby で戦いました。Sinatra に mysql2-cs-bind なら俺達でも分かる!
※ラップトップが4台見えますが、ひとつは観戦者のものです。
※なんで心叫かってーと、ふくもく会その8〜心がもくもくしたがってるんだ〜の会場で参戦してたからです。
最初に素の状態でベンチマークとって、200点前後だということが分かり、そこからチューニング開始。開始から2時間半ぐらい、前回のスコアが800点ぐらいだったから、次は2000点ぐらい行くかなと思ったベンチマークで、突然の3000点超えで暫定トップに。
「あれ、3000点超えてる!?」
「えっ!?他のチームまだ2000点台だし、これってそういうこと?」
と、割と混乱気味なまま、本戦出場条件の「1日目,2日目でそれぞれ指定の点数に最も早く到達したチーム」を達成て本戦出場が決まりました。
やったことはというと、
- 役割を分担して、こまめにお互いの進捗を共有
- Chrome devtools でざっとサイトのパフォーマンスの様子見
- nginx のログ出力項目増やしてベンチマーク走らせてボトルネックを見つける → GET / に的を絞る
- インデックス効いてないクエリを見つけてインデックス張る
- MySQL はスローログ取って mysqldumpslow で重いクエリを探す
- ruby のコードでもログを取って重い処理を探す
- nginx, unicorn, ruby でそれぞれチューニング
ざっとこんなところです。最終スコアは12616でしたが、そのほとんどが
の3点で稼いだスコアだと思います。
あまり元の設計を変えないスタンスでチューニングしていたんですが、20000点などに伸ばしていくには、そもそもなところを書き換えていかないといけないんだろうなーと感じました。
本戦に行っても、島村卯月チームへしこず、頑張ります!
運良く今週末には今週末の福井技術者の集いがあるので、今回の予選の話とかをしようと思います。