跳轉到

Preview Environment PR-Level Isolation

概念概覽

三層隔離架構決策

核心知識

三層隔離架構決策

多 PR 並行開發需要三個層面各自處理:

  • Redis:使用 logical database(SELECT N),db0=dev、db1 備用,最多 14 個並行 PR。零程式碼改動,比 key prefix 侵入性更低。上限:超過 12 並行 PR 需改 Redis Cluster。
  • PostgreSQLschema per PR,透過 SET search_path 切換。POSTGRES_SCHEMAinfra 層注入的 env var,application 透過 connection string 的 search_path 參數無感切換,不需修改 application code。
  • 路由:Istio header-based routing(x-env: pr-{number}),不動 DNS/TLS,QA 可在同設備切換 preview env。

關鍵設計選擇

  • Game DB 必須 per-PR 隔離:防止技能數值、道具邏輯髒資料;Publisher DB 可共用 dev(帳號資料不造成功能異常)
  • staging/prod 不需 x-env header:各自獨立部署,無多租戶路由需求
  • dev 環境必須主動帶 x-env: dev,不能依賴 withoutHeaders fallback,避免路由不穩定
  • local CI smoke test 不經過 Istio:走 Docker Compose localhost,x-env header 只對 remote ingress 路徑有效

清理責任

PR 關閉時需確保 DROP SCHEMA 正確執行,否則 schema 累積浪費空間。

經驗教訓

  • Redis logical database 隔離比 key prefix 更低侵入性,但 16 DB 上限決定了它只能撐中小型團隊

  • PostgreSQL schema 隔離的關鍵在於 infra 注入 env var,application 完全無感,是最乾淨的分層邊界

  • preview env 與 local CI 走不同路徑(Istio vs Docker Compose),設計時要分開考慮測試覆蓋面

常見陷阱

  • Redis 16 DB 上限:超過 12 個並發 PR 就要重新規劃(Redis Cluster 或動態分配)

  • 依賴 withoutHeaders fallback 做 dev 路由會在多 env 並存時造成路由漂移

  • 忽略 local CI 不走 Istio 的差異,導致 header-based routing 在 smoke test 中測不到

最佳實踐

  • Game DB 用 per-PR schema 隔離,Publisher DB 評估業務風險後可共用

  • dev 環境主動帶 x-env header,不依賴 fallback 路由

  • PR 關閉時自動執行 DROP SCHEMA,避免殭屍 schema 累積

相關概念

來源 Sessions

日期 Session 貢獻摘要

| 2026-03-24 | 770400fc-5a4e-4290-92e5-08106a48b63e | 定義遊戲伺服器多 PR 並行開發的三層隔離策略與具體 trade-off 決策 |


本概念頁面由 Semi-Brain Wiki 系統自動維護

最後更新: 2026-03-24