学生枠、今までありがとう #ISUCON9

ISUCON9予選突破できたのでブログ書いてます

今年から学生枠が無くなって、去年の予選の順位的に本戦出場はぶっちゃけ無理だと思ってました
盛大に砕け散って学生枠の再開を声高に主張するつもりだったのに……

本題ですが、僕はチーム(百万円ドリブン)の中では一番Goに慣れているということもあってアプリのコードの変更をメインで担当しています

やったことを時系列順で簡単に書くと

  • pprofを仕込む(10:20)
  • getCategoryByID のDBアクセスをなくす(12:40)
  • getNewItems, getNewCategoryItems のN+1を解消する(14:30)
  • なんか不要そうな FOR UPDATE を postBuy から消す(17:20)
  • 上手くいくか怪しかったけど getItem からDBアクセスをなくす(17:40)
  • もっと FOR UPDATE を大胆に消してみる→エラーが出たので大急ぎで戻す(18:05)

という感じです
最後ので戻せなかったら予選敗退してたのでマジ危なかった

つらつらと書きましたが、今回の最大の勝因はbcryptの計算専用に2台のサーバを使うという大胆な戦略を提案・実装してくれたチームメンバーのaokabi & murataにあると思ってます。感謝。

f:id:nakario_jp:20190909223307p:plain
複数台化した時点(16:42)で跳ね上がってる

その他良かった点

  • キャンペーン還元率に早い段階で気付けた(ISUCON8本戦でSNSシェア率による負荷コントロールの仕組みに気付けなかったので気をつけてた)
  • pprof、pt-query-digest、netdata、alpなど複数のソースからボトルネックを判断した(過去問練習で見えてるボトルネックと原因が別の場所でハマった)
  • 定期的に声掛けして方針を立てた(ISUCON7本戦で何時間も一人で悩み続けた反省)
  • 大きいホワイトボードを用意した
  • カレーを食べた

こうして見ると、学生枠で本戦に出場させてもらえた経験がとても活きているので、これからISUCONを始めようという人たちのためにも学生枠が廃止されたのは残念です

学生枠、今までありがとう