2020 從一開始 進(jìn)行配置中心選型

2020 從一開始 進(jìn)行配置中心選型

背景

現(xiàn)在是 2019 2020年,距離農(nóng)歷過年還有四天吧,小伙伴們都已經(jīng)請假回老家了,只剩我一個開發(fā)和另外一個運維孤獨守著辦公室,閑來無事 整理了今年后端服務(wù)(邊緣開發(fā)維護的邊緣系統(tǒng))的變更內(nèi)容,升級郵件一看,大抵上分為3類

  • 修改應(yīng)用配置 (30%)
  • 添加白名單/黑名單 進(jìn)行流量控制 (5%)
  • 業(yè)務(wù)開發(fā) (65%)

除去日常業(yè)務(wù)開發(fā)不談,前兩項可以通過 將配置的動態(tài)化進(jìn)行處理。因此,將 “配置中心” 做為一項明年完成的內(nèi)容列到我的 TODO LIST 中。
為此,先進(jìn)行配置中心的選型,以開展年后的進(jìn)一步任務(wù)。


另外,如果你有遇到以下情況,也可以看看本篇文章看看,哪個配置中心更適合你。
隨著業(yè)務(wù)的發(fā)展、微服務(wù)架構(gòu)的升級,服務(wù)的數(shù)量、程序的配置日益增多(各種微服務(wù)、各種服務(wù)器地址、各種參數(shù)),傳統(tǒng)的配置文件方式和數(shù)據(jù)庫的方式已無法滿足開發(fā)人員對配置管理的要求:

  • 安全性:配置跟隨源代碼保存在代碼庫中,容易造成配置泄漏;
  • 時效性:修改配置,需要重啟服務(wù)才能生效;
  • 局限性:無法支持動態(tài)調(diào)整:例如日志開關(guān)、功能開關(guān);

入圍選手

Diamond 資料太少,僅列出,不針對評測

適用時間

文章時間:2020年 1 月 20 日

正式開始之前多這一節(jié)的原因是因為目前所有技術(shù)發(fā)展的實在是太快了,常常選型文章是跟不上對應(yīng)技術(shù)發(fā)布的速度,以此想告訴閱讀本文章的讀者咱們文章的一個適用范圍。

優(yōu)劣

分別從功能、性能、UI、侵入性 四個維度進(jìn)行評估。沒有最好,只有最適合。

功能

功能我們首先從 “配置中心”的定義出發(fā),先定義好基礎(chǔ)功能,滿分 10 分

  • 實時生效
  • 版本管理
  • 環(huán)境管理
  • 獨立應(yīng)用
  • 配置快照

然后再根據(jù)我們的目標(biāo),想定一些特定功能,滿分 5 分

  • 灰度發(fā)布
  • 權(quán)限管理、發(fā)布審核、操作審計
  • 部署簡單
  • 客戶端配置信息監(jiān)控

另外,針對開源應(yīng)用,還需要幾個要求。

  • 社區(qū)活躍度
  • 代碼更新活躍度

就是在這里把Diamond給斃了,截止文章評測時(2020-01-20)GitHub 代碼維護庫最后一個更新為 6 年前。

以上功能點我們做一個表格進(jìn)行評測

功能點\平臺 Nacos Disconf SpringCloud Config Apollo
實時生效 ? ? × ?
版本管理 ? × ? ?
環(huán)境管理 ? ? ? ?
獨立應(yīng)用 ? ? ? ?
配置快照 ? ? × ?
灰度發(fā)布 ? ? × ?
權(quán)限管理 × × × ?
部署簡單 ? ? ? ×
信息監(jiān)控 × ? × ?
社區(qū)活躍度 ? × ? ?
代碼更新活躍度 ? × ? ?

性能

// todo

UI

鄙人還是有點怪癖,WebUI 極其糾結(jié),一言蔽之。我喜歡好看的!

  • Nacos 比較時尚,提供API進(jìn)行自定義
  • Disconf、Apollo 均是 bootstrap 風(fēng)格
  • SpringCloud Config 沒有 WebUI,另外有三方做了,可以參考 spring-cloud-config-admin還是比較時尚的,就是要折騰

侵入性

先擺出來集成方式,再說結(jié)論,僅針對我的切入點 Springboot 進(jìn)行集成,不盡詳細(xì),敬請見諒。

Nacos

https://nacos.io/zh-cn/docs/quick-start-spring-boot.html

@Controller
@RequestMapping("config")
public class ConfigController {

    @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
    private boolean useLocalCache;

    @RequestMapping(value = "/get", method = GET)
    @ResponseBody
    public boolean get() {
        return useLocalCache;
    }
}
Disconf

https://disconf.readthedocs.io/zh_CN/latest/tutorial-client/src/Tutorial3.html#id1

/**
 * 金融系數(shù)文件
 *
 **/
@Service
@DisconfFile(filename = "coefficients.properties")
public class Coefficients {

    public static final String key = "discountRate";

    @Value(value = "2.0d")
    private Double discount;


    /**
     * 折扣率,分布式配置
     *
     * @return
     */
    @DisconfItem(key = key)
    public Double getDiscount() {
        return discount;
    }

    public void setDiscount(Double discount) {
        this.discount = discount;
    }
}
SpringClound Config
@EnableEurekaClient
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
 
    public static void main(String[] args) {
                    SpringApplication.run(ConfigServerApplication.class, args);
    }
 
}
Apollo

文檔比較齊全不做描述
https://github.com/ctripcorp/apollo-use-cases

對于這 4 個平臺,侵入性基本上都很低,如果硬要排個序,也真的只是個人排序,沒有參考價值。

總結(jié)

對于以上內(nèi)容,首先基礎(chǔ)功能,選擇都滿足者,Nacos、Disconf都在我們的考慮范圍。然后基于社區(qū)的活躍度選擇 Nacos。
其實對于大型項目 Apollo 是個好的選擇,但是我們是一個邊緣項目,Apollo 部署難度更大一些所以這次選擇并沒有選擇。本文只是閑暇作成,不甚嚴(yán)謹(jǐn),下一步進(jìn)行試探 四個配置中心,進(jìn)行實際應(yīng)用。
幾時,再進(jìn)行更新。

參考

架構(gòu)設(shè)計之微服務(wù)配置中心選型 (作者:風(fēng)卿,Nacos 社區(qū))
分布式配置中心選型(作者:大數(shù)據(jù)技術(shù)進(jìn)階)

為Spring Cloud Config插上管理的翅膀(作者:翟永超)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容