Nacos 注册中心和配置中心应用实践

59 阅读4分钟

天地英雄气,千秋尚凛然。

1 前言

NacosAlibaba 开源的一个服务注册发现、配置管理以及服务管理的中间件,在微服务项目开发中有着广泛的应用。本文将结合项目实践,详细介绍 Nacos 2.x 的注册中心和配置中心的应用和原理。

2 服务注册和发现

微服务开发中,服务注册和发现是十分常用的,服务注册中心从最早的 zookeeper + dubbo, 然后到微服务中的 eurekaconsuletcnacos , 在这其中 nacos 表现更优秀。

eec51.png

  • 服务注册流程

nacos 作为注册中心,服务提供者 provider 在项目启动时将其服务注册到 nacos 中。主要步骤包括:

1 客户端启动
需要加载配置文件并初始化相应的组件,服务实例向 nacos 注册中心发送注册服务请求,携带服务名称、ip、端口以及元数据等
信息,还包括版本号,集群,分组环境命名空间等信息。
2 nacos注册请求  
nacos 服务端接收到注册请求后,首先进行参数校验,保证注册的服务合法。nacos服务端会将实例信息存储到内存中,并持久化
到数据库中,保证 naocs 在重启或故障恢复后能够重新加载到注册信息。
3 心跳机制 服务实例会定期(默认为5s)向 nacos 发送心跳包,报告自身状态。nacos 通过接收心跳包来监控实例的健康状态,
如果在一定时间内(默认15s)未收到服务实例的心跳,nacos 将认为该实例不可用,并将其从服务列表中移除。
4 服务下线 服务实例在关闭之前,会向 nacos 发送注销请求,主动从服务列表中移除自身。被动下线,如果心跳检查失败,
nacos 会自动将服务实例标记为不可用并移除。
  • 服务发现流程

服务消费者 consumer 通过 nacos 获取可用的服务实例列表,服务发现的详细的步骤如下:

1 服务查询 消费者向 nacos 发送查询请求,指定所需调用的服务名称,拉取到服务后也会将注册信息存放在本地内存中。
2 查询策略 消费者可以选择不同的查询策略,例如只查询健康的服务实例以及按标签过滤实例。nacos处理查询请求,nacos
查找服务式根据服务名称去内存中的注册表中查询服务的实例列表,根据相应的策略对可用的服务实例进行过滤和排序,优先返回
健康的实例或者按照负载均衡策略进行排序。
3 返回服务列表 nacos 将符合条件的服务实例列表返回给消费者,列表包含实例的 ip 端口和元数据信息。
4 负载均衡  消费者根据负载均衡策略(轮询、随机、权重)选择一个实例进行调用,消费者使用选定的服务实例信息(ip和端口发起远程调用。

3 配置发布和更新

用户通过 Nacos 控制台或 API 发布配置,指定配置的 DataIdGroup 和配置项信息。Nacos 接收到请求后将配置存储在后端存储中,并在内存中维护配置缓存。

77d.png

客户端通过订阅机制监听配置的变化,订阅请求中指定要监听的配置项 dataIdgroup ,长轮询机制,客户端与 nacos 采用长轮询的机制,定期 (默认30s) 发送请求,检查配置是否发生变化。

4 项目配置

在使用 nacos 时,需要在项目中引入服务注册和配置的依赖,具体如下所示:

<!-- nacos 注册中心客户端依赖包-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--nacos 配置中心配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

在项目开发中,注册中心和配置中心的配置如下图所示:

1133.JPG

# 通常情况下,在本地开发时需要防止本地服务注册到 nacos, 影响测试环境的运行。通常需要在 idea 中配置 vm proerties中配置
-Dspring.cloud.nacos.discovery.register-enabled = false

5 总结

Nacos 2.x 作为注册中心和配置中心,通过高效的服务注册与发现机制,以及多种保障配置更新及时性,提供了稳定可靠的服务管理能力。此外还有心跳检测、长轮询和推送机制等特性,确保了服务实例的动态管理和配置更新的及时性,是微服务项目开发的最佳选择。