ISUCON10 の予選に参加した

unasuke, lime1024 とともにチーム「たんぽぽの上の刺身」として、Ruby 実装で参加した。最終スコアは 1302 点。 明確に役割を決めてはいなかったが、結果として自分は主にインフラ周りをみていた。

今年はリモートで参加したが特に不便は感じなかった。Zoom つなぎっぱなしで、あとは GitHub, Scrapbox, Discord でコミュニケーションをとっていた。思いの外画面共有は一度もしなかった。

やったこと

1 週間くらい前

  • 人々と ISUCON8 の予選問題をやりつつ ISUCON 便利ツールについて調べた

当日

開始まで

  • 緊張してきたので縄跳びをする

12:20 - 15:00

  • マニュアルを読む
  • unasuke がデプロイの準備とかしていた
  • alp, pt-query-digest, rack-mini-profiler, rack-lineprof, New Relic をいれた
    • New Relic は新 UI に慣れないのもあってあんまり使いこなせなかった
      • わりと他のツールで確認できる情報で事足りていた
    • alp, pt-query-digest の結果は GitHub の Issues に貼っていた
    • ブラウザで見れるようにしていなかったので rack-mini-profiler は出番がなかった
      • 面倒くさがらずにやったほうがよかったと思う
  • app サーバを 3 台に増やしてみる
    • そんなに効かない
    • top を見るととにかく DB がボトルネックになっている

15:00 - 18:00

  • とりあえず nginx で bot を弾く
    • 動作確認にアクセスログを見ていたらまったく bot からアクセスされていなかったことに気がつく
    • 一旦 revert した
  • POST /api/{chair,estate} の N+1 をなおす
  • nginx の error ログを見ていたら a client request body is buffered to a temporary file が出ていたので適当に client_body_buffer_size を増やす

18:00 - 21:00

  • JOIN していないしテーブルごとに DB わけられそうな気がしてくる
    • アプリはそんなに見ていなかったので人々に確認したら lime1024 が即答してきて助かった
      • 今回、他の人にアプリをほとんど任せられたのはやりやすかった
    • ソシャゲの開発経験がなかったら思いつかなかったかもしれない、ソシャゲはとにかくパーティショニングする
    • app (web), chair DB, estate DB の構成にして 720 点
  • unasuke が app サーバを puma に変更して 840 点
    • これそんなに効くと思っていなかった
  • アクセスログを見ると bot がいたので再び nginx で弾くようにした
    • 多分スコアが低いと出てこないんだと思う
  • New Relic とか切ってベンチマークガチャして 1302 点

2 年ぶりの参加で、以前よりは手を動かせたと思う反面、改めてまだまだ力不足であるとも感じた。最近は金の弾丸で殴れることが多くあんまりこういうことをする機会がないのだけれど、日頃からやってないと難しい。あと最近の MySQL 全然追えてなかった、Generated Columns 便利すぎる。