Nacos最全详解(图文全面总结)

Nacos最全详解(图文全面总结)

Nacos是非常重要的微服务组件,也是大厂经常考察的内容,下面我就全面来详解Nacos@mikechen

Nacos介绍

Nacos是一个开源的动态服务发现、配置管理、和服务管理平台,它由阿里巴巴开发,旨在帮助更好地构建微服务应用。

Nacos最全详解(图文全面总结)

 

Nacos作用功能

Nacos的作用,主要解决以下4大点:

Nacos最全详解(图文全面总结)

  1. 服务注册与发现:允许应用程序自动注册自己的实例,并且能够动态地发现其他服务实例。
  2. 动态配置管理:支持将配置信息存储在Nacos中,并实时地动态更新应用程序的配置。
  3. 服务健康监测:Nacos可以监测注册的服务实例的健康状态,并及时地发现和移除不健康的实例。
  4. 服务路由和网关:Nacos可以集成到服务路由、和网关中,实现灵活的流量管理。

 

Nacos架构

Nacos架构,如下图所示:

Nacos最全详解(图文全面总结)

主要包含,6大组件:

1、命名空间(Namespace)

用于隔离不同环境、或者不同团队的配置和服务,每个命名空间都有自己的配置信息、和服务注册表。

可以通过命名空间,实现不同环境(如:开发、测试、生产)之间的隔离。

 

2、服务注册中心

服务注册中心:负责管理服务实例的注册和发现,提供服务发现的API。

服务实例在启动时,向服务注册中心注册自己的信息,包括:服务名称、IP地址、端口号…等信息。

其他服务,可以通过服务注册中心查询可用的服务实例,并实现服务之间的通信、和调用。

 

3、配置管理中心

配置管理:主要用于管理动态配置信息,支持配置的读取、写入、和监听等操作。

配置管理中心,还提供了简单易用的API、和控制台,方便开发人员管理、和监控配置信息。

 

4、集群节点

Nacos采用分布式架构,可以部署多个节点以实现高可用性、和容错性。

集群节点之间。通过协调算法(如:RAFT),保持数据的一致性、和同步。

 

5、数据存储

数据存储,主要保证了配置信息、和服务注册信息的持久化、和可靠性。

Nacos使用可插拔的存储后端来存储,配置信息、服务注册信息等。

比如:MySQL、Oracle、Redis等作为存储后端。

 

6、客户端

客户端:用于与Nacos服务器进行通信的客户端库,负责:服务注册、配置获取等操作。

 

Nacos使用

1、添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

 

2、配置Nacos

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  # Nacos服务器地址
        namespace: your-namespace    # 命名空间

 

3、创建应用

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello from Microservice!";
    }
}

运行你的应用程序,它将自动注册到Nacos服务器,你可以在Nacos的控制台中查看到你的服务。

 

4、服务发现

现在,让我们创建另一个微服务项目,它将使用Nacos来发现上面创建的微服务。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestController
public class DiscoveryController {

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/discover")
    public List<ServiceInstance> discoverMicroservice() {
        return discoveryClient.getInstances("your-service-name");
    }
}

现在,你可以分别启动这两个微服务应用程序,并通过浏览器或其他HTTP客户端来测试它们。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧