nacos原理总结与服务发现框架对比

1. 简介

疑问驱动学习,带着问题阅读源码,目标感更加明确。我最近有针对性阅读了nacos客户端部分源码,解决了我对其配置管理方面的疑问。然后我结合不同框架的文档,从多个维度对比框架,可以作为技术选型的简单依据。

2. nacos原理总结

2.1. 关于配置管理的一些疑问与解答 

启动时如何从nacos server获取配置数据?

利用BeanFactoryPostProcessor的生命周期方法,遍历beanFactory中注册的所有bean,仅关注与@NacosPropertySource、@NacosPropertySources、NacosPropertySourceXmlBeanDefinition相关bean,首先请求nacos server配置数据,若失败则使用本地快照数据,解析为PropertySource并添加到Spring env PropertySources,如果需要自动更新则添加监听器。

大致流程与spring cloud config类似,都是启动时从远端获取配置,添加到env中。

client如何知道nacos server配置更新?

由agent(ConfigTransportClient)负责,其作为与server连接的客户端,添加两个循环任务:1若配置了username则每5毫秒进行login操作且更新token,2轮询方式查询server端配置更新

具体的查询配置更新的步骤为:

  1. 首先查询哪些坐标的数据变更了
  2. 然后根据坐标获取新数据并存储到内存和快照
  3. 更新spring env中的PropertySources
  4. 发出配置更新事件

配置数据如何设置到field数据?

使用BeanPostProcessor生命周期方法,定位@NacosValue并注入数据,并使用map记录 配置属性名所有关联field的关系。

配置更新后,如何变更field数据?

接收config变更事件,更新field数据。

2.2. 配置管理客户端主要的类

nacos原理总结与服务发现框架对比_第1张图片

为了便于读者自行查看源码,主要类的全路径如下:

com.alibaba.nacos.spring.core.env.NacosPropertySourcePostProcessor
com.alibaba.nacos.spring.core.env.AbstractNacosPropertySourceBuilder
com.alibaba.nacos.api.NacosFactory#createConfigService
com.alibaba.nacos.api.config.ConfigService
com.alibaba.nacos.client.config.NacosConfigServic
com.alibaba.nacos.client.config.impl.ClientWorker
com.alibaba.nacos.client.config.impl.ClientWorker.ConfigRpcTransportClient
com.alibaba.nacos.client.config.utils.SnapShotSwitch
com.alibaba.nacos.spring.context.annotation.config.NacosValueAnnotationBeanPostProcessor

3. 服务发现框架对比

从多个维度对比服务发现框架,euraka、consul、nacos,作为选型依据。

euraka consul nacos
学习成本
使用难易程度 简单 较难 简单
服务发现 支持 支持 支持
配置中心 不支持 支持 支持
服务形式 restful - restful、rpc等
UI控制台
官方中文文档
热度(依据github) -
使用语言 java go java

你可能感兴趣的:(技术思考总结,服务发现,nacos,nacos原理)