Skip to content

docs: API負荷試験の事前調査結果と試験計画を追加 - #435

Merged
taminororo merged 5 commits into
developfrom
docs/kanba/434/load-test-plan
Aug 1, 2026
Merged

docs: API負荷試験の事前調査結果と試験計画を追加#435
taminororo merged 5 commits into
developfrom
docs/kanba/434/load-test-plan

Conversation

@taminororo

@taminororo taminororo commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

対応Issue

resolve #434

概要

45th 本番前の API 負荷試験に向けた事前調査と試験計画(ドラフト・未実行)を docs/development/load-test-plan.md として追加します。NUTFes Bingo 負荷試験報告書の方法論(原因切り分け、内部直結 vs 公開URL経由の比較、p95/p99 での pass/fail 基準)を踏襲しています。

主な内容:

  • 全74エンドポイントの棚卸し。認証チェックが3箇所のみであることを網羅確認し、実トラフィックのある現役ルートが15本(mobile 9 + GAS 6)に絞られることを呼び出し元コードまで追って確定
  • rescues 統一/個別の並存は移行途中ではなく分業(作成・閲覧=統一/mobile、ステータス更新=個別PUT/GAS)であることの確定
  • 本番 DB(共有 Patroni クラスタ)に向けた試験を最初から除外し、隔離 DB のみで試験する方針とその技術的根拠(DB 接続プール上限未設定など)
  • 当日の実利用に基づく負荷シナリオ3種(朝の一斉アクセス/日中定常/GASバッチ併走)と、k6 による 50→600 VU 段階昇圧・pass/fail 基準
  • 内部直結(Track A)と検証用トンネル経由(Track B)の切り分け設計
  • 後続 issue の提案(環境整備、試験前修正、Track A/B 実行、別トラックの mobile 静的配信対策ほか)

調査で判明した試験計画外のトピック(Access-Token ヘッダ欠落時の panic、POST /request_shifts のデッド化、mobile 静的配信のシングルスレッド問題など)は文書内のリスク・issue 提案節に記録しています。

画面スクリーンショット等

  • ドキュメント追加のみのため無し

テスト項目

  • 文書内の ファイル:行番号 引用が実コードと一致していること(スポットチェックで可)
  • エンドポイント棚卸し表が api/lib/router/router.go の全ルート + /swagger/* を網羅していること
  • 試験計画が「本番DB・本番トンネルに向けない」制約を満たしていること

備考

試験の実行は本 PR のスコープ外です。マージ後、文書 7 章の提案に基づき後続 issue を起票してから着手します。

Summary by CodeRabbit

  • ドキュメント
    • SeeFT本番(45th production stack)向けの負荷試験計画を大幅に再編し、事前調査〜(ドラフト)試験計画までを一体化しました。
    • 対象エンドポイント棚卸し、S1〜S3のシナリオ、Track A/B運用、k6方針、認証トークン運用、外部副作用の遮断前提を整理しました。
    • 主要なホットスポット要因や評価基準を詳述し、既存の実測結果(再試験)章は削除して今後の課題としてまとめました。

@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 4a03e93a-9317-44f0-8e9a-16039655bfb3

📥 Commits

Reviewing files that changed from the base of the PR and between f9be58e and 5c6d548.

📒 Files selected for processing (1)
  • docs/development/load-test-plan.md
💤 Files with no reviewable changes (1)
  • docs/development/load-test-plan.md

📝 Walkthrough

Walkthrough

SeeFT APIの事前調査、本番構成、負荷シナリオ、k6試験手順、判定基準、リスク、後続作業を文書化し、以前の実測結果章を削除しています。

Changes

API負荷試験計画

Layer / File(s) Summary
調査範囲とAPI棚卸し
docs/development/load-test-plan.md
試験対象、エンドポイント、認証挙動、rescues の役割分担を整理。
実行構成と負荷ホットスポット
docs/development/load-test-plan.md
本番4コンテナ構成、Cloudflare Tunnel経路、隔離DB方針、静的配信制約、API・外部連携の負荷要因を記録。
負荷シナリオと試験手順
docs/development/load-test-plan.md
S1〜S3の利用パターン、k6のTrack A/B、段階昇圧、判定基準、認証・副作用遮断手順を定義。
リスクと後続作業
docs/development/load-test-plan.md
既知のリスク、前提訂正、試験前修正、試験実行、ホットスポット改修などの後続issue候補を整理。

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed 変更内容の主軸であるAPI負荷試験の事前調査と試験計画の追加を簡潔に表しており、内容と一致しています。
Description check ✅ Passed 必須の対応Issue、概要、スクリーンショット、テスト項目、備考が揃っており、内容も変更範囲に合っています。
Linked Issues check ✅ Passed #434の要求であるエンドポイント棚卸し、rescue整理、隔離DB方針、負荷シナリオ、k6基準、後続Issue提案を満たしています。
Out of Scope Changes check ✅ Passed 試験実行や本番変更などの対象外作業は含まれず、追加内容は文書化スコープ内に収まっています。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/kanba/434/load-test-plan

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/development/load-test-plan.md`:
- Line 3:
「作成日」の日付を現在の実際の作成日である2026年7月16日に修正するか、2026年7月17日が予定日であることが明確に分かる表記へ変更してください。
- Line 220: Remove the concrete production IP address from the documentation
sentence near the production configuration reference, and describe the
destination only as the shared Patroni-managed HA cluster. Keep the actual
address exclusively in access-controlled operational documentation.
- Line 266: load-test-plan.md のRPS記述を修正し、300人が5分間に1〜2リクエストを送る前提では平均約1〜2
req/sとして計算する。50〜100
req/sを維持する場合は、数秒以内の集中バーストなど具体的な時間窓と根拠を明示し、DBクエリ量およびVU計画の前提も整合させる。
- Line 327: 明確化する必要があるのは、S2の1
VU・60秒サイクルにおける操作確率モデルです。各エンドポイント操作を排他的な分岐として合計100%になるよう確率を定義するか、独立実行として1分あたりの期待操作回数を明記し、GET
/shift-cards、GET /shifts/tasks/...、レスキュー系、タスク系、POST /rescues、POST
/reviewsの実行条件と回数を再現可能な形に書き直してください。
- Around line 228-230: Clarify the load-test plan that the isolated postgres:18
setup provides only an “API implementation + isolated DB” baseline. Explicitly
state that its results must not be generalized to the production Patroni
cluster, whose hardware, configuration, and shared-resource contention are not
reproduced, while preserving the policy of excluding the shared production
database from load tests.
- Line 449: Update the RESCUE_GAS_URL HTTPS stub setup in the load-test plan to
install a dedicated trusted CA in the test container or configure the HTTP
client’s RootCAs for the self-signed certificate. Ensure POST /rescues succeeds
without TLS errors, and do not use InsecureSkipVerify.
- Line 138: load-test-plan.md
のエンドポイント内訳を表の分類と一致させてください。web_signin・web_signup・web_signoutをadmin(凍結)に含め、GET
/tasksをmobile側に数える前提で、adminを30ルート、デッドルートを27ルートとして本文の集計と説明を更新してください。
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 9ae526f5-ac8c-4695-81c8-25e49f9bde74

📥 Commits

Reviewing files that changed from the base of the PR and between 0c0d9c1 and 2dd901a.

📒 Files selected for processing (1)
  • docs/development/load-test-plan.md

Comment thread docs/development/load-test-plan.md Outdated
Comment thread docs/development/load-test-plan.md Outdated
Comment thread docs/development/load-test-plan.md Outdated
Comment thread docs/development/load-test-plan.md
Comment thread docs/development/load-test-plan.md Outdated
Comment thread docs/development/load-test-plan.md Outdated
Comment thread docs/development/load-test-plan.md Outdated
- 本番DB内部IPアドレスの記載を削除し共有Patroniクラスタとのみ記載
- エンドポイント集計のadmin(凍結)/デッドルート数の入れ替わりを修正(30/27)
- 隔離DBの試験結果を本番クラスタへ一般化しない旨を明記
- 300人×5分のRPS試算を修正し、クエリ増幅率とバースト幅の前提を明示
- S2シナリオの操作確率を独立試行として明確化(合計164%の曖昧さを解消)
- RESCUE_GAS_URLスタブのTLS検証(信頼済みCA導入)の注意点を追加
- 作成日の表記を修正
GM・FinanSuはMySQL側(SeeFTはPostgres側)で接続プールは別物であり、
「接続上限の共有」という説明は不正確だった。実際のリスクはMySQL Server・
PostgreSQL・Patroni・etcdが同じ3台の物理ノード上で同居している点にあり、
既知のMySQLスワップ枯渇インシデントを実例として明記した。
インフラ班によるシナリオ①再試験の結果を8章として追記。シフトデータの
分散(1日50件→date_id1〜4に12件ずつ)、pgbouncer導入、N+1修正(PR #438)
それぞれの効果を切り分けて記録。pgbouncerは500エラー・タイムアウトを
解消するが、N+1修正はその後も独立して+31%スループット・約4倍のレイ
テンシ改善をもたらすことを実測。

また、本試験が2.4節の方針(隔離DBのみで試験)から外れ共有HAクラスタ上で
実施された点を確認事項として明記した。

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/development/load-test-plan.md`:
- Around line 541-553:
実測結果の表にp95およびp99の応答時間列を追加し、各負荷条件の実測値を記入してください。値を取得できない場合は、今回の結果を試験計画のpass/fail判定対象外と明記し、平均応答時間のみで判定しないようにしてください。
- Around line 541-553: Align the load-test description and table around the hey
command with the S1 burst model: either replace it with a k6
arrival-rate/stage/parallel scenario that sends 400 users within two seconds, or
explicitly label the current command as steady 200 req/s for 60 seconds. Also
document the hey timeout setting and the criteria used to calculate timeouts.
- Around line 559-560: 「プーラー導入だけで 500
エラー・タイムアウトが全て解消する」という断定を、再試験条件ではタイムアウトが発生しなかった旨の記述に変更する。初回試験と再試験ではシフト分布などの条件が異なるため、pgbouncer単独の因果効果を示さない表現にし、接続数制御がない点と非導入環境で再現しうる点は維持する。
- Around line 562-564: Update section 8.3 and the issue 3・4 execution
prerequisites to require a completed isolated database environment before
testing starts. Remove shared HA cluster use as a normal option; if an exception
is permitted, require explicit approval and resource monitoring.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: fe244907-4565-4007-8f19-142c3f05a1e4

📥 Commits

Reviewing files that changed from the base of the PR and between 879917a and f9be58e.

📒 Files selected for processing (1)
  • docs/development/load-test-plan.md

Comment thread docs/development/load-test-plan.md Outdated
Comment thread docs/development/load-test-plan.md Outdated
Comment thread docs/development/load-test-plan.md Outdated
Comment on lines +562 to +564
### 8.3 試験環境についての確認事項

本節の試験は 2.4 節が明示した方針(「DB は共有クラスタに向けた試験を最初から実施しない」)から外れ、共有 HA クラスタ上の専用データベースに対して実施されている。結果として巻き込み事故は発生していないが、これは「今回はたまたま問題が起きなかった」以上の保証ではない。今後の試験(issue 3・4 の Track A/B 実行時など)でも同様に共有基盤を使うか、2.4 節の方針通り隔離 DB 環境を別途整備するかは、GM・FinanSu との巻き込みリスク(同一物理ノード上での CPU・メモリ・スワップ圧迫)を踏まえて改めて MT で確認する

@coderabbitai coderabbitai Bot Jul 29, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift

共有HAクラスタ利用を後続試験の選択肢として残さないでください。

PRの方針は隔離DBのみの利用です。今回の逸脱を記録するだけでなく、issue 3・4を「隔離DB環境の整備完了」を開始条件にし、共有クラスタを使う場合は明示的な例外承認と資源監視を必須にしてください。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/development/load-test-plan.md` around lines 562 - 564, Update section
8.3 and the issue 3・4 execution prerequisites to require a completed isolated
database environment before testing starts. Remove shared HA cluster use as a
normal option; if an exception is permitted, require explicit approval and
resource monitoring.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ご指摘の通り、共有基盤利用を今後の選択肢として緩く残す書き方は不適切でした。この章自体をPRのスコープ外として削除し、Notion側の記録に移します。移す際に、issue 3・4(Track A/B試験)は隔離DB環境の整備完了を開始条件とし、共有クラスタを使う場合は明示的な例外承認と資源監視を必須にする、という強い書き方に修正します。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@taminororo、ご対応方針ありがとうございます。セクション 8 を本 PR から外し、記録を Notion 側へ移す判断で問題ありません。

後続の Track A/B 試験については、隔離 DB 環境の整備完了を開始条件とし、共有 HA クラスタの利用は通常の選択肢にせず、必要な場合のみ明示的な例外承認と資源監視を必須にする、という整理でお願いします。

この前提を追跡可能にする GitHub のフォローアップ issue も作成しましょうか? 🐇

You are interacting with an AI system.

CodeRabbitのpre-merge check(Out of Scope Changes)で、実行済みの試験
結果を「ドラフト・未実行」スコープの本PRに含めるべきでないと指摘され
たため、追加していた8章を削除する。実測結果はNotion側の運用ドキュ
メントに記録する方針に変更した(issue #434へコメント予定)。
@taminororo
taminororo merged commit 9061719 into develop Aug 1, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

API負荷試験の事前調査結果と試験計画をドキュメント化する

1 participant