AgileConfig
AgileConfig copied to clipboard
[性能]当一个app配置太多时,发布配置很慢
一个app有5000条配置时,发布需要10s左右。
问题应该出在这里,操作了大量的数据。 https://github.com/dotnetcore/AgileConfig/blob/147bbb1f4148478bd99dbdb5d66adc188eba6d69/AgileConfig.Server.Service/ConfigService.cs#L615-L616
可选操作:
- 允许关闭
记录历史版本的功能 - 使用新的历史记录表,以实现仅删除和插入操作并使用批量插入
确实如果有5000条的话,每次发布都要插5000进去来记录历史版本信息。话说你们配置也太多了把 ?哈哈
@kklldog 系统参数,之前都是查数据库,现在想放在配置里。这还只是一个服务的配置···
@kklldog 可以处理嘛?🤣
@kklldog 可以处理嘛?🤣
这个一时半会搞不好,整个版本记录的设计都要更改。
@kklldog 可以先出禁用历史记录嘛?不然内部测试过不了···😖
@kklldog 可以先出禁用历史记录嘛?不然内部测试过不了···😖
我目前没空,你自己试着改一下。
@saber-wang
5000+的配置 ?有点好奇是些什么配置项
我的理解是AgileConfig只是解决运维配置功能就好,例如功能的开启,数据库连接,依赖服务配置,加密key,log记录等,
如果是大量业务配置,是否应该将配置放到业务系统中去? 如果是业务逻辑的配置,应该也会有频繁的修改需求,也要来agileconfig发布一次才生效?
@bc4250 按各种复杂层级的业务配置。 目前来说除了初始化,一次仅会改几条配置,但是AgileConfig的发布行为是每次都会处理当前app的所有配置而不仅仅是修改的配置。 也就是说每次都要添加5000+行数据并更新5000+行数据.
@saber-wang 5000+的配置 ?有点好奇是些什么配置项我的理解是AgileConfig只是解决运维配置功能就好,例如功能的开启,数据库连接,依赖服务配置,加密key,log记录等, 如果是大量业务配置,是否应该将配置放到业务系统中去? 如果是业务逻辑的配置,应该也会有频繁的修改需求,也要来agileconfig发布一次才生效?
赞同。 我觉得配置中心应该尽量放公有的配置。配置中心放5000确实有点哈人了。我觉得有几种解决的思路 0.拆分配置,配置中心只放重要公有的配置 1.是修改源码,用批量插入,或者freesql noneparameter 可能能够提高性能 2.是修改源码,去除版本控制,这样数据库的数据量就变少了,应该就能提高性能 3.修改服务连接的数据库。有可能能提高性能
@yangbocheng 计划是修改版本控制,仅为修改的配置创建版本。
- 单纯就这个问题而言,后端存储如果能用文档数据库,或直接用file,参考Git的存储, 而不是关系型数据库,应该可以改善速度;
- 另外不用修改程式,agileconfig提供继承配置呢, 用层级继承配置应该也可以吧,建议测试一下.
@saber-wang 5000+的配置 ?有点好奇是些什么配置项我的理解是AgileConfig只是解决运维配置功能就好,例如功能的开启,数据库连接,依赖服务配置,加密key,log记录等, 如果是大量业务配置,是否应该将配置放到业务系统中去? 如果是业务逻辑的配置,应该也会有频繁的修改需求,也要来agileconfig发布一次才生效?
是的,不应该把 agileconfig 做为完成业务的组件来使。配置不应该侵入太多到业务中。
- 单纯就这个问题而言,后端存储如果能用文档数据库,或直接用file,参考Git的存储, 而不是关系型数据库,应该可以改善速度;
- 另外不用修改程式,agileconfig提供继承配置呢, 用层级继承配置应该也可以吧,建议测试一下.
如果基于文件也是个不错的办法。 或许我可以实现一个 mongodb 的驱动,这样是不是读写性能会强很多。
- 单纯就这个问题而言,后端存储如果能用文档数据库,或直接用file,参考Git的存储, 而不是关系型数据库,应该可以改善速度;
- 另外不用修改程式,agileconfig提供继承配置呢, 用层级继承配置应该也可以吧,建议测试一下.
如果基于文件也是个不错的办法。 或许我可以实现一个 mongodb 的驱动,这样是不是读写性能会强很多。
let's mongodb up~!
Mongodb driver is supported.