📝

ISUCON13に参加しました

2023/12/02に公開

こんにちは。matchasongです。
2023/11/25(土)に開催されたISUCON13にチーム「慎太郎」の一員として参加しました。
自分の動きを中心に、記録を書いていきます。


メンバー

@kangaechu インフラ
@yktakaha4 アプリ
@matchasong SQLインデックス追加、ベンチマーク実行


結果

14,995点で、149位でした。


情報

言語:Go
エディタ:Goland (GitHub Copilot), たまにVSCode


やったこと

事前練習

5回ぐらい半日づつ、リモートで、過去問の練習+プロファイラ(pprof)の導入練習をしました。
チームとしては、修正箇所を勘頼みではなく計測したいということで、pprofを使うようにしました。
私個人としては普段あまりコーディングをしていない&特にGoはほぼ書いたことがなかったので、色々教えてもらっていました。

当日

  • 9:30 集合
    無事起床に成功。

  • 10:00 競技開始
    @yktakaha4さんと私は、レギュレーションとアプリケーションマニュアルの読み込みに入りました。
    @kangaechuさんは、CloudFormationの実行と設定ファイル/ログ集計設定を行いました。

  • 〜10:20 最初のベンチマーク実行
    自分はベンチ担当だったので、初期状態でベンチマークを実行しました。
    ベンチマーク実行の仕方と、初期状態の得点を確認することができました。
    @yktakaha4さんは、アプリのコードを読んで改善ポイントの洗い出し(// FIX MEのコメントを記載)に移ります。

  • 〜10:50 コードチェックスクリプトをコミット
    GitHub Actionsのスクリプトをコミットしました。
    プルリクに対して、Goのフォーマット、静的解析、ビルドを自動実行する設定です。
    昨年@yktakaha4さんが作ってくれたものを、パスとGoのバージョンを変えてコミットしました。
    (単純作業ですが、3回ぐらいミスりました...)
    このぐらいの時間に、@kangaechuさんはログ集計設定を完了していて、
    Discordのチーム内のチャットに点数と各種ログが流れるようになりました。
    上々なスタートでした。

  • ~12:00 インデックスを付与(その1)
    MySQLのスロークエリログで上位に上がっていたクエリにインデックスを付与していきました。GitHub Copilotが補完してくれていい感じでした。


GitHub CopilotがCREATE INDEX文をパッと書いてくれたの図

  • ~14:00 インデックスを付与(その2)&カラム追加
    @yktakaha4さんがつけてくれた改善ポイントのうち、インデックスに関連する部分を確認して、足りていないところを追加しました。
    また、iconのハッシュ計算を毎回やっている箇所について、前もってDBに保存しておけば良いよね、ということでiconテーブルにicon_hashカラムを追加しました。

  • 14:30頃 順位が急上昇
    リーダーボードに表示されて一同テンションが上がリます。

〜16:00 コミットをマージしてベンチマーク実行
@yktakah4さんが。N+1の解消/画像のハッシュ計算について修正をしてくれたので、自分はベンチマークの実行をしていました。

〜17:00 FOR UPDATEの位置変更...できず
空き時間を予約するロジックの中で、FOR UPDATE文を実行している箇所があったので、ロック範囲を縮める修正をしたもののスコアが変わらずRevert。
Goのコード修正に貢献できるかと思ったのですが、失敗。残念でした。

~18:00 競技終了
@kangaechuさんがログ出力停止を実施。
自分は何度かベンチマークを流して点数が大きくブレないことを確認して、時間終了となりました。
...再起動を試していないことに後で気づいてドキドキしました。


感想

  • ○初動がいい感じだった
    前回、前々回に比べて、全員最初の動きがスムーズでした。練習(準備)の成果が出たようです。

  • ○インデックスの付与は独立して動けた
    前回から担当していて、ここは動けたので良かったです。

  • ○GitHub Copilotが便利だった
    SQL書く時に、かなり正確な補完が効いたので便利でした。

  • △ベンチのログは見ていたが、何をすれば良いかに繋げられなかった
    「最後まで見ていた視聴者数」「DNS名前解決数」「XXXエラー」のような文言は見ていたのですが、どう活かすかまで繋げられず...。
    マニュアルに明記されていない箇所でも、XXXX数を増やせば点数が増えるのでは、といった仮説を立てて動いても良かったのかもと思いました。

  • △アプリのコード修正はできなかった
    練習はしていたのですが、本番でのGoのコード修正はできず...。次回はアプリの修正もできるようになりたいです。

  • △最後1時間の動き方
    再起動を試していないことに競技終了後に気付きました。再起動試験でFailしないか心配でした。やることをリストアップしておいた方が良さそうと思いました。

楽しかったです。来年も参加したいです!

Discussion