Files
DashBoard/openspec/changes/archive/2026-02-08-residual-hardening-round3/design.md

2.3 KiB
Raw Blame History

Context

目前系統已完成 Vite 單一 port 架構與主要 P0/P1/P2 硬化,但殘餘風險集中在「快取慢路徑鎖競爭 + health 熱點查詢 + API 邊界治理」。這些問題多屬中高流量下才明顯,若不在此階段收斂,後續排障成本會高。

Goals / Non-Goals

Goals:

  • 在不改變頁面操作語意與單一 port 架構前提下,完成殘餘穩定性與安全性修補。
  • 讓 cache/health 路徑在高併發下更可預期,並降低 log 資安風險。
  • 透過測試覆蓋確保修補不造成功能回歸。

Non-Goals:

  • 不重寫主要查詢流程或移除 resource/wip 全表快取策略。
  • 不引入重量級 distributed rate-limit 基礎設施。
  • 不改動前端 drill-down 與報表功能語意。

Decisions

  1. Cache 發布一致性優先於局部最佳化
  • 使用 staging key + 原子 rename/pipeline 發布資料與 metadata確保 publish 失敗不影響舊資料可讀性。
  1. 解析移至鎖外,鎖內僅做快取一致性檢查/寫入
  • WIP process cache 慢路徑改為鎖外 parse再鎖內 double-check+commit降低持鎖時間。
  1. Process cache 策略一致化
  • realtime equipment cache 補齊 max_size + LRU與既有 WIP/Resource 一致。
  1. Health 內部短快取僅在非測試環境啟用
  • TTL=5 秒,降低高頻 probe 對 DB/Redis 的重複壓力;測試模式維持即時計算避免互相污染。
  1. 高成本 API 採輕量 in-memory 速率限制
  • 以 IP+route window 限流,參數化可調,不引入新外部依賴。

Risks / Trade-offs

  • [Risk] 快取發布改造引入 key 切換邏輯複雜度 → Mitigation: 補上 publish 失敗/成功測試。
  • [Risk] health 快取造成短時間觀測延遲 → Mitigation: TTL 限制 5 秒,並於 testing 禁用。
  • [Risk] in-memory rate limit 在多 worker 下非全域一致 → Mitigation: 先作保護閥,後續可升級 Redis-based limiter。

Migration Plan

  1. 先完成 cache 與 health 核心修補(不影響 API contract
  2. 再導入 API 邊界/限流與共用工具抽離。
  3. 補單元與整合測試,執行 benchmark smoke。
  4. 更新 README 文件與環境變數說明。

Open Questions

  • 高成本 API 的預設限流門檻是否要按端點細分WIP vs Resource
  • 後續是否要升級為 Redis 分散式限流以覆蓋多 worker 全域一致性?