nacos 详解-注册中心

在了解Nacos注册配置中心之前,先了解一下Spring Cloud的相关基础组件有那些

服务发现——Netflix Eureka (Nacos)
服务调用——Netflix Feign
熔断器——Netflix Hystrix
服务网关——Spring Cloud GateWay
分布式配置——Spring Cloud Config (Nacos)
消息总线 —— Spring Cloud Bus (Nacos)

相关介绍

Eureka:个服务启动时,Eureka会将服务注册到EurekaService,并且EurakeClient还可以返回过来从EurekaService拉去注册表,从而知道服务在哪里
Ribbon:服务间发起请求的时候,基于Ribbon服务做到负载均衡,从一个服务的对台机器中选择一台
Feign:基于fegin的动态代理机制,根据注解和选择机器,拼接Url地址,发起请求
Hystrix:发起的请求是通过Hystrix的线程池来走,不同的服走不同的线程池,实现了不同的服务调度隔离,避免服务雪崩的问题
Zuul/GateWay :如果前端后端移动端调用后台系统,统一走zull网关进入,有zull网关转发请求给对应的服务

一 、nacso概念

英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即注册中心,service是指该注册/配置中心都是以服务为核心作者。Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

在这里插入图片描述

1.1 Nacos结构图

在这里插入图片描述

1.2 nacos介绍

在这里插入图片描述

1.3 nacos服务领域模型

在这里插入图片描述

1.4 Nacos主要提供以下四大功能

Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。

Nacos主要提供以下四大功能:

  1. 服务发现和服务健康监测

    • 服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。

    • 服务心跳:在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。

    • 服务同步:Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。

    • 服务发现:服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存。

    • 服务健康检查:Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)。

  2. 动态配置服务

  3. 动态DNS服务

  4. 服务及其元数据管理

在这里插入图片描述

1.5 注册中心选型

在这里插入图片描述

二、注册中心

2.1 注册中心原理

服务注册方法:以Java nacos client v1.0.1 为例子,服务注册的策略的是每5秒向nacos server发送一次心跳,心跳带上了服务名,服务ip,服务端口等信息。同时 nacos server也会向client 主动发起健康检查,支持tcp/http检查。如果15秒内无心跳且健康检查失败则认为实例不健康,如果30秒内健康检查失败则剔除实例。

在这里插入图片描述
当服务提供者启动时,它会自动向 Nacos 注册中心注册自己的元信息,包括服务名、IP 地址、端口号等。

2.2 注册中心的概念和作用

注册中心是微服务架构中的关键组件之一,它用于存储和维护服务的元信息,如服务的地址、端口、版本、健康状态等。当服务提供者启动时,它会将自身的元信息注册到注册中心,同时服务消费者可以从注册中心获取服务的元信息,以便找到并调用服务。此外,注册中心还负责处理服务的上下线、健康检查、负载均衡等任务。

在微服务架构中,使用注册中心的优点是:

  • 实现服务的动态发现和调用,提高系统的灵活性和伸缩性。
  • 简化服务间的通信,降低系统的耦合度。
  • 提供服务的健康检查和负载均衡功能,增强系统的可用性。

2.3 服务提供者的注册

当服务提供者启动时,它会自动向 Nacos 注册中心注册自己的元信息,包括服务名、IP 地址、端口号等。

注册的过程一般如下:

  1. 服务提供者启动后,会向 Nacos 发送注册请求,请求中包含服务的元信息。
  2. Nacos 接收到请求后,会将服务的元信息存储在内存数据库中。
  3. 服务提供者会定期向 Nacos 发送心跳,告知其依然处于活动状态。

三、 配置中心原理

在这里插入图片描述

四、 高可用性

4.1 持久化和同步

Nacos 注册中心的数据通常保存在内存中,以实现高效的查询。但为了防止数据丢失,Nacos 也会将数据持久化到磁盘中。

此外,如果使用了 Nacos 集群,则每个 Nacos 实例都会持有一份数据的副本。当一个 Nacos 实例接收到服务的注册或注销请求时,它会将数据变更同步到其他所有的 Nacos 实例,以保证数据的一致性。

以上就是 Nacos 服务注册流程的详细介绍,从服务提供者的注册到服务消费者的发现,以及数据的持久化和同步,Nacos 都提供了一套完整的解决方案。在下一节中,我们将通过一个实例来演示 Nacos 的服务注册与发现功能。

4.2 集群

五、高级特性

5.1 服务健康检查

Nacos 提供了健康检查的机制,以确保服务的可用性和健壮性。以下是一些主要点:

健康状态: Nacos 可以自动检测服务实例的健康状态,若实例出现问题,则会从服务列表中剔除。

自定义检查: 可以通过配置自定义的健康检查逻辑,以适应特殊需求。在 Spring Cloud 中,可以通过实现 HealthIndicator 接口来自定义服务的健康检查逻辑。

@Component
public class CustomHealthIndicator implements HealthIndicator {
    @Override
    public Health health() {
        // 自定义健康检查逻辑
        return Health.up().withDetail("Custom Check", "OK").build();
    }
}

心跳机制: 服务提供者会定期向 Nacos 发送心跳,确认其健康状态。

5.2 服务分组和命名空间

Nacos 支持通过分组和命名空间进行服务管理,主要有以下优势:

分组管理: 可以将具有相同属性或属于同一业务线的服务组织在一起。在 Nacos 中,可以在注册服务时指定分组。

nacos.discovery.group=DEFAULT_GROUP

命名空间: 通过不同的命名空间可以隔离不同的环境和项目,如开发、测试和生产环境。可以通过 Nacos 控制台创建和管理命名空间,并在配置中指定。

nacos.discovery.namespace=my-namespace-id

5.3 负载均衡策略

Nacos 提供了丰富的负载均衡策略,有助于实现请求的均匀分配:

轮询策略: 按照顺序依次选择服务实例。

随机策略: 随机选择服务实例。

权重策略: 根据设置的权重选择服务实例。在 Nacos 控制台中,可以为服务实例设置权重,然后消费者会根据权重来选择服务实例。

nacos.discovery.weight=80

自定义策略: 可以实现自定义的负载均衡逻辑。

5.4 元数据和扩展属性

Nacos 允许为服务实例添加元数据和扩展属性,使得服务管理更为灵活:

元数据: 可以存储关于服务实例的额外信息,如版本、地域等。可以为服务实例添加元数据,如下所示:

nacos.discovery.metadata.version=v1.0

在消费者端,可以基于元数据进行服务调用,例如使用特定版本的服务实例。

@FeignClient(name = "product-service", contextId = "v1", qualifier = "v1", path = "/v1")
public interface V1ProductService {
    @GetMapping("/product/{id}")
    Product findById(@PathVariable("id") Long id);
}

扩展属性: 可以用于实现自定义的服务管理逻辑。

例如,通过元数据可以实现版本控制,确保不同版本的服务实例能够正确协同工作。

这些高级特性使 Nacos 在复杂的微服务环境中能够提供更为强大和灵活的支持。通过了解和掌握这些特性,可以使 Nacos 在实际项目中发挥更大的作用。

六. 常见问题和最佳实践

6.1 常见问题解析

在使用 Nacos 进行服务注册与发现的过程中,可能会遇到一些常见问题。以下是解析及解决方法的示例:

问题1:服务无法注册

解析: 这可能是因为 Nacos 服务器不可达或配置错误造成的。

解决方法:

检查 Nacos 服务器地址和端口配置

bash nacos.server-addr=127.0.0.1:8848

问题2:服务持续剔除

解析: 这可能是由于服务健康检查失败造成的。

解决方法:

// 修复健康检查逻辑或确保服务实例可正常访问
1
问题3:负载均衡不均匀

解析: 这可能是由于权重配置不当或其他因素造成的。

解决方法:

调整权重配置或采用合适的负载均衡策略 nacos.discovery.weight=50

6.2 最佳实践和推荐配置

在使用 Nacos 时,遵循一些最佳实践和推荐配置可以提高系统的稳定性和可维护性。

最佳实践1:合理设置权重

在进行负载均衡时,合理设置权重可以使系统更加稳定。

根据实际需求合理分配权重 nacos.discovery.weight=60

最佳实践2:使用命名空间隔离环境

通过不同的命名空间隔离开发、测试和生产环境,有助于管理复杂度。

使用专门的命名空间隔离生产环境 nacos.discovery.namespace=production

推荐配置1:设置适当的心跳间隔

适当的心跳间隔可以确保健康检查的准确性,同时不给服务带来过大的负担。

根据实际情况设置合适的心跳间隔 nacos.discovery.heartbeatInterval=5

通过遵循以上常见问题的解决方法和最佳实践,可以使 Nacos 在实际项目中的使用更加流畅和高效,也有助于构建更健壮、可维护的微服务架构。

七、nacos注册中心配置参数

Nacos作为服务注册和配置中心,有许多可配置的参数。以下是一些常见的配置参数及其用途:

spring.cloud.nacos.discovery.server-addr:指定Nacos服务器地址。
spring.cloud.nacos.discovery.namespace:指定命名空间,用于隔离不同环境的服务。
spring.cloud.nacos.discovery.group:指定服务所属分组,默认是DEFAULT_GROUP。
spring.cloud.nacos.discovery.cluster-name:指定服务部署的集群名。
spring.cloud.nacos.config.server-addr:指定Nacos配置中心服务器地址。
spring.cloud.nacos.config.namespace:指定配置所属的命名空间。
spring.cloud.nacos.config.group:指定配置所属的分组,默认是DEFAULT_GROUP。
spring.cloud.nacos.config.extension-configs[0].data-id:指定配置文件的dataId。
spring.cloud.nacos.config.extension-configs[0].group:指定配置文件的分组。
spring.cloud.nacos.config.extension-configs[0].refresh:指定是否动态刷新配

八、Nacos系列之服务注册与发现API和SDK讲解

Nacos自身提供了SDK和API来完成服务注册与发现等操作,SDK本质上就是针对HTTP请求的一层封装,因为服务端只提供了REST接口,那么我们带着规范,去了解一下nacos的核心接口:

8.1、注册实例

官方openAP接口 https://nacos.io/zh-cn/docs/open-api.html

8.1、注册实例SDK

1、作用:将服务地址信息注册到Nacos Server中

2、API:/nacos/v1/ns/instance (POST)

void registerInstance(String serviceName , String ip , int port) throws NacosException;
 
void registerInstance(String serviceName, String ip,int port,String clusterName) throws NacosException;
 
void registerInstance(String serviceName,Instance instance) throws NacosException;

4、讲解:

serviceName:服务名称,相当于配置文件中的spring.application.name

  • ip:服务实例ip
  • port:服务实例port
  • clusterName:集群名称,标识当前服务实例属于哪个集群
  • instance:实例属性,其实就是把上面的参数封装成一个对象

5、调用方式

NamingService naming=NamingFactory.createNamingService(System.getProperty("serveAddr"));
naming.registerInstance("nacos_name","192.168.80.1",8080,"DEFAULT");

8.2、获取全部实例

1、作用:根据服务名称从Nacos注册中心上获取所有服务的实例集合
2、API: /nacos/v1/ns/instance/list (GET)
3、SDK:

List<Instance> getAllInstances(String serviceName) throws NacosException;
List<Instance> getAllInstances(String serviceName,List<String> cluster) throws NacosException;

4、讲解:

  • serviceName:服务名称
  • cluster:集群列表,入参是一个String集合
    5、调用方式:
NamingService naming=NamingFactory.createNamingService(System.getProperty("serveAddr"));
System.out.println(naming.getAllInstances("nacos_name),true);

8.3、服务监控

  • 1、作用:为了实时让客户端感知到服务提供者实例的变化,相当于Eureka中的心跳机制
  • 2、API:/nacos/v1/ns/instance/list (GET)
  • 3、SDK:
void subscribe(String serviceName,EventListener listener) throws NacosException;
void subscribe(String serviceName,List<String> clusters,EventListener listener) throw NacosException;

4、讲解:
EventListener:当提供者服务实例出现异常,比如上下限时,会调用一个事件回调监听有两种方式:

  • 第一种:客户端调用/nacos/v1/ns/instance/list进行定时轮询
  • 第二种:基于DatagramSocket的UDP协议,实现服务端的主动推送
  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nacos配置中心的详细解释如下: 1. 配置管理:Nacos允许您将应用程序的配置集中管理,而无需重新部署或重启应用程序。您可以在Nacos的控制台中定义配置文件,然后在应用程序中使用Nacos的API动态获取这些配置。这样,您可以随时修改配置,而无需停止或重新部署应用程序。 2. 动态刷新:Nacos支持配置的动态刷新。当您在Nacos中修改了配置文件后,Nacos会自动通知正在使用该配置的应用程序,并触发配置的动态刷新。这意味着您可以在不重启应用程序的情况下更新配置,实现实时生效。 3. 一致性保证:Nacos使用了Raft协议来保证配置的一致性。当您修改配置时,Nacos会将修改请求广播给所有的Nacos节点,并通过Raft协议达成一致。这样可以确保所有节点上的配置都是一致的,避免了数据不一致的问题。 4. 服务注册与发现:除了配置管理,Nacos还提供了服务注册与发现功能。您可以将应用程序注册到Nacos中,并通过Nacos的API来发现其他已注册的服务。这样可以帮助您实现微服务架构中的服务自动发现和负载均衡。 5. 多种数据源支持:Nacos支持多种数据源,包括本地文件、数据库和远程配置中心。您可以选择将配置存储在不同的数据源中,以满足不同的需求。 6. API和控制台界面:Nacos提供了丰富的API和控制台界面,方便开发者进行配置的管理和监控。您可以通过API来进行配置的读写操作,并通过控制台界面来查看配置的状态和监控信息。 总而言之,Nacos配置中心是一个功能强大的分布式配置管理平台,它可以帮助开发团队实现配置的集中化管理、动态刷新和一致性保证,同时还提供了服务注册与发现功能。通过使用Nacos,您可以更好地管理和维护应用程序的配置,提高开发效率和系统稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值