isucon9本戦に参加してきました
@Konboiと@tkuchikiとチーム流れ弾として参加し9位でした。
ISUCON9 本選 全てのチームのスコア : ISUCON公式Blog
チームメンバーの記事
事前準備
ISUCON9 予選問題の解説と講評を見ながら予選の振り返り
チームメンバーで集まって予選反省会
当日やったこと
いつも通りインフラ周りはtkuchikiにまるっとお願いして、自分はKonboiと一緒にアプリケーションの改善を進めました。
競技中いつも焦ってしまうので今回は 自作のポモドーロタイマーを導入して臨みました。
@hilotter はisucon中に25分作業したら5分休憩するらしいw
— こんぼい (@Konboi) October 5, 2019
予選と同じくアプリ自体は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を通じてまたひとつ成長できました。
運営の皆様ありがとうございました。