ISUCON5予選
例年どおり、 @f440 とチームを組み、優秀な若者 @corrupt952 を加えて挑戦しました。
準備
などの準備を一ヶ月くらい前から始めていました。
当日
- @yoppiblog、@corrupt952はアプリの調査
- @f440はインフラ整備、アクセスログやslow queryの解析
と役割を決めて走り始めます。 1時間ほど立って、調査と解析結果から方針を決めます。
- MySQLが圧倒的に重たいのでここをなんとかしないと先にすすめない
- 初期データ量が2GB弱と結構ボリュームがあるのでオンメモリ実装は厳しそう
という判断からRubyの参考実装をもとに正攻法で行くことに決めました。
1時間ほど経過...
アプリ全体を見渡すと、足あとはアプリと切り離すことが簡単そう、ロジックもRedisのSorted Setを使うだけで管理できると当たりを付けられたので Redisを使い始めようとしたのですが、indexを適切に効かせたSQLだけでも処理が重たくないと判断したので、Redisをここで投入はしませんでした。
4時間ほど経過...
indexページのSQLに苦戦、 あなたの友だちの〜
あたりをむりやり1SQLで処理させようと頑張ったのが敗因でした。
ここで3、4時間近く費やすことになります。
JOINすると、 comment
と body
を含めるととてもクエリが重たくなるので、そこは無理せず where inであとから取ってくることで高速に処理できるなぁと
残り1時間...
トップページも改善できずにただ時間だけが過ぎて行き、最終スコアが2000点弱という悲惨な結果でした。
反省点
毎回反省していることで、ひとつのことにこだわり過ぎないというのがありますが、今回もそれでした。 メンバーとあまり連携がとれなかった、というのもあります。 しかし、なんだかんだと今年もISUCONを楽しめました。運営の方々、ありがとうございました。
使ったツールなど
hackpad
- リアルタイムWiki。予選までチーム内での情報共有に結構便利でしたが、当日見ている暇がありませんでした。
- https://hackpad.com/
kataribe
- nginxなどのログ解析ツール。リクエストタイムを元に集計してくれるのが大変便利です。
- https://github.com/matsuu/kataribe
wrk
- http負荷ツール
- https://github.com/wg/wrk