ISUCON 11 の予選にチーム「四年ぶり二度目」 でまよ子くんとしょラーさんと参加した。チーム名の由来はこのメンバーで参加するのが四年ぶり二度目だから。

自分個人としては通算で5回目ぐらいの参加。 今回初めて一般枠で 最終22位 で予選通過できた。

やったこととか感想とかをメモしておく。

準備

とりあえず言語を何にするかという段階で候補に Ruby, Python, Go, Rust が候補に上がった。 これまでは Ruby か Python で参加していたが、違う言語で参加したい気持ちがあった。

Rust は特に読みにくい言語でもないし参考実装も提供予定、他の2人も行けそうということでせっかくなので Rust で参加することにした。 本番までに10予選の環境を作ってみたりコード読んだりして軽く練習した。

本番

やった対応は大体 しょラーさんの記事 にある通り。 自分は主にインフラ周りをみながら、二人がやっている実装のデバッグを手伝ったり、進捗をみたりしていた。 競技時間中はずっと Discord で通話をしながら、困ったことがあったら画面共有して確認していた。 Zoom or Skype 使おうみたいな話もしていたが結局 Discord で事足りた。

反省

  • しょラーさんも書いている通り、最終的に12万点近く点数は出たが、あえて /api/trend にバグを残すことで ユーザーを増やさず、その分他で点数を伸ばす、というハックをしてしまった。これがなかったら半分以下のスコアだったはず。 若干すっきりしないが結果オーライだとは思う。ユーザーが増えたときにスコアが落ちてしまった原因については本戦までにベンチ環境作って検証しておく。
  • 初動で用意した Ansible script で MariaDB を飛ばし、 CloudFormation から再構築するという失敗をした。
  • Conditional GET について知らず、image を取り出す実装をした。スコアにはつながったが、結構時間かかってしまったのでもったいなかった気もする。
  • /api/condition の重要性(初期状態で9割のレスポンスを落としていること)に気づくのが遅く、対応ができなかった。 バルクインサートにしたり、キューイングしたりやりようは思いついたが気づいた時点での残り時間が少なく断念。

所感

Rust で実際どのくらい行けるのかわからなかったが、使ってみて正解だった気がする。

また毎度のことながら課題として用意された問題のうち、5/10ぐらいを解いたところで時間が来てしまう。 そして毎年知らない技術要素に出会う。

問題や形式も楽しく、お祭り感もありいいコンテストだなと思います。開催ありがとうございます。

本戦もがんばります。