# SCS-021　系統效能與非功能（Performance／NFR）程式設計規格（跨域）

| 項目 | 內容 |
|---|---|
| 文件編號 | SCS-021 |
| 版本 | 1.0 |
| 狀態 | **已核定（規格先行·跨域）** |
| 對應需求 | `BRD-003` 效能（授權 P99 ≤ 200ms 等）、吞吐（≥ 1,000 TPS）、容量規劃、效能測試（12 項，對應 `TRP-001 §10`） |
| 技術棧 | Java 21 + Spring Boot 4.1.1（參 `CSP-006`）；Redis 8 快取；Kafka 4.3.1 非同步；Oracle 權威＋Postgres 讀模型（CQRS） |
| 關聯文件 | `BRD-003`、`SAD-006 §4`（容量）、`TRP-001 §10`、`CSP-006` |

---

## 1. 對應需求（效能類 NFR，實測目標值）

| 類別 | 指標 | 目標 | 來源 |
|---|---|---|---|
| 效能 | 本行卡授權處理 P99 | ≤ 200 ms | `BRD-003`（G4／G5） |
| 效能 | 交易路由決策 P99 | ≤ 5 ms | `BRD-003`（G4／G5） |
| 效能 | 端到端授權（含機構往返）P95 | ≤ 500 ms | `BRD-003`（G5） |
| 吞吐 | 授權交易（未分庫分表） | ≥ 1,000 TPS | `BRD-003`（G5） |
| 吞吐 | 即時支付引擎 | > 2,000 TPS | `BRD-003`（G5） |

> 其餘 NFR（可用性、容量規劃 3 項、效能測試 12 項）見 `BRD-003` 完整追蹤表，均對應 `SAD-006` 與 `TRP-001 §10`。

---

## 2. 效能設計策略

| 策略 | 說明 | 對應技術 |
|---|---|---|
| **快取** | 高頻讀取（產品參數、額度、卡狀態）經 Redis 8 快取，降低 Oracle 壓力 | Redis 8（`CSP-006`） |
| **連線池** | HikariCP 連線池調校，避免連線耗盡 | Spring Boot 4.1.1 |
| **非同步** | 通知、點數、對帳經 Kafka 事件解耦，削峰 | Kafka 4.3.1（`CSP-006`） |
| **CQRS 讀寫分離** | 寫側 Oracle（`CC_*`）；讀側 Postgres（`proj`/`rpt`）承接高頻查詢 | `SAD-003 §9` |
| **Saga 協調** | 跨服務長事務經 `common-saga` 狀態機，避免分散式鎖定 | `common-saga` |
| **閘道限流** | `api-gateway`（8100）限流／熔斷，保護下游 | Spring Cloud 2025.1.3 |

---

## 3. 關鍵路徑效能目標

- **授權路徑**：`api-gateway` → `bff` → `authorization-service` →（快取命中）本地決策；P99 ≤ 200ms。Stand-in 降級時仍須維持目標（`SCS-001` §8）。
- **路由決策**：≤ 5ms（純記憶體／快取查詢）。
- **端到端**：含機構（VISA/MC/NCCC）往返 P95 ≤ 500ms。

---

## 4. 容量與壓測

- 容量模型：`SAD-006 §4`（容量規劃，對應 `BRD-003` 容量規劃 3 項）。
- 壓測：依 `TRP-001 §10` 效能測試（12 項）產出 P95／P99 曲線，對比 §1 門檻。
- 線性擴展：領域服務無狀態，橫向擴展（K8s HPA）因應 TPS 目標。

---

## 5. 測試案例（對應 `TRP-001 §10`）

- 授權 P99／P95 壓測（`BRD-003` 效能目標）
- 吞吐測試（≥ 1,000 TPS 授權、> 2,000 TPS 即時支付）
- 快取失效／下游降級下的效能退化邊界

---

## 6. 已知限制（誠實揭露）

- 上表 **≤ 200ms／≤ 500ms／≥ 1,000 TPS** 為 `BRD-003` 目標值；實測須待服務實作後壓測驗證，目前尚無實測數據（規格先行）。
- 分庫分表（sharding）與否影響吞吐上限（`BRD-003` 註「未分庫分表」前提下 ≥ 1,000 TPS），若客戶要求更高須提 CR。
- 容量模型（`SAD-006 §4`）之具體假設（成長率、尖峰因子）待 SA 凍結。
