日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

造轮子-AgileConfig一个基于.NetCore开发的轻量级配置中心

發布時間:2023/12/4 asp.net 79 豆豆
生活随笔 收集整理的這篇文章主要介紹了 造轮子-AgileConfig一个基于.NetCore开发的轻量级配置中心 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

微服務確實是行業的一個趨勢,我自己也在把一些項目往微服務架構遷移。玩微服務架構配置中心是一個繞不過去的東西,有很多大牌的組件可以選,比如spring-cloud-config,apoll,disconf等等。而我為什么還要造一個輪子呢?一來這些都不是.net實現的,我就想試試用.net core實現一個,而且他們也對.net不太友好,也只有apoll提供了官方的.net客戶端。二來這些組件都太重量級了,比如apoll,光跑起來就要部署多個節點(admin,portal,meta sevice)還要依賴eureka。很多舊的項目往微服務遷移的時候并不是一下次全部調整完成的,可能是一步步來的,比如先把所有的服務都容器化,并沒有使用微服務全家桶。而且有的項目也不需要微服務全家桶,畢竟微服務不是銀彈,很多項目單體結構就足夠了,有些項目傳統的SOA架構也可以了。(嘮叨一句,那種毫無流量毫無并發的項目,幾人幾天就搞完的強上微服務真的好嗎?)但是這些項目也可能是分布式的,容器化部署的,那么這些項目我覺得也是需要配置中心的,因為在分布式、容器化環境下更改配置實在是太麻煩了。可以說配置中心并不是微服務獨有的。基于以上原因我提煉了一些配置中心必備的功能,做的盡量簡單(陋),開發了AgileConfig,為.net core的生態盡一份綿薄之力。?
Github求star:https://github.com/kklldog/AgileConfig

AgileConfig

這是一個基于.net core開發的輕量級配置中心。

  • 部署簡單,最少只需要一個數據節點,支持docker部署

  • 支持多節點分布式部署來保證高可用

  • 配置支持按應用隔離,應用內配置支持分組隔離

  • 使用長連接技術,配置信息實時推送至客戶端

  • 支持IConfiguration,IOptions模式讀取配置,原程序幾乎可以不用改造

  • 配置修改支持版本記錄,隨時回滾配置

  • 如果所有節點都故障,客戶端支持從本地緩存讀取配置

  • 架構


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

    客戶端

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

    節點、管理程序

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

    數據庫

    使用數據庫來存儲數據,目前支持Sqlserver, Mysql, Sqlite 三種數據庫。因為服務端使用EF Core框架訪問數據,原則上只要EF Core支持的數據庫,節點就可以很方便的支持它。

    部署服務端

    初始化數據庫

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

    使用服務端

    運行服務端

    sudo?docker?run?--name?agile_config?-e?adminConsole=true?-e?db:provider=sqlite?-e?db:conn="Data?Source=agile_config.db"?-p?5000:5000?kklldog/agile_config:latest

    通過docker建立一個agile_config實例,其中有3個環境變量需要配置:

  • adminConsole 配置程序是否為管理控制臺。如果為true則啟用控制臺功能,訪問該實例會出現管理界面。

  • db:provider 配置程序的數據庫類型。目前程序支持:sqlite,mysql,sqlserver 三種數據庫。

  • db:conn 配置數據庫連接串 ? ?

  • 初始化管理員密碼

    第一次運行程序需要初始化管理員密碼 ? ?

    節點

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

    注意:即使是作為控制臺的數據節點同樣需要添加到管理程序,以便管理它。

    應用

    AgileConfig支持多應用程序接入。需要為每個應用程序配置名稱、ID、秘鑰等信息。

    配置項

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

    客戶端

    控制臺可以查看已連接的客戶端。

    系統日志

    系統日志記錄了AgileConfig生產中的一些關鍵信息。

    使用客戶端

    安裝客戶端

    Install-Package?AgileConfig.Client

    初始化客戶端

    以asp.net core mvc項目為例:

    {"Logging":?{"LogLevel":?{"Default":?"Information","Microsoft":?"Warning","Microsoft.Hosting.Lifetime":?"Information"}},"AllowedHosts":?"*",//agile_config"AgileConfig":?{"appId":?"app","secret":?"xxx","nodes":?"http://localhost:5000,http://localhost:5001"//多個節點使用逗號分隔} } ???????public?static?IHostBuilder?CreateHostBuilder(string[]?args)?=>Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context,?config)?=>{//讀取本地配置var?localconfig?=?new?ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();//從本地配置里讀取AgileConfig的相關信息var?appId?=?localconfig["AgileConfig:appId"];var?secret?=?localconfig["AgileConfig:secret"];var?nodes?=?localconfig["AgileConfig:nodes"];//new一個client實例var?configClient?=?new?ConfigClient(appId,?secret,?nodes);//使用AddAgileConfig配置一個新的IConfigurationSourceconfig.AddAgileConfig(configClient);//找一個變量掛載client實例,以便其他地方可以直接使用實例訪問配置ConfigClient?=?configClient;//注冊配置項修改事件configClient.ConfigChanged?+=?ConfigClient_ConfigChanged;}).ConfigureWebHostDefaults(webBuilder?=>{webBuilder.UseStartup<Startup>();});

    讀取配置

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

    public?class?HomeController?:?Controller{private?readonly?ILogger<HomeController>?_logger;private?readonly?IConfiguration?_IConfiguration;private?readonly?IOptions<DbConfigOptions>?_dbOptions;public?HomeController(ILogger<HomeController>?logger,?IConfiguration?configuration,?IOptions<DbConfigOptions>?dbOptions){_logger?=?logger;_IConfiguration?=?configuration;_dbOptions?=?dbOptions;}public?IActionResult?Index(){return?View();}///?<summary>///?使用IConfiguration讀取配置///?</summary>///?<returns></returns>public?IActionResult?ByIConfiguration(){var?userId?=?_IConfiguration["userId"];var?dbConn?=?_IConfiguration["db:connection"];ViewBag.userId?=?userId;ViewBag.dbConn?=?dbConn;return?View();}///?<summary>///?直接使用ConfigClient的實例讀取配置///?</summary>///?<returns></returns>public?IActionResult?ByInstance(){var?userId?=?Program.ConfigClient["userId"];var?dbConn?=?Program.ConfigClient["db:connection"];ViewBag.userId?=?userId;ViewBag.dbConn?=?dbConn;return?View("ByIConfiguration");}///?<summary>///?使用Options模式讀取配置///?</summary>///?<returns></returns>public?IActionResult?ByOptions(){var?dbConn?=?_dbOptions.Value.connection;ViewBag.dbConn?=?dbConn;return?View("ByIConfiguration");}}

    關注我的公眾號一起玩轉技術 ?

    總結

    以上是生活随笔為你收集整理的造轮子-AgileConfig一个基于.NetCore开发的轻量级配置中心的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。