去年の: ISUCON13参加した
できたこと
- 事前準備
- デプロイする君の実装
- gitopsみたいに、GitHubにプッシュすると自動的にサーバ側でファイルを取ってきてもらって、指定した場所に配置してくれる
- 当日はデプロイのことをほとんど気にしなくてよかった
- 使いそうなライブラリの実装
- 期限付きキャッシュとかOTELとか
- ほとんど出番がなかった。。
- OTEL可視化
- OCB使って事前に必要そうなレシーバを詰め合わせたバイナリを準備しておいた
- SigNozのサーバを立てた
- go-chiとsqlxのOTEL連携をシュパッと入れて、すぐ見れるようになったのはめちゃくちゃ良かった
- トレースを見たり、エンドポイントごとのp50,p95,p99レイテンシとかリクエスト数がみれて、どのエンドポイントに手を付けるかわかりやすかった
- N+1も見えてた
- デプロイする君の実装
- インデックスを設定した
- SigNozで見ながら、怪しい箇所にインデックスを付けていった
できなかったこと
- 実装の改善はほとんど何もできなかった
- internalGetMatchingをなんとかしないとスコアが伸びないんだろうなと思っていたけれど、エラーでベンチが通らず、一向に前へ進まずに終わってしまった
- 具体的には、椅子に使っているかどうかのステータスをつけようとしたのだけど、椅子が完了通知を受け取る前に新しいrideの通知を受け取りました、的なfailが出るようになってしまった
- たぶんどこかで凡ミスなんだろうな…。。
- 初期実装から大幅に変えるのは諦めて、マッチング自体のロジックを調節できたはず
- というかsystemdからリクエストしているんだね〜というのにまったく気づいてなかった、、マニュアルちゃんと読もう
- 具体的には、椅子に使っているかどうかのステータスをつけようとしたのだけど、椅子が完了通知を受け取る前に新しいrideの通知を受け取りました、的なfailが出るようになってしまった
- SSEのあたり
- 当日マニュアルでも触れられていたけれど、変えたほうがサーバ負荷が減ってよさそう
- スコアに直結するかはわからない…
- internalGetMatchingをなんとかしないとスコアが伸びないんだろうなと思っていたけれど、エラーでベンチが通らず、一向に前へ進まずに終わってしまった
- 複数台構成
- デプロイする君が微妙に不便でうまくいっていない
改善したいこと
- 課題感や優先度の交通整理
- デプロイする君
- systemd力が足りてなくて、初手のデプロイする君を準備するまで午前中をほとんど使い切ってしまっていた
- 今年のコードがあるので、来年はよくなるはず
- 事前に練習会をしておけばこんなことには…
- 複数台構成とか微妙に使い勝手が悪いので要改善
- systemd力が足りてなくて、初手のデプロイする君を準備するまで午前中をほとんど使い切ってしまっていた
- SigNozがすぐ応答なくなる
- ベンチマーク動かしたときにトレースやメトリクスが飛びすぎてサーバが耐えられないんだとおもう
- バッチサイズを調節したり、サンプリングしたりが必要かもしれない
- 諦めてSaaSいれるか、スケールするようなソリューションに切り替えたほうがよさそう