Feature flags 概要

Feature flags可以讓軟件開發更加的安全、迭代更加迅速,而且可以更加靈活的控制軟件產品。Feature flags將功能迭代從代碼部署中分離出來,從而可以使產品團隊(開發團隊、管理團隊、SRE等)在版本控制之外更加精細地控制誰、什麼時候可以使用什麼功能。

什麼是Feature flags?

Feature flags是一種軟件開發方法,開發者將新的功能封裝在帶有標誌位的if/else語句中,從而使得產品團隊可以在版本之外通過設置標誌位來控制哪些功能可以被用戶使用。標誌位的開關獨立於軟件部署,所以即使產品環境部署同樣一份代碼,也可以通過設置標誌位來打開/關閉某種功能。因此,支持Feature flags也是持續交付(Continous delivery)的重要一環,它可以讓版本發佈更加迅速、更加可靠。

if (flags.kms) {
    /* with KMS feature */
} else {
    /* without KMS feature */
}

Feature flags最佳實踐

  1. 選擇正確的級別。根據自身的需求來選擇feature flags的級別。如果級別選的過低,可能會有成百上千的flags,而且還需要來維護一些用不上的flags。但如果級別定的過高,feature flags控制的粒度又不夠,精細程度滿足不了需求。
  2. Flag的命名一定要準確的描述是什麼功能。否則的話,系統可能因爲錯誤的flag被關閉或者打開而被破壞。另外,如果一個flag總是處於打開或者關閉的狀態,那就應該被刪掉。
  3. 設置日誌來記錄是誰打開或者關閉了flag。
  4. 需要給開發者之外的人操作flag的權限。
  5. 控制flag的訪問權限。
  6. 通過flag的狀態來管理feature flags的生命週期。

藍綠部署集成feature flags

藍綠部署是一種比較成熟的用於降低風險的升級系統的方法。升級時維護兩套系統,藍系統和綠系統,分別爲運行中的版本和新的版本。可以在系統升級的時候,通過負載均衡器將用戶流量從舊版本系統導入到新版本的系統。藍綠部署一方面可以縮短甚至消除升級的宕機時間,新版本部署的時候舊的系統仍在運行。另一方面可以降低風險,一旦新版本有問題,可以很容易地將用戶流量切回到舊的版本。

在藍綠部署中可以引入feature flags,新的版本可以將新的功能通過feature flags關閉,然後再逐一打開。藍綠升級要麼使用新的版本的所有功能,要麼使用舊的版本。feature flags 則彌補了這個不足。

nodejs 中的feature flags資源

  1. LaunchDarkly 是一個完整的feature flags解決方案,它提供了服務器端和前端的SDK。
  2. Flipit是一個nodejs中使用feature flags的模塊。它通過配置文件存取feature flags並提供了查詢/更新feature flags的接口,可以讓程序不需要重啓便能讀取到最新的配置文件更改。
  3. fflip除了查詢/更新feature flags之外,增加了對feature flags訪問權限的控制。
  4. Unleash和LaunchDarkly類似,是一個完整的feature flags解決方案,同樣提供了nodejs和前端的SDK。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章