.Net Core+分散式配置中心(AgileConfig)

yangleiyu發表於2021-08-13

GitHub上AgileConfig非常詳細,以下只是本人學習過程的整理

一、介紹

1、參考地址

https://github.com/dotnetcore/AgileConfig

https://www.cnblogs.com/kklldog/p/agile-config.html

2、概念

這是一個基於.net core開發的輕量級配置中心。說起配置中心很容易讓人跟微服務聯絡起來,如果你選擇微服務架構,那麼幾乎逃不了需要一個配置中心。事實上我這裡並不是要蹭微服務的熱度。這個世界上有很多分散式程式但它並不是微服務。比如有很多傳統的SOA的應用他們分散式部署,但並不是完整的微服務架構。這些程式由於分散在多個伺服器上所以更改配置很困難。又或者某些程式即使不是分散式部署的,但是他們採用了容器化部署,他們修改配置同樣很費勁。所以我開發AgileConfig並不是為了什麼微服務,我更多的是為了那些分散式、容器化部署的應用能夠更加簡單的讀取、修改配置。

AgileConfig秉承輕量化的特點,部署簡單、配置簡單、使用簡單、學習簡單,它只提取了必要的一些功能,並沒有像Apollo那樣複雜且龐大。但是它的功能也已經足夠你替換webconfig,appsettings.json這些檔案了。如果你不想用微服務全家桶,不想為了部署一個配置中心而需要看N篇教程跟幾臺伺服器那麼你可以試試AgileConfig)

3、特點

1. 部署簡單,最少只需要一個資料節點,支援docker部署

2. 支援多節點分散式部署來保證高可用

3. 配置支援按應用隔離,應用內配置支援分組隔離

4. 應用支援繼承,可以把公共配置提取到一個應用然後其它應用繼承它

5. 使用長連線技術,配置資訊實時推送至客戶端

6. 支援IConfiguration,IOptions模式讀取配置,原程式幾乎可以不用改造

7. 配置修改支援版本記錄,隨時回滾配置

8. 如果所有節點都故障,客戶端支援從本地快取讀取配置

9. 支援Restful API維護配置

4、架構

 

AgileConfig的架構比較簡單,主要是分3塊:

A、客戶端

客戶端程式是使用netstandard2.0開發的一個類庫,方便.net core程式接入,nuget搜agileconfig.client就可以安裝。可以在啟動客戶端的時候配置多個節點的地址,客戶端會隨機挑選一個進行連線,連線成功後會維持一個websocket長連線。如果連線的節點發生故障導致連線中斷,客戶端會繼續隨機一個節點進行連線,直到連線成功。

B、節點、管理程式

節點是使用asp.net core開發的一個服務。為了部署簡單,直接把管理程式跟節點服務合二為一了。任何一個節點都可以在啟動的時候配置環境變數開啟管理程式功能。

C、資料庫

使用資料庫來儲存資料,目前支援Sqlserver, Mysql, Sqlite, PostgreSql,Oracle 五種資料庫。最新版本已經切換為Freesql為資料訪問元件。Freesql對多資料庫的支援更加強勁,特別是對國產資料庫的支援。但是因為沒有國產資料庫的測試環境,本專案並未支援,如果有需要我可是開分支嘗試支援,但是測試工作就要靠使用者啦。

注意:如果使用<=1.0.4之前版本的使用者請不要更新,因為EFCore跟Freesql自動建的庫可能存在稍許差異,保險起見不要更新吧。

D、關於高可用

AgileConfig的節點都是無狀態的,所以可以橫向部署多個節點來防止單點故障。在客戶端配置多個節點地址後,客戶端會隨機連線至某個節點。

問題

影響

說明

控制檯下線

無法維護配置,客戶端無影響

因為控制檯跟節點是共存的,所以某個控制檯下線一般來說同樣意味著一個節點的下線

某個節點下線

客戶端重連至其他節點

無任何影響

所有節點下線

客戶端從記憶體讀取配置

啟動的客戶端會從記憶體讀取配置,未啟動的客戶端會再嘗試連線到節點多次失敗後,嘗試從本地檔案快取讀取配置,保證應用可以啟動

二、部署服務端

1、初始化資料庫

使用者只需要手工建一個空庫,所有的表在第一次啟動的時候都會自動生成。目前支援sqlserver,mysql,sqlite三種資料庫。

三、使用服務端

1、執行服務端

通過docker建立一個agile_config例項

命令:

sudo docker run --name agile_config -e adminConsole=true -e db:provider=mysql -e db:conn="Database=TestConfig;Data Source=你的資料庫IP地址;User Id=root;Password=123456;port=你的資料庫埠" -p 5000:5000 kklldog/agile_config:latest

配置:

1. adminConsole 配置程式是否為管理控制檯。如果為true則啟用控制檯功能,訪問該例項會出現管理介面。

2. db:provider 配置程式的資料庫型別。目前程式支援:sqlite,mysql,sqlserver 三種資料庫。

3. db:conn 配置資料庫連線串

2、瀏覽地址

 

3、初始化管理員密碼

第一次遠行程式需要初始化管理員密碼

4、節點

AgileConfig支援多節點部署,所有的節點都是平行的。為了簡化部署,AgileConfig並沒有單獨的控制檯程式,請直接使用任意一個節點作為控制檯。當環境變數adminConsole=true時,該節點同時兼備資料節點跟控制檯功能。為了控制檯能夠管理節點,所以需要在控制檯配置節點的資訊。

注意:即使是作為控制檯的資料節點同樣需要新增到管理程式,以便管理它。

 

 

 

5、應用

AgileConfig支援多應用程式接入。需要為每個應用程式配置名稱、ID、祕鑰等資訊。

 

6、配置項

配置完應用資訊後可以為每個應用配置配置項。配置項支援分組。新新增的配置並不會被客戶端感知到,需要手工點選“上線”才會推送給客戶端。已上線的配置如果發生修改、刪除、回滾操作,會實時推送給客戶端。版本歷史記錄了配置的歷史資訊,可以回滾至任意版本。

7、客戶端

控制檯可以檢視已連線的客戶端。

 

8、系統日誌

系統日誌記錄了AgileConfig生產中的一些關鍵資訊。

 

四、使用客戶端

1、安裝客戶端

2、修改appsettings.json

 

3、修改program

 

4、新增註入

5、自定義配置類

 

6、讀取配置

AgileConfig支援asp.net core 標準的IConfiguration,跟IOptions模式讀取配置。還支援直接通過AgileConfigClient例項直接讀取

 

五、Other

初始化時只需要空庫,配置後所有表與資料自動完成。

相關文章