很多人在一開始了解功能管理(Feature Management)的時候,會疑惑功能管理與配置中心有什么區(qū)別,在這篇文章中我們來講講二者的區(qū)別,在對比兩者之前我們先看下它們是什么、分別能解決什么問題以及常見的實現(xiàn)方案有哪些。
一、什么是配置中心?
通過配置中心將應用程序中結構化配置進行統(tǒng)一管理,當配置變更后能夠在應用程序中實時生效,有效避免了傳統(tǒng)模式下修改應用程序配置需要打包、部署、測試、上線等一系列繁瑣流程。廣泛用于如微服務應用架構下的配置管理、應用業(yè)務參數(shù)配置、文案配置等需要滿足快速對線上變更的業(yè)務場景。
配置中心的具體實現(xiàn)主要有兩大方向:自建或使用第三方組件。最簡單的自建方案如將配置存儲在數(shù)據庫中,程序定時從數(shù)據庫中加載最新配置以實現(xiàn)快速變更生效。也可以直接使用成熟且功能完備的第三方開源組件,如 Apollo、Nacos 等。
二、什么是Feature Management?
功能管理(Feature Management,也有譯作特性管理)是管理「功能」生命周期的軟件工程實踐,它包含了漸進式發(fā)布、定向投放、A/B 實驗、實時配置變更等針對「功能」粒度全生命周期管理。在持續(xù)交付實踐中,它使我們能夠做到讓每一個變更都能獨立部署,并通過漸進式發(fā)布來減少變更風險;能夠感知到每一個功能在線上真實環(huán)境下用戶的使用情況如何;能夠清晰地看到新功能產生的業(yè)務價值等等。
一個完備的 Feature Management 系統(tǒng)不僅要實現(xiàn)「功能」的全生命周期管理功能,還要提供高效的「功能開關」規(guī)則下發(fā)和多語言客戶端獲取開關結果等能力,而國內原生支持功能管理實踐的開源工具平臺只有 FeatureProbe 。
三、兩者的區(qū)別和關系
從上面定義不難看出兩者主要區(qū)別是解決的問題不一樣,配置中心解決的如何利用配置實現(xiàn)對線上快速變更,而 Feature Management 解決的是如何通過管理「功能」生命周期來實現(xiàn)對功能粒度的精準管控。
從技術角度來看,F(xiàn)eature Management 系統(tǒng)也需要實現(xiàn)對線上應用程序快速變更。例如當我們變更「功能開關」中人群放量規(guī)則后,Client 端(應用程序)需要能快速感知規(guī)則的變化來按最新配置規(guī)則執(zhí)行放量處理,從這點來看 Feature Management 系統(tǒng)可以依托配置中心來作為開關規(guī)則下發(fā)鏈路的底層實現(xiàn)。
這也決定了兩者系統(tǒng)組織結構上相似性,都至少需要由管理平臺、下發(fā)通路及 Client SDK 組成,不同的地方在于兩者的管理平臺所提供的業(yè)務能力不一樣。不過它們下發(fā)通路及 Client SDK 提供能力類似,對 Feature Management 而言需要下發(fā)開關(本質上也是一個配置)并為應用程序提供訪問功能開關的 SDK,而配置中心同樣也需要下發(fā)配置和為應用程序提供訪問配置內容的能力。
四、兩者相互是否具備替代性
既然兩者部分功能上有一定的相似性,那是否具備替代性呢?
比如我們是否可以直接使用配置中心當成 Feature Management 系統(tǒng)來使用呢?其實前面有提到,配置中心作為通用配置平臺并不關注配置內容,也就意味著你可以對配置做任何定義。以一個最簡單功能開關場景為例,比如控制功能A開啟或關閉,確實可以通過在配置中心上創(chuàng)建一個針對該場景的 K-V 配置當成開關來滿足最基礎的功能開關使用場景。
**但這對于 Feature Management 系統(tǒng)來說是最簡單的場景,還要做到對功能粒度的漸進式發(fā)布、將功能定向投放給特定人群、A/B 實驗及對 Feature 進行價值評估等等,而都是作為配置中心所不具備的。
**
既然配置中心系統(tǒng)無法替代 Feature Management 系統(tǒng),那反之用 Feature Management 系統(tǒng)替代配置中心是否可行?答案是肯定的。以 FeatureProbe 為例,在創(chuàng)建「功能開關」時支持4種開關返回值類型,分別是 Number、String、Boolean、JSON,意味著你可以在開關返回值中放上你原本在配置中心的配置內容,再利用 FeatureProbe 提供的 SDK 來獲取相應的配置返回值即可。

五、總結
最后總結下配置中心與 Feature Management 不同維度的對比:
| 對比維度 | 配置中心 | 配置中心 |
|---|---|---|
| 使用場景 | 自定義結構化配置,滿足對線上快速變更。 | <li> 持續(xù)集成 <li> 部署和發(fā)布解耦 <li> 漸進式發(fā)布<li>定向投放<li>A/B 實驗<li>預案降級 |
| 用戶角色 | 開發(fā)人員、QA。 | <li>開發(fā)人員、<li>QA<li>PM<li>SRE<li>運營人員。 |
| 系統(tǒng)復雜性 | 較高,以純文本、JSON 或 K/V 方式管理,需要針對配置內容定制開發(fā)滿足不同需求。 | 較低,可視化配置,大部分功能管理場景開箱即用。 |
| 可觀測性 | 需要自行定制開發(fā)監(jiān)控邏輯。 | 可以實時監(jiān)控功能訪問情況并對功能進行效果評估 |
| 變更快速生效 | 支持。 | 支持,利用下發(fā)通路實現(xiàn)規(guī)則快速生效。 |
| 需要定期清理 | 很少,大多數(shù)配置和業(yè)務耦合性較高,需要配合業(yè)務長期使用。 | 經常,大多數(shù)功能開關都是短期性的,在使用完成后即可清理。 |
當前 FeatureProbe 作為一個 Feature Management 平臺已經使用 Apache 2.0 License 協(xié)議完全開源,你可以在 GitHub 和 Gitee 上直接訪問源碼,你也可以在上面給提給我們提 issue 和 feature哦,我們看到后會第一時間回復大家。