Nacos的应用

什么是nacos?

Nacos是一个开源的动态服务发现,配置管理和服务治理平台。主要用于构建原生应用和微服务架构。它是阿里巴巴开源的项目,整合了配置管理,服务管理,服务发现的功能,核心价值在于帮助用户在云平台

Nacos的主要功能包括服务发现与注册,动态配置管理,服务健康监测,流量管理和路由。

Nacos主要的特性如下

  • 服务发现和服务健康检查

支持基于DNS和基于RPC的服务发现需求,并支持服务端和客户端的健康检查,确保服务可用性

  • 动态配置服务

动态配置和管理微服务应用的各种配置信息,支持热加载当你配置有更新时,可以动态地推送到应用的实例

  • 动态DNS服务

管理微服务架构中的DNS服务,支持权重路由,从而使得DNS服务更加灵活和可靠。

  • 服务及元数据管理

提供界面和API,供开发人员和运维人员管理服务信息和元数据

  • 支持多种配置数据格式

如 properties、yaml、json、xml 等。

Nacos如何实现服务注册的?

1,引入依赖

在SpringBoot 应用的pom.xml 或build.gradle 文件中添加Nacos作为服务发现和配置中心的依赖项

  • Maven依赖示例:

    <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
  • Gradle依赖示例

    implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'

2,配置Nacos Server地址

在应用的配置文件中配置Nacos Server的地址,配置文件一般是(application.propertiesapplication.yml

server-addr 是Nacos服务器的地址和端口号,而spring.appliaction.name是注册到Nacos时将使用的服务名称

复制代码
spring.application.name=my-service
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

3,启用服务发现

在SpringBoot应用启动类上添加@EnableDiscoveryClient 注解来激活服务发现功能

复制代码
@SpringBootApplication
@EnableDiscoveryClient
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

随后运行这个SpringBoot 应用,它将自动注册到Nacos Server,并且Nacos会获取到服务的一些基本信息如服务名,IP地址,端口号等

可以通过访问Nacos控制台来检查服务是否成功注册,默认情况下,控制台可以通过Ip:8848/nacos访问,登录进入后,你应该可以在服务列表中看到刚刚启动的服务信息

Nacos客户端会定期发送心跳到Nacos Server来更新服务实例的状态,可以在配置文件中对心跳间隔/超时时间进行配置。

Nacos在集群模式下如何保证高可用?

  • 集群部署

Nacos支持集群模式部署,在生产环境中建议至少三个节点以保障高可用性,这种部署方式可以使单个节点出故障时整个系统依然可用。

  • 数据库复制

在集群环境中,Nacos使用类似于Raft等一致性协议来复制和同步节点之间的数据,这确保了即使在多节点环境下,每个节点都具有最新和一致的配置数据和服务信息

  • 选举机制

如果主节点出现故障,Nacos 集群会自动进行新的领导者选举来保证服务的连续可用性。

  • 心跳检测

Nacos 持续监测服务实例的心跳,从而对服务进行健康检查。服务实例需要定时发送心跳来保持其在注册中心的健康状态

  • 持久化存储

Nacos 支持将配置数据和服务信息持久化存储到磁盘上,这可以防止因节点重启丢失数据。

  • 负载均衡

Nacos客户端会缓存服务注册列表,并且基于负载均衡算法访问服务节点,减轻单个节点的压力

备份和恢复

  • 多数据中心

部署在多数据中心可以进一步提高系统的可用性,并在一个地理位置的整体故障中提供保护。

  • 监控和预警

设置监控系统来跟踪每个 Nacos 节点的状态,以及提前预警系统故障。

相关推荐
Asthenia041216 分钟前
什么是语法分析 - 编译原理基础
后端
Asthenia041230 分钟前
理解词法分析与LEX:编译器的守门人
后端
uhakadotcom31 分钟前
视频直播与视频点播:基础知识与应用场景
后端·面试·架构
Asthenia04121 小时前
Spring扩展点与工具类获取容器Bean-基于ApplicationContextAware实现非IOC容器中调用IOC的Bean
后端
bobz9652 小时前
ovs patch port 对比 veth pair
后端
Asthenia04122 小时前
Java受检异常与非受检异常分析
后端
uhakadotcom2 小时前
快速开始使用 n8n
后端·面试·github
JavaGuide2 小时前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
bobz9652 小时前
qemu 网络使用基础
后端
Asthenia04123 小时前
面试攻略:如何应对 Spring 启动流程的层层追问
后端