分布式配置中心

nacos config 工作原理

目前任务调度在项目中的问题

  1. 配置不能实时刷新,一些业务配置属性及开关需要重新启动
  2. spring cloud config 支持实时刷新需要引入 spring cloud bus,但是bus 又依赖mq,针对于渠道微服务,依赖较多,不够简单
  3. spring cloud config 基于git ,目前目前在gitlab 上管理,管理台不够好用

调研及横向对比

  1. spring cloud config
  2. apollo 携程
  3. Disconf 百度开源项目,目前不维护
  4. nacos 阿里开源项目,配置及注册中心
  5. consul(go 语言开发) 注册及配置中心

调研结果

选型nacos,原因:

  1. 简单、配置准实时刷新
  2. 社区目前较为活跃
  3. spring cloud config 可以平滑迁移至nacos
  4. apollo 功能相对完善,但是基于zookeeper,结构较为复杂,nacos 集群 + 域名 + nginx 可以解决可用性、横向扩容
  5. consul 相对简单
  • 没有权限控制-
  • 配置支持刷新,但是时效性差,客户端定时轮询获取配置默认1s,性能差
  • 没有fail over 策略,如果服务重启,consul挂掉,启动会失败(nacos 会有failover 文件保存到本地)官方文档翻译

分析nacos

  1. 可用性
  2. 准确定
  3. 性能

client config 端

  1. 可用性
    nacos client 启动服务时会先从failOver获取缓存文件,不存在从server端获取,server 端获取异常从本地snapshot 获取
    nacos client 挂掉,nacos server 同时挂掉,服务可以启动(前提是不删除snapshot版本)
  2. 准确定
  • nacos client 使用long-polling 保证数据变更准准实时刷新
  1. 性能
  • 客户端使用Long-polling的方刷新配置,拉-推的组合模式。相比polling 更节省网络资源和cpu
  • 优先从本地缓存读取配置文件

server config 端

  1. 可用性
  • 支持集群cluster
  • 满足CAP中的A(avaliable)和P(partion tolerance) ,server name 满足 CP 理论。所有的请求都会到leader节点处理。
  • raft算法leader 挂后、只要存在一个节点也可以提供服务
  1. 准确性
  • 所有节点是对等节点,publishConfig 数据修改后,会触发事件,通知集群其他节点dataChange接口
  1. 性能
  • servlet 3.0 请求异步处理,LongPolling+ AsyncContext + 事件监听模式,
  • 数据变化实时返回,请求超时时间内有保证数据的实施性
  • 数据无变化添加监听,有变化,监听实时处理返回结果
  • 超过一定时间无变化,返回结果 无变化
  • 本地缓存文件,获取配置文件都从本地获取返回而不是数据库
  • 大量基于事件处理方式,保证实时性

nacos 涉及知识

  1. spring 自定义配置源 NacosPropertySourceLocator 实现 PropertySourceLocator 将端配置交给spring 管理(参考 spring 自定义数据源:https://www.cnblogs.com/lizo/p/7683300.html)NacosPropertySourceLocator
  2. spring 事件监听
  3. servlet 3.0 asyncContext 异步处理
  4. raft 算法
  5. spring @RefreshScope 动态刷新bean
  6. spring boot acutor nacos 接入了endPoint(NacosConfigEndpoint extends AbstractEndpoint> http://localhost:8080/nacos_config 查看endPoint数据)
  7. spring boot health nacos 接入 healthIndicator (NacosConfigHealthIndicator extends AbstractHealthIndicator)http://localhost:8080/health 健康检查,通过查询接口来处理。不太理解为啥是以dataId为维度健康检查

最后附上自己精心制作的nacos工作原理图