isucon9本戦に参加してきました


@Konboiと@tkuchikiとチーム流れ弾として参加し9位でした。

ISUCON9 本選 全てのチームのスコア : ISUCON公式Blog

チームメンバーの記事

事前準備

当日やったこと

いつも通りインフラ周りはtkuchikiにまるっとお願いして、自分はKonboiと一緒にアプリケーションの改善を進めました。

競技中いつも焦ってしまうので今回は自作のポモドーロタイマーを導入して臨みました。

予選と同じくアプリ自体はKonboiとtkuchikiが得意なGoを選択しつつ、自分はRubyのコードを読んで改善点を探すことにしました。

  • マニュアルを読む
  • rubyアプリのローカル環境を構築
    • 今回docker-compose.ymlが用意されていたので素早くローカル環境が作れました
  • SequelProからMySQL8に接続するとアプリが落ちたのでアップデート
  • searchが遅すぎてベンチが完走しないのでKonboiと調査
    • DBのindexがほぼ0だったのでindexを追加
    • utils/get_available_seatsの予約情報取得を外出し

この対応を入れたことでベンチが通るようになったので、availableDaysを増やしてどこで頭打ちになるかを試しました。

これで7000点くらいまでスコアが伸びて束の間の1位に。

4ポモ終わったので15分の休憩時間。

この間にお弁当を食べました。塚田農場弁当ごちそうさまでした。

その後、/api/train/reserveをなんとかせねばとメンバー全員で見たものの、これといった案が浮かばずひとまずKonboiにガッツリ見てもらうことに。

その間に自分とtkuchikiで他の部分で改善点がないかを探し、以下の対応をしました。

  • 追加/更新処理のtransaction範囲を狭くする対応
  • reservationsテーブルにdeparture_idとarrival_idを追加しget_available_seatsのクエリを改善
  • reservationsテーブルにseat_class、departure_time、arrival_timeを追加しmake_reservation_responseのクエリを改善

ただ、後半2つは導入後にベンチがコケるようになったのでrevert。

再起動試験はtkuchikiがしれっと済ませてくれていたのでギリギリまでアプリ改善の時間があったもののスコアを伸ばすことができず最高スコア10,229点で終了しました。

振り返り

ポモドーロタイマーを導入したおかげか冷静にコードを眺めて改善を進めることができました。

とはいえ後半は集中しすぎて5分休憩を忘れていたので、次回参加時はちゃんと最後まで5分休憩を挟む余裕を持ちたいものです。

また、自分がRubyで実装したものをKonboiとtkuchikiにGoに移植してもらう戦法はタイムロスが大きいのと、二人の負担が増えてしまうので、やはりGoで統一してチームに貢献できるようになったほうがいいなと感じました。

tkuchikiやKonboiのようにGoでツールを作って身体になじませて行くところから始めます。

さいごに

毎度のことながら非常に濃密な時間を過ごすことができました。

isuconを通じてまたひとつ成長できました。

運営の皆様ありがとうございました。