前言
先前探討到:什麼是 Feature Flag 以及它解決什麼問題?,了解 Feature Flag 存在的價值後,今天了解更多關於 4 種類型的 Feature Flag 以及實戰上的用途,不同目的的 Flag,在生命週期、動態程度與管理策略上都有不同的特性。
Feature Flag 的 2 個維度
Feature Flag 可以被 2 個維度所分類:「存在時長」與「動態性」。
- 存在時長:
- 短期:通常目的是過渡,如功能釋出或實驗。
- 長期:往往成為產品設計的一部分。
- 動態性:
- 低動態:值通常固定,極少在運行期間改變。
- 高動態:值會頻繁變化,可能依據使用者、請求、環境即時決定。
四個象限分類出不同用途的 Feature Flag:
高動態 ↑ │ Experiment │ Permissioning Flags │ Flags │──────────────────────┼────────────────────→ 存在時長 │ Release │ Ops Flags │ Flags │ ↓ 低動態Feature Flag 的 4 個象限
短期 × 低動態 → Release Flags
設定明確移除期限,在功能完全釋出後應盡快移除
在 Trunk Based Development 不使用分支而是使用 Feature Flag 來實現「代碼部署與功能發佈的脫鉤」,透過解耦部署與發布保持開發效率。
- 漸進發布:先部署代碼但不啟用功能,等準備好再打開開關
- 金絲雀發布:先對小部分用戶開放新功能,觀察穩定性
- 快速回滾:如果新功能出問題,可以立即關閉開關而不需要重新部署
- 解耦部署與發布:讓代碼部署和功能上線成為兩個獨立的動作
短期 × 高動態 → Experiment Flags
為了收集數據做出決策而實驗,實驗結束一定要根據結論收斂
- A/B 測試:比較不同版本的 UI、算法或功能,看哪個表現更好
- 用戶分群實驗:動態針對不同用戶群體測試不同策略
長期 × 高動態 → Permissioning Flags
設計清晰的權限模型,避免與實驗混用
用戶的權限、訂閱狀態、特徵屬性會頻繁變化,需要即時反應:
- 實驗權限:早期採用者計劃、內部員工測試功能
- 地理位置限制:某些功能只在特定國家/地區開放、當地法規要求
- 不同族群:管理員 vs 普通用戶、免費 vs 付費功能
長期 × 低動態 → Ops Flags
可靠性與可觀測性
- 防禦性回退:流量高峰時關閉非核心功能、降低資源密集型操作的頻率、啟用快取機制或簡化版功能
- 維護模式:資料庫維護時切換為唯讀模式、系統升級時顯示維護頁面、暫時關閉某些服務端點
- 特殊情境:在特定時段啟用額外的監控或日誌記錄