📖

ISUCON14 振り返り

2024/12/09に公開

参加の目的

  • ここ最近自分でコードを書いたりする機会がなかった
  • ちょうど時間に余裕があった

ので、1人で挑戦してみることにした。

事前準備

セットアップ手順のスクリプト化

一人で出るので、極力自動化できるところは自動化しないと時間が足りないのでそのあたりに注力して進めた。

特に

  • 初期設定
  • モニタリング

あたりは自動で集められるようにして集約。
元同僚のisucon用のコードを元に作成していった。
https://github.com/rerost/isucon-magic-powder

  • セットアップスクリプト
  • 初期設定でやるTODOリスト

あたりを管理。

ちなみにこれを利用することでこんな感じでDisocrdにモニタリングで必要な情報が流れる。

これを使って過去のISUCONで試してみていい感じだった。
ちなみにpprotein を利用しようと思ったが、僕は

  • Chromeのタブを開きすぎてしまう
  • ベンチ回している間にコードを書いたりしていたので、通知が来てほしい

というのもあり、Discordに寄せた。

当日

結果

スコアが1.5万くらいで順位が70位くらい。
https://isucon.net/archives/58837992.html

悔しい。

  • Nginx + App
  • DB
    の2台構成

振り返り

戦略

極力コードはLLMに任せて、自分はベンチを回すのとボトルネック特定と変更の方針を建てるやり方を取っていた。
が、このやり方はレスポンスタイムがネックになっているパターンでのみハマり、

  • マッチングアルゴリズムを改善する
  • ある程度規模を超えたコードの修正

ではハマらなかった。

事前準備について

  • sqldef の実行箇所も書いておくべきだった。変にハマった
  • CREATE TRIGGER周り。ここの管理方法とか事前に考えられていればよかった

自己管理

  • 8時間ぶっ続けは持たない。息抜きを挟めばよかった
  • 飯を食う暇がないので片手で食べられるお菓子をもっと用意しておくべきだった
  • リーダーボードが気になって仕方なかった。途中まで良かったのでなおさら
  • 難しい箇所を読む時間と余裕がなかった

問題との向き合い方

  • どこがボトルネックになっているか不明なままだった
    • 並列数・App・DBあたりは常に尋ねるようにすればよかった
  • マッチングアルゴリズム部分、まずはこれを一つのクエリから、とやってしまったのが良くなかった
  • マニュアル読んでなかった: https://gist.github.com/wtks/8eadf471daf7cb59942de02273ce7884
    • time.Sleepを入れてしまった
  • マッチングアルゴリズムより先にマッチング部分のクエリを改善してしまった

タイムラインとスコア

感想

システムだけではなく、ユーザーのことを考える必要のある良い問題だった。
だいたいこの順でボトルネックを解消していけば良いなどが見えてくるが、今回は本当に見えず、ここから改善していけば良いんだろうか..?みたいな気持ちがずっと続いていたが実際の仕事でもそうなので非常に良い問題だったと思う。

配信でも言われていたが数十万点まで行けるくらいやりがいのある問題とのことなのでぜひ、感想戦をやっていきたい。

Discussion