だいぶたってしまったけど、ISUCON9 の思い出を供養しておく。
サザン不定形ストーリーズというチームで出て、結果は予選敗退だった。
isucon.net
チーム編成と事前準備
出るぞとだけ言ってギリギリまで何もしてなかったのだけど、直前に誘ってもらったチームがあったので入れてもらった。
事前に集まって、多少準備をしてた。これまでチームメンバは出たことあるメンバで組むことが多かったので、コミュニケーションチャンネルなど1から整理していったのが新鮮だった。
当日の動き
当日、明らかに一番コード書けないのが自分だったので、足回りの整備と作戦とりまとめみたいな動きを主にしていた。
- 10:00 ルール読み
- 他のメンバは、最速でアプリケーション動かしてコードを読む担当、Alibaba Cloud でインスタンス起動して全員サインインできるようにする、などやってもらってた
- 10:30 nginx ログ設定だけ入れて初期ベンチ回す
- 11:00 作戦会議
- 各自の作業概要共有、大まかな方針確認。
- ここでキャンペーン試行錯誤すべきか、なども会話できた。順調だった。
- 初手の改善
- 自分は、デプロイからスムーズに動くまでをやってた。手元からログ解析打てるようにする、デプロイ直しつつ nginx で static file 配信、ついでにルーティングファイルからエンドポイントごとに nginx location 分離。画像アップロード先修正忘れてたので対応したり。
- 他の2人で N+1 ペアプロ、カテゴリを初期化時にオンメモリで持つように。
- キャンペーンの値もちょっといじってみて様子を観察。
- 13:32 作戦会議2
- 複数台化、リクエスト試行錯誤
- 14:30 作戦会議3
- 16:00 作戦会議4
- /buy 分割したことでボトルネックが移った。買えないときに素早く失敗してる。
- item 関連、user 関連タイムラインが遅いのでインデックス貼っていく。/login は遅いけど bcrypt だしレギュレーション的にどうしようもないねって会話した。
- 17:00
- 18:00
- 最後に fail しなかったそれっぽいスコアで終了。たしか2700くらい
- 3710 がベストスコアだった。
振り返り
- 準備はまあまあよかった
- 起動してデプロイしてログを観察する、まで含めて
- 問題は適度に複雑でよかった
- 最初は状況認識はできていた
- 上と合わせて、良くも悪くもISUCONに慣れてるということ
- 途中から焦りがでた
- APIのリトライ、あとでやろうとして忘れ去っていた案があった。
- 落ち着いてシステムの理解ができていなかった
- ホワイトボードに描いてコードも眺めてたつもりだったが、結果としては状態遷移の考慮が甘かったのが敗因となっている。
- ユーザ視点、システムが実現しようとしていること、を落ち着いて考えることが必要だった。自分はそこができた立場だっただけにちょっと悔しい。
- Go 言語にみんな慣れてなかった
まとめ
こういうアドレナリンが出るイベント、たまにはいいなと思った。現場感覚持っておきたい。そろそろ決勝に行くのもきつくなってきた最近だけど、もう一回くらい行きたいな。