Nacos服务注册与发现---Nacos简介以及原理

1. 什么是Nacos

​ ​  ​      ​  Nacos是SpringCloud Alibaba的一个服务治理的一个重要组件,英文全称Dynamic Naming and Configuration Service,顾名思义就是动态命名和配置服务,它不仅提供服务的注册与发现,还提供统一的配置管理,同时它还对Ribbon负载均衡进行了集成,它取代了Eureka作为服务注册中心,取代了Config作为服务配置管理中心,同时他还提供了良好的Web操作界面,并且可以对微服务进行分组等管理,非常的好用以及轻便。

2. Nacos架构

Nacos服务注册与发现---Nacos简介以及原理_第1张图片
 ​  ​      ​ Nacos的架构模式和Eureka的一样,都是C/S架构,分为客户端和服务端,其中客户端主要是我们的微服务,与微服务嵌套在一起,主要是可以将服务注册到服务端。而服务端主要是用来管理注册进来的微服务,类似于提供一个地方让客户端注册进来,服务端主要采用Java语言来编写,而客户端则不限制语言。

注意: Nacos还有一个特点就是:在CAP的原则遵循上,它可以做到在CP和AP上相互转换,但这并不代表它同时循了CAP三大原则,而是在CP和AP上作出选择,在默认情况下,Nacos遵循的是AP原则。

//使用以下指令可以作出修改
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

3. Nacos服务注册中心原理

Nacos服务注册与发现---Nacos简介以及原理_第2张图片

Nacos服务注册过程主要分为以下3个状态:注册前,注册中,注册后

注册前: 客户端,即我们的微服务启动时,会将服务的ip,端口等信息封装成一个instance实例对象,准备向Nacos服务端注册,在注册前,客户端会根据instance这个包含IP,端口等信息的实例对象封装成一个BeanInfo对象,并创建一个定时的心跳连接机制,每隔一段时间都会向Nacos服务端发送PUT请求,Nacos服务端在接收到心跳请求后,会检查当前服务列表是否有这个服务实例,如果有,则刷新该实例的心跳时间,如果没有的话,Nacos服务端开始创建实例。

注册中: 在Nacos服务端接收到心跳请求后,会使用Post请求将客户端相关的实例对象信息注册进Nacos服务端。在Nacos服务端接收到创建实例请求后,服务端会将客户端发过来的相关信息封装成一个instance对象,然后为这个实例对象创建一个服务,通常用我们的微服务名称来命名,一般来说一个服务下不单止一个实例,然后服务端将这个服务信息存储进服务端中一个叫ConcurrentHashMap的数组中,格式命名方式一般为:Map(namespace,Map(group::serviceName, Service))。服务创建完成后,会创建一个定时任务来检查这个服务下的实例是否健康,如果心跳机制超过15秒,服务状态为不健康,超过30秒,这个实例直接被删除。

 ​  ​      ​ 服务创建后,开始将服务存储进服务列表,根据服务的实例进行划分,如:这个服务的namespace,group等等。

注册后: 在服务注册成功后,客户端会通过定时心跳任务来从服务端获取信息并存储进本地缓存,然后刷新该服务实例的心跳时间。服务端在接收到心跳后,会定时向客户端推送相关的数据给客户端,一般来说是10秒推送一次。

详细原理可参考: https://blog.csdn.net/qq_34700865/article/details/118760601

4. Nacos服务配置中心原理

Nacos服务注册与发现---Nacos简介以及原理_第3张图片
Nacos配置中心运行流程主要分为:

1.当配置人员在Nacos里修改配置时,Nacos会将配置信息更新并存储到相应的数据库里(Nacos里有内置的数据库Derby,但在实际的情况下,大多数都采用MySQL来存储配置信息,而且在目前看来,Nacos只支持MySQL作为信息配置中心的配置存储库)。

2.当我们的服务注册到Nacos时,其实是有一个定时心跳任务的,它每10秒会向Nacos发送心跳信息并获取相对应的配置数据。

3.当客户端获取到服务端的配置信息时,会比较配置信息的MD5数据,当获取到的MD5数据与客户端本地缓存的数据不匹配时,客户端则会重新从服务端来获取新的配置信息并将它缓存在客户端的本地缓存中。

你可能感兴趣的:(SpringCloud,Alibaba篇,springcloud,微服务,服务发现,分布式)