今回のISUCON12は惨敗だったのであまり記憶も残ってない……。
songmu、toricls、motemen のメンバーでの挑戦も3度目となり、いよいよ優勝したい、そのために当然予選突破はしたい、という年だった。
今回も自分が構築、他の2人が作戦と実装、という役割分担。これはまあ、一年に一度の頻度でしかやってないなりに経験値がたまってきた。予選前にはきちんと予習をした年でもあって、そのおかげで初期構築はかなりスムーズにいったはず。1時間もせずにデプロイと計測ができる状態になったのは進歩だった。あとここ2回まともにやってなかった pprof に出番があったのもよかった。
今回の鬼門はやはり SQLite で、これをどうするか……というところで方針を強く決められなかったな~。
慣れてるし取り扱いやすい MySQL に移行するか、SQLite のまま進めてみるか、というところで複線で進めてしまって、MySQL 移行にチームの全力を注ぐことができなかったのがまずかった。たぶんどちらの方法でも予選突破は可能なのだと思うけど、SQLite のデータがかなりでかい、となったときに MySQL 運用の知識でサポートするみたいな動きが能力的にも思考的にも取れなかったのが根本的には敗因。
あとプロファイルを取るのは当然として、データの性質をちゃんと読み取ることができていないと打つ施策に意味がなくなってしまう。これ毎回思うんだけど、なかなか決まった時間のなかでやりきることができない。SQLite を MySQL 化するときに flock を愚直に消してしまって整合性が取れなくなり、そりゃそうかとなる、みたいな経験がしばしばある。
あとはやったことを羅列しておくぜ!
- alp, pt-query-digest, pprof を順に取って、取ってる間にソースを見てうーんこれ SQLite どうしようかってなったところからスタート。
- docker-compose は剥がさなかった。
- テナントの頭文字でアプリケーションサーバ分けたりするかな~と思ってnginxの設定書いてみたがとくに使わず。
- visit_history を Redis 化。
- ランキングの N+1 除去。
手元構築可能になったら復習して、来年も優勝狙うぞ~。一年間この不完全燃焼で暮らすの嫌なので、社内 ISUCON や野良 ISUCON があったら招待してください。