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
初始化時只需要空庫,配置後所有表與資料自動完成。