Preview Environment PR-Level Isolation¶
概念概覽
三層隔離架構決策¶
核心知識¶
三層隔離架構決策¶
多 PR 並行開發需要三個層面各自處理:
- Redis:使用 logical database(
SELECT N),db0=dev、db1 備用,最多 14 個並行 PR。零程式碼改動,比 key prefix 侵入性更低。上限:超過 12 並行 PR 需改 Redis Cluster。 - PostgreSQL:
schema per PR,透過SET search_path切換。POSTGRES_SCHEMA是 infra 層注入的 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 累積
相關概念¶
- Docs Governance Superseded Pattern
- EKS Node Group Migration Runbook
- Istio Header-Based Environment Routing
- postgresql-schema-isolation----dangling-------dangling---
來源 Sessions¶
| 日期 | Session | 貢獻摘要 |
|---|---|---|
| 2026-03-24 | 770400fc-5a4e-4290-92e5-08106a48b63e | 定義遊戲伺服器多 PR 並行開發的三層隔離策略與具體 trade-off 決策 |