1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ConfigKeeper分布式配置中心

        聯(lián)合創(chuàng)作 · 2023-09-30 20:25

        ConfigKeeper 是由隨行付架構(gòu)部基于Spring Cloud研發(fā)的分布式配置中心。

        在微服務(wù)架構(gòu)中,配置中心是個(gè)必不可少的基礎(chǔ)服務(wù)。應(yīng)用部署到生產(chǎn)環(huán)境后,由于各種原因,需要調(diào)整一些配置。如果每次修改配置都需要經(jīng)過修改代碼、重新打包、重新部署等過程,為了避免重新部署造成請(qǐng)求錯(cuò)誤,還需要將應(yīng)用從負(fù)載均衡中下線,部署成功后再重新上線,當(dāng)部署的實(shí)例比較多的情況下,那就會(huì)嚴(yán)重影響投產(chǎn)效率,如果是為了解決生產(chǎn)上的問題而調(diào)整配置,那么這個(gè)過程耗時(shí)越多,帶來的風(fēng)險(xiǎn)也就越大。所以我們需要在不停機(jī)、不重新打包、不重新部署的情況下,可以動(dòng)態(tài)修改配置(比如:功能開關(guān)、性能參數(shù)等)。為了方便動(dòng)態(tài)更新應(yīng)用配置,需要把配置放到應(yīng)用執(zhí)行包之外的配置中心。配置文件不需要打進(jìn)應(yīng)用執(zhí)行包中后,可以帶來以下幾個(gè)好處:一個(gè)可執(zhí)行包就可以在不同的環(huán)境下運(yùn)行,可以降低包的版本管理成本,也可以降低docker鏡像的版本管理成本。

        Spring cloud 雖然已經(jīng)為我們提供了基于git或mongodb等實(shí)現(xiàn)的配置中心,但是這些方案實(shí)現(xiàn)都過于簡單,沒有達(dá)到實(shí)際可用的標(biāo)準(zhǔn),比如:沒有提供統(tǒng)一的管理頁面,不便于操作和使用;沒有權(quán)限管理功能;沒有數(shù)據(jù)驗(yàn)證功能等等。但Spring cloud config的核心技術(shù)還是可以為我們所有,沒有必要重新造輪子。

        ConfigKeeper 是由隨行付架構(gòu)部基于Spring Cloud研發(fā)的分布式配置中心?;赟pring Cloud開發(fā)。與Spring Boot、Spring Cloud應(yīng)用無縫兼容。下面我們將詳細(xì)介紹ConfigKeeper配置中心(有圖有真像):

        1. 支持權(quán)限管理,保證數(shù)據(jù)的安全

        下圖為用戶管理及權(quán)限設(shè)置界面的截圖:

        角色設(shè)計(jì)比較簡單,只有管理員和普通用戶兩種,管理員擁有最高權(quán)限,而普通用戶只能查看和操作為其分配的配置,以保證數(shù)據(jù)的安全。

        2. 支持多環(huán)境部署,也支持多環(huán)境配置集中管理

        企業(yè)可以根據(jù)自身的情況設(shè)置不同的環(huán)境,比如:測試、rc以及生產(chǎn)環(huán)境??梢远喹h(huán)境共用一個(gè)配置中心,也可以每個(gè)環(huán)境單獨(dú)使用一個(gè)配置中心,根據(jù)企業(yè)需求靈活部署。

        3. 配置管理簡單實(shí)用

        為了避免配置內(nèi)容耦合問題,我們只設(shè)計(jì)了全局配置(global config)和應(yīng)用配置(application config)兩種類型的配置,并沒有設(shè)計(jì)&rdquo;組配置&ldquo;。全局配置是指某一環(huán)境下所有應(yīng)用都能生效的配置,但它的優(yōu)先及低于應(yīng)用配置,一個(gè)運(yùn)行環(huán)境下有且只有一個(gè)全局配置。如果應(yīng)用可執(zhí)行包已經(jīng)有相同的配置,那么會(huì)被配置中心的配置所覆蓋。

        全局配置列表: 

        應(yīng)用配置列表: 

        3.1 自帶版本管理功能:自動(dòng)生成版本號(hào)以及回退功能

        配置內(nèi)容每修改一次,版本號(hào)會(huì)自動(dòng)增加1,同時(shí)會(huì)將原來配置內(nèi)容備份到歷史表中,以便于查看變更記錄和回退。

        點(diǎn)擊“對(duì)比”可以當(dāng)前版本與最新版本進(jìn)行比較,非常容易看出版本之間的差異部分,就好像使用git等版本管理工具一樣:

        通過替換歷史版本功能,進(jìn)行回退。

        3.2 使用Yml在線編輯器,能實(shí)時(shí)檢查配置格式是否正確;

        為了更好管理配置內(nèi)容,我們使用YAML格式管理配置內(nèi)容。

        使用Yml在線編輯器,可以非常方便編輯,比如:復(fù)制粘貼內(nèi)容,就像在修改配置文件一樣。當(dāng)用戶編輯內(nèi)容時(shí),會(huì)實(shí)時(shí)檢查格式是否符合yaml格式時(shí),如果格式是正確的,右則會(huì)正確顯示其對(duì)應(yīng)的json內(nèi)容,如果格式不正確則,右則會(huì)提示相應(yīng)的錯(cuò)誤信息,能及時(shí)發(fā)現(xiàn)錯(cuò)誤。

        3.3 支持修改前后內(nèi)容對(duì)比功能,保證修改內(nèi)容的正確性

        在保存修改內(nèi)容之前會(huì)彈出此對(duì)比界面,方便確認(rèn)核對(duì)此次變更的內(nèi)容是否正確,確認(rèn)無誤后再點(diǎn)擊“確定”按鈕保存。

        4. 客戶端使用簡單并兼容Spring Boot和Spring Cloud應(yīng)用

        配置中心提供http接口拉取配置,所以只要支持http協(xié)議的應(yīng)用都是可以使用的。我們已經(jīng)實(shí)現(xiàn)了Spring Boot和Spring Cloud應(yīng)用的客戶端,接下來說明其一些特性及使用方法。

        4.1 無縫兼容Spring boot、Spring Cloud應(yīng)用

        suixingpay-config-client 是基于spring-cloud開發(fā)的,所以使用方法與spring-cloud-config完全一樣。支持xml、Spring boot @Value、@ConfigurationProperties 注入配置,支持通過Environment獲取配置。支持 spring-cloud 的 @RefreshScope 注解刷新配置。

        只需要在項(xiàng)目是加入suixingpay-config-client依賴,并在bootstrap.yml文件中增加如下配置:

        spring:
          application:
            name: config-demo # 設(shè)置應(yīng)用名稱,這是必填項(xiàng)
        
          profiles:
            active: ${profile:dev}
        
        #多環(huán)境區(qū)分配置
        ---
        spring:
           profiles: test
        suixingpay:
          config:
            enabled: true                  # 是否啟用配置中心,默認(rèn)值為:true;為了方便開發(fā),建議開發(fā)環(huán)境設(shè)置為false
            profile: test                  # 環(huán)境名稱,默認(rèn)值為spring.profiles.active的第1個(gè)值
            uris:
            - http://127.0.0.1:8080/       # 配置中心服務(wù)地址,必須配置
            username: admin                # 調(diào)用接口用戶名(非配置中心登錄的用戶名和密碼)
            password: 123456               # 調(diào)用接口密碼
            cachePath: ./config            # 配置緩存路徑,默認(rèn)值為:./config
            cacheTimeOut: 0                # 本地緩存過期時(shí)間(單位:秒),如果小于等于0時(shí),一直有效
            failFast: false                # 是否快速失敗,如果為true時(shí),當(dāng)訪問配置中心時(shí)立即拋異常;如果為false時(shí),會(huì)嘗試加載3次,并會(huì)嘗試獲取本地緩存,最終還沒有配置,才會(huì)拋異常。默認(rèn)值:false

        下面舉個(gè)Spring xml文件中獲取讀取配置值的例子:

        <?xml version="1.0" encoding="UTF-8"?>
        <beans>
        
            <dubbo:application name="${spring.application.name}" />
            <dubbo:registry protocol="${dubbo.registryProtocol}" address="${dubbo.zookeeperAddress}" />
            <dubbo:protocol name="${dubbo.protocolName}" port="${dubbo.protocolPort}" />
            ... ...
        
        </beans>

        關(guān)于@Value、@ConfigurationProperties及@RefreshScope的使用就不再一一舉例子,更多內(nèi)容可以參考Spring 官方文檔。

        4.3 支持灰度發(fā)布

        為了支持灰度發(fā)布,suixingpay-config-client并實(shí)現(xiàn)沒有自動(dòng)刷新配置的功能,而是通過使用Spring cloud提供的refresh endpoint進(jìn)行手動(dòng)刷新,因?yàn)楫?dāng)配置變更后,沒有經(jīng)過驗(yàn)證就將最新配置推送給所有應(yīng)用,風(fēng)險(xiǎn)是非常之大的。正確的做法是,修改配置內(nèi)容后,先將最新配置內(nèi)容刷新到一個(gè)應(yīng)用實(shí)例進(jìn)行驗(yàn)證,驗(yàn)證無誤后,再刷新剩余的應(yīng)用。

        現(xiàn)有版本還沒有方便刷新配置的相關(guān)工具,需要借助curl或postmain等工具來完成,我們正在開發(fā)相應(yīng)的功能來提升這塊的用戶體驗(yàn),大家可以關(guān)注github中的更新。

        4.4 支持客戶端緩存,即使配置中心服務(wù)不可用,也不會(huì)影響應(yīng)用的啟動(dòng)

        客戶端從配置中心獲取最新配置后,會(huì)緩存到本地磁盤中,應(yīng)用啟動(dòng)時(shí),先獲取本地緩存中的配置版本號(hào),發(fā)送給配置中心,如果客戶端版本號(hào)與服務(wù)端的不一致時(shí),才會(huì)拉取最新配置,否則返回304狀態(tài),并使用本地緩存,通過這個(gè)機(jī)制可以節(jié)約網(wǎng)絡(luò)帶寬,從而也提升一點(diǎn)性能;同時(shí)我們還提供 configversion endpoint 用于查看當(dāng)前應(yīng)用配置的本地緩存版本信息,通過它也很容易檢查客戶端的配置的版本與服務(wù)端的版本是否一致,能方便發(fā)現(xiàn)配置是否更新成功。

        我們還可以使用spring boot提供的env及configprops endpoint 查看配置內(nèi)容,檢查配置是否生效、是否正確。

        Spring 生態(tài)功能非常豐富,為我們解決了非常多棘手問題,但很多東西要進(jìn)行本地化開發(fā)后才能更好的使用。此配置中心使用了不少開源技術(shù),給我們帶來了不少便利,希望通過此開源項(xiàng)目回饋社區(qū),為開源社區(qū)貢獻(xiàn)綿薄之力。希望了解隨行付更多開源項(xiàng)目請(qǐng)查看:

        瀏覽 30
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            99热在线观看u | 欧美xxx操 | 97超碰电影| 欧美成人色 | 日韩成人视频在线观看 | 韩国三级日本三级香港三级黄 | 亚洲爱爱爱| 黄色影像影片. | av福利院 | 亚洲高清一线 |