AgileConfig icon indicating copy to clipboard operation
AgileConfig copied to clipboard

[性能]当一个app配置太多时,发布配置很慢

Open saber-wang opened this issue 2 years ago • 15 comments
trafficstars

一个app有5000条配置时,发布需要10s左右。

问题应该出在这里,操作了大量的数据。 https://github.com/dotnetcore/AgileConfig/blob/147bbb1f4148478bd99dbdb5d66adc188eba6d69/AgileConfig.Server.Service/ConfigService.cs#L615-L616

可选操作:

  1. 允许关闭记录历史版本的功能
  2. 使用新的历史记录表,以实现仅删除和插入操作并使用批量插入

saber-wang avatar Dec 21 '22 02:12 saber-wang

确实如果有5000条的话,每次发布都要插5000进去来记录历史版本信息。话说你们配置也太多了把 ?哈哈

kklldog avatar Dec 21 '22 03:12 kklldog

@kklldog 系统参数,之前都是查数据库,现在想放在配置里。这还只是一个服务的配置···

saber-wang avatar Dec 21 '22 04:12 saber-wang

@kklldog 可以处理嘛?🤣

saber-wang avatar Dec 22 '22 01:12 saber-wang

@kklldog 可以处理嘛?🤣

这个一时半会搞不好,整个版本记录的设计都要更改。

kklldog avatar Dec 22 '22 02:12 kklldog

@kklldog 可以先出禁用历史记录嘛?不然内部测试过不了···😖

saber-wang avatar Dec 22 '22 02:12 saber-wang

@kklldog 可以先出禁用历史记录嘛?不然内部测试过不了···😖

我目前没空,你自己试着改一下。

kklldog avatar Dec 23 '22 08:12 kklldog

@saber-wang 5000+的配置 ?有点好奇是些什么配置项
我的理解是AgileConfig只是解决运维配置功能就好,例如功能的开启,数据库连接,依赖服务配置,加密key,log记录等,
如果是大量业务配置,是否应该将配置放到业务系统中去? 如果是业务逻辑的配置,应该也会有频繁的修改需求,也要来agileconfig发布一次才生效?

bc4250 avatar Jan 09 '23 01:01 bc4250

@bc4250 按各种复杂层级的业务配置。 目前来说除了初始化,一次仅会改几条配置,但是AgileConfig的发布行为是每次都会处理当前app的所有配置而不仅仅是修改的配置。 也就是说每次都要添加5000+行数据并更新5000+行数据.

saber-wang avatar Jan 09 '23 01:01 saber-wang

@saber-wang 5000+的配置 ?有点好奇是些什么配置项我的理解是AgileConfig只是解决运维配置功能就好,例如功能的开启,数据库连接,依赖服务配置,加密key,log记录等, 如果是大量业务配置,是否应该将配置放到业务系统中去? 如果是业务逻辑的配置,应该也会有频繁的修改需求,也要来agileconfig发布一次才生效?

赞同。 我觉得配置中心应该尽量放公有的配置。配置中心放5000确实有点哈人了。我觉得有几种解决的思路 0.拆分配置,配置中心只放重要公有的配置 1.是修改源码,用批量插入,或者freesql noneparameter 可能能够提高性能 2.是修改源码,去除版本控制,这样数据库的数据量就变少了,应该就能提高性能 3.修改服务连接的数据库。有可能能提高性能

yangbocheng avatar Jan 09 '23 10:01 yangbocheng

@yangbocheng 计划是修改版本控制,仅为修改的配置创建版本。

saber-wang avatar Jan 09 '23 10:01 saber-wang

  1. 单纯就这个问题而言,后端存储如果能用文档数据库,或直接用file,参考Git的存储, 而不是关系型数据库,应该可以改善速度;
  2. 另外不用修改程式,agileconfig提供继承配置呢, 用层级继承配置应该也可以吧,建议测试一下.

bc4250 avatar Jan 10 '23 02:01 bc4250

@saber-wang 5000+的配置 ?有点好奇是些什么配置项我的理解是AgileConfig只是解决运维配置功能就好,例如功能的开启,数据库连接,依赖服务配置,加密key,log记录等, 如果是大量业务配置,是否应该将配置放到业务系统中去? 如果是业务逻辑的配置,应该也会有频繁的修改需求,也要来agileconfig发布一次才生效?

是的,不应该把 agileconfig 做为完成业务的组件来使。配置不应该侵入太多到业务中。

kklldog avatar Jan 10 '23 05:01 kklldog

  1. 单纯就这个问题而言,后端存储如果能用文档数据库,或直接用file,参考Git的存储, 而不是关系型数据库,应该可以改善速度;
  2. 另外不用修改程式,agileconfig提供继承配置呢, 用层级继承配置应该也可以吧,建议测试一下.

如果基于文件也是个不错的办法。 或许我可以实现一个 mongodb 的驱动,这样是不是读写性能会强很多。

kklldog avatar Jan 10 '23 05:01 kklldog

  1. 单纯就这个问题而言,后端存储如果能用文档数据库,或直接用file,参考Git的存储, 而不是关系型数据库,应该可以改善速度;
  2. 另外不用修改程式,agileconfig提供继承配置呢, 用层级继承配置应该也可以吧,建议测试一下.

如果基于文件也是个不错的办法。 或许我可以实现一个 mongodb 的驱动,这样是不是读写性能会强很多。

let's mongodb up~!

robyle avatar Sep 07 '23 06:09 robyle

Mongodb driver is supported.

kklldog avatar May 23 '24 08:05 kklldog