前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Nacos 工作原理-服务注册、服务发现区别和作用

Nacos 工作原理-服务注册、服务发现区别和作用

作者头像
Linux运维技术之路
发布2025-01-16 10:31:44
发布2025-01-16 10:31:44
17600
代码可运行
举报
运行总次数:0
代码可运行

Nacos 工作原理

Nacos 是一个开源的动态服务发现、配置管理和服务管理平台,广泛应用于微服务架构中,尤其是在 Spring CloudDubbo 等框架中。它的核心功能包括 服务注册与发现动态配置管理服务健康检查 等。

Nacos 主要依赖于 客户端与服务器端的交互 来实现服务注册和发现,并使用 监听机制 来实现动态配置更新。以下是 Nacos 的工作原理和常见功能的详细介绍。

1. 服务注册与发现

服务注册

服务注册是指在分布式系统中,每个服务启动时,会向 Nacos 服务器注册自己,告知 Nacos 该服务的 名称地址端口 等信息。服务注册可以帮助其他服务找到该服务并进行通信。

工作原理

  1. 1. 服务启动:每当一个服务启动时,它会通过 Nacos 提供的 API 向 Nacos 服务器发送服务注册请求,告知服务器它的 IP 地址端口号服务名称 等信息。
  2. 2. Nacos 注册中心:Nacos 服务器接收到注册请求后,会将该服务的信息保存到数据库中,供其他服务查询。
  3. 3. 服务心跳:为了保证服务的健康状态,注册的服务会定期向 Nacos 发送 心跳,以告知自己仍然存活。如果超过一定时间未收到心跳,Nacos 会将该服务从服务注册表中移除。
服务发现

服务发现是指当某个服务需要调用其他服务时,Nacos 提供的服务发现功能允许该服务查询注册中心,获取其它服务的 地址端口 等信息。通过服务发现,服务之间可以实现 动态发现,避免了硬编码服务地址的问题。

工作原理

  1. 1. 服务消费方:服务消费者通过调用 Nacos 提供的 APISDK 向 Nacos 发送查询请求,获取目标服务的地址列表。
  2. 2. Nacos 返回地址:Nacos 返回目标服务的 IP 地址端口号。消费者可以直接通过这些信息与目标服务进行通信。
  3. 3. 动态监听:Nacos 支持服务的动态监听,当目标服务的地址发生变化时,消费者能够及时感知并重新获取最新的服务列表。

服务注册与服务发现的区别与作用

服务注册(Service Registration)
  • 作用:服务提供者(如微服务)在启动时将自己的信息注册到 Nacos 服务注册中心。
  • 过程
    • • 服务提供者启动时向 Nacos 发送请求,告知自己将要提供服务(包括服务名称、地址、端口、权重等)。
    • • 注册中心将该服务的信息保存,方便其他服务查找和调用。
  • 目的:解决了 服务如何被发现 的问题,即服务提供者向注册中心报告自己的存在。
服务发现(Service Discovery)
  • 作用:服务消费者(如微服务客户端)通过 Nacos 查找需要调用的服务的 地址信息
  • 过程
    • • 服务消费者向 Nacos 发送请求,查询某个服务的 实例列表
    • • 注册中心返回该服务的地址信息,服务消费者可以直接调用该服务。
    • • Nacos 支持实时监听服务的变更,服务消费者可以在服务变更时自动感知。
  • 目的:解决了 服务如何被访问 的问题,即服务消费者如何动态获取服务提供者的信息。

区别

  • 服务注册是服务提供者主动将自己的信息注册到 Nacos,向注册中心报告自己提供的服务。
  • 服务发现是服务消费者主动查询 Nacos,发现服务提供者的位置信息(如 IP、端口等)。

总结

  • 服务注册让服务提供者“告诉”注册中心自己可用。
  • 服务发现让服务消费者“查询”注册中心获取到可用的服务。

2. Nacos 的核心功能

动态配置管理

Nacos 不仅用于服务注册与发现,还提供了强大的动态配置管理功能,允许应用程序根据需求动态获取配置,并支持配置的实时更新和推送。

  1. 1. 配置管理:服务可以在 Nacos 上注册和管理各种配置文件(如数据库连接配置、消息队列配置等)。
  2. 2. 动态刷新:当配置发生变更时,Nacos 可以通过监听机制通知到各个服务,服务可以实时更新配置,无需重启。
服务健康检查

Nacos 还支持服务的健康检查,定期检测已注册服务的状态。服务如果停止发送心跳,Nacos 会标记该服务为不可用,其他服务就无法再发现它。

  • 健康检查方式
    • HTTP 方式:通过指定的 URL 路径检查服务的健康状态。
    • TCP 方式:通过 TCP 连接检查服务的可用性。
负载均衡

在服务发现过程中,Nacos 会根据负载均衡策略(如 轮询权重 等)返回服务提供者的地址,实现对服务请求的均匀分配。

3. Nacos 使用方式(简单实用的步骤)

Nacos 提供了简单易用的方式来进行服务注册与发现。下面是一个简单的使用流程。

1. 安装 Nacos

可以通过 Docker、Kubernetes 或直接运行可执行文件的方式部署 Nacos。以下是通过 Docker 安装 Nacos 的步骤:

代码语言:javascript
代码运行次数:0
复制
# 拉取 Nacos Docker 镜像
docker pull nacos/nacos-server

# 启动 Nacos 容器
docker run -d -p 8848:8848 --name nacos-server nacos/nacos-server

Nacos 默认监听端口为 8848,访问 Nacos 控制台的 URL 为 http://localhost:8848/nacos

2. 服务注册

服务提供者可以通过 Nacos 的 Java SDKREST API 注册自己。假设你使用 Spring Cloud,可以通过 spring-cloud-starter-alibaba-nacos-discovery 轻松实现服务注册。

示例代码(Spring Boot):

代码语言:javascript
代码运行次数:0
复制
spring:
  application:
    name: my-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

然后在 Spring Boot 应用启动类中,加入 @EnableDiscoveryClient 注解:

代码语言:javascript
代码运行次数:0
复制
@SpringBootApplication
@EnableDiscoveryClient
public class MyServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyServiceApplication.class, args);
    }
}

服务启动后,自动向 Nacos 注册 my-service

3. 服务发现

服务消费者也可以通过 Spring Cloud Nacos 来进行服务发现,使用 @NacosInjected 注解获取 Nacos 中注册的服务信息。

代码语言:javascript
代码运行次数:0
复制
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

示例代码(获取服务地址):

代码语言:javascript
代码运行次数:0
复制
@RestController
public class MyController {

    @NacosInjected
    private NamingService namingService;

    @GetMapping("/discovery")
    public String discoverService() throws NacosException {
        List<Instance> instances = namingService.getAllInstances("my-service");
        return instances.toString();
    }
}

通过调用该接口,服务消费者会查询到 Nacos 中注册的服务信息。

4. 动态配置管理

Nacos 还提供了 配置管理 功能,服务可以通过 Nacos 获取并监听配置的变更。以下是一个 Spring Boot 配置管理的简单示例:

代码语言:javascript
代码运行次数:0
复制
spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        name: application

通过这种方式,Nacos 会读取并动态推送配置文件的变更。

总结

  • Nacos 是一个支持服务注册、服务发现和动态配置管理的开源平台,常用于微服务架构中。
  • 服务注册与发现:服务注册是服务向 Nacos 注册自己的信息,服务发现是服务消费者查询 Nacos 获取其他服务的地址信息。
  • 核心功能:动态配置管理、服务健康检查、负载均衡等。
  • 使用方式:通过 Nacos 的 API 或与 Spring Cloud 等框架集成,可以实现服务注册、服务发现和配置管理等功能。

通过 Nacos,微服务架构中的服务可以动态发现其他服务的地址,并实现灵活的配置管理,极大简化了分布式系统中的服务协调工作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linux运维技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nacos 工作原理
  • 1. 服务注册与发现
    • 服务注册
    • 服务发现
  • 服务注册与服务发现的区别与作用
    • 服务注册(Service Registration)
    • 服务发现(Service Discovery)
  • 2. Nacos 的核心功能
    • 动态配置管理
    • 服务健康检查
    • 负载均衡
  • 3. Nacos 使用方式(简单实用的步骤)
    • 1. 安装 Nacos
    • 2. 服务注册
    • 3. 服务发现
    • 4. 动态配置管理
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档