造轮子-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:AgileConfig

AgileConfig

这是一个基于.net core开发的轻量级配置中心。

部署简单,最少只需要一个数据节点,支持docker部署

支持多节点分布式部署来保证高可用

配置支持按应用隔离,应用内配置支持分组隔离

使用长连接技术,配置信息实时推送至客户端

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

配置修改支持版本记录,随时回滚配置

如果所有节点都故障,客户端支持从本地缓存读取配置

架构

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


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基于.NetCore的一个轻量级配置中心

初始化管理员密码

第一次远行程序需要初始化管理员密码

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

节点

AgileConfig支持多节点部署,所有的节点都是平行的。为了简化部署,AgileConfig并没有单独的控制台程序,请直接使用任意一个节点作为控制台。当环境变量adminConsole=true时,该节点同时兼备数据节点跟控制台功能。为了控制台能够管理节点,所以需要在控制台配置节点的信息。

注意:即使是作为控制台的数据节点同样需要添加到管理程序,以便管理它。

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

应用

AgileConfig支持多应用程序接入。需要为每个应用程序配置名称、ID、秘钥等信息。

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

配置项

配置完应用信息后可以为每个应用配置配置项。配置项支持分组。新添加的配置并不会被客户端感知到,需要手工点击“上线”才会推送给客户端。已上线的配置如果发生修改、删除、回滚操作,会实时推送给客户端。版本历史记录了配置的历史信息,可以回滚至任意版本。

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

客户端

控制台可以查看已连接的客户端。

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

系统日志

系统日志记录了AgileConfig生产中的一些关键信息。

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

使用客户端 安装客户端 Install-Package AgileConfig.Client 初始化客户端

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxpsf.html