ISUCON13に作問チームとして参加しました

https://isucon.net/archives/57801192.html に、作問チームとして参加しました。 ISUCONとして初めての関わり方が作問チームだったというのは非常に貴重な経験だったと思うので、 ここにその体験記をまとめておきます。

ISUCON13作問チームは大きく分かれて以下のような役割が存在しました。

  • 問題サーバ … 初期実装のGoバックエンドを開発する
    • チーム全体でボトルネック案や機能を検討することもあるが、基本的にはこのチーム主導で行う
  • ベンチマーカ … 計測用のベンチマーカアプリを実装する
    • これには実際に計測を行うベンチマーカアプリと、その上位に存在するsupervisorが含まれる
  • 配信 … フロントエンドで表示される配信動画サーバ
  • インフラ … 競技者用および運営側のインフラ整備

この中で、私は問題サーバに所属し、以下のような部分に取り組みました。

  • 作問プロセス序盤~中盤でコンセプト設計に参加
  • Go実装のベース作成
  • いくつかのボトルネック案を提案

逆に、それ以外のタスクは他の方に任せっきりとなってしまいました。 特に、問題作成佳境における最終調整にはほぼ貢献できませんでした。

作問プロセス全体を通して、バックエンドの開発経験、特にGo API実装やクエリ発行等のアンチパターンを学ぶことができたのは良かったです。 開発していく中で想定解を考えつつ作るのはISUCONの考え方に触れるきっかけにもなりました。 (想定解は今後公開される公式ブログをご覧ください)

初期実装を作る過程で、ISUCONの過去問にいくつか取り組みました。特にprivate-isuには非常にお世話になりました。

また、短期間で要件を満たすようにアプリを作り上げるのはハッカソンに近いものがあり、 そういった経験も多くはなかったのでとても楽しかったです。

ISUCON当日はオンラインで張り付いていましたが、 競技終了後DiscordやXで盛り上がっている様子を見てとても嬉しかったです。 改めて、参加者および運営、スポンサー等関係者の皆さん本当にありがとうございました。

やはりバックエンド・ISUCONともに経験が浅かったということもあり、 ユニークでやりがいのあるボトルネック案はもっと用意できたかもしれないな、という反省があります。 また、実装上バグを埋め込んでしまうこともあり、レビューではたくさんご指摘をいただきました。

わかりやすいバグだけではなく、他言語移植のタイミングで顕在化する問題もいくつかありました。 これはまさにISUCON経験が活きるもので、わかりやすいものだとGoで int を使うのではなく int64 を使いましょうとか、 特定のライブラリを用いると他言語で同様のことを実現するのが難しい、などです。

次回以降も機会があれば(他言語移植等で)作問に関わりたいとも思いつつ、 ぜひ競技者として関わってみたいな、と思うようになりました。 チームメンバーを集められないとしても、個人でも参加してみたいですね。