首页 > 其他分享 >路过的朋友,欢迎来看看通俗易懂版本的Nacos

路过的朋友,欢迎来看看通俗易懂版本的Nacos

时间:2024-06-04 16:56:52浏览次数:20  
标签:服务 name 路过 配置 Nacos 支持 通俗易懂 注册

一、什么是Nacos?

一个更易于构建云原生应用的动态服务发现、服务配置和服务管理平台。

 

Nacos的关键特性:

 

二、注册中心演变及其设计思想

1、RestTemplate调用远程服务

如果此时,服务端接口接口名或参数或请求方式更改了,那么就得同步修改此restTemplate方法,感觉很麻烦

 

​
@SpringBootTest
class Test {

   @Resource
   private RestTemplate restTemplate;

   @Test
   void testSimple()  {
      // 请求地址
      String url = "http://www.nzbc.com/updateUser";

      // 要发送的数据对象
      User user = new User();
      user.setUserId(1);
      user.setName("weiwie编程");
      user.setMsg("读weiwei编程,品技术人生");

      // 发送post请求
      User result = restTemplate.postForObject(url, user, User.class);
      System.out.println(result);
   }
}

​

2、通过Nginx维护服务列表(upStream)

 

通过Nginx维护服务列表(upStream),如果服务较多的话,在Nginx通过upStream的方式去配置的话,Nginx配置文件会变得非常的难以维护。

3、通过Nacos实现注册中心

 

这种是最简单的Nacos注册中心,有若干个服务,都注册到Nacos注册中心,调用之前,先到Nacos获取对应接口,然后进行实际的调用。

但是,思考一个问题,如果Nacos宕机了,怎么办?如果从Nacos获取到接口后,调用服务2时,服务2宕机了,怎么办?

4、心跳版Nacos

 

心跳版Nacos,服务1和服务2和Nacos之间维护一个心跳关系,每5秒跳一次,频率不能太快或者太慢,否者会嗝屁的。

如果Nacos在5秒内没有收到心跳,则表示服务挂了,Nacos会下线此服务

对于超过15秒没有收到客户端心跳的服务实例,会将它的healthy属性置为false,客户端无法调用healthy为false的服务。

如果超过30秒没有收到心跳,Nacos会直接将此服务剔除

也可以通过服务端主动注销的方式,停止注册。

服务1调用服务2时,服务1会通过定时任务到Nacos中获取在线的服务,保证所调用的服务一直都是健康在线的状态。

获取到之后,用缓存将其保存起来,然后通过负载均衡器调用服务2,此时,将不再使用服务端的负载均衡Nginx了。

三、Nacos Discovery

SpringBoot中引入Nacos Discovery,实现与Nacos的无缝连接,Nacos Discovery可以将服务自动注册到Nacos服务端,并且能够动态感知此服务,并刷新服务列表。并将服务的host、port、URL等信息注册到Nacos。

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

 

Nacos 的配置项信息:

 

四、Nacos核心功能

 

1、服务注册

Nacos Client会通过发送REST请求向Nacos Server注册自己的服务,提供自身的元数据,比如host、port、url等信息,Nacos Server在收到注册请求后,会将这些数据信息存储在一个双层的内存map中。

2、服务心跳

服务注册后,服务消费者和Nacos Server之间会维护一个心跳,定时通知server,此服务还活着,防止被剔除掉。

3、服务同步

Nacos Server集群之间会互相同步已注册的服务,用来保证服务列表的一致性。

4、服务发现

服务消费者在调用服务提供者的服务时,会发送一个REST请求到Nacos Server,获取健康的服务列表,然后将其缓存到本地,同时开启一个定时任务,定时访问Nacos Server,然后更新本地缓存。

5、服务健康检查

Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15秒没有收到客户端心跳的服务实例,会将它的healthy属性置为false,客户端无法调用healthy为false的服务,如果超过30秒没有收到心跳,Nacos会直接将此服务剔除。

五、作为注册中心

1、Nacos目前功能最全,用的也最多;

2、Eureka,因为挺更的缘故,比较新的技术都不支持了,目前很多公司都将Eureka换成Nacos了,不推荐使用;

3、Zookeeper,用的最多的地方就是和Dubbo一起使用,不支持负载均衡策略,但可以通过其它组件实现;

4、Consul支持的也很多;

CAP,C一致性,A可用性,P分区容错性

 NacosEurekaZookeeperConsul
一致性协议 CP + AP AP CP CP
访问协议 HTTP/DNS HTTP TCP HTTP/DNS
健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat Keep Live TCP/HTT[/gRPC/Cmd
负载均衡策略 权重/metadata/Seletor Ribbon - Fabio
雪崩保护
自动注销 支持 支持 支持 支持
监听 支持 支持 支持 支持
多数据中心 支持 支持 支持 不支持
跨注册中心同步 支持 不支持 不支持 支持
Spring Cloud集成 支持 支持 支持 支持
Dubbo集成 支持 不支持 支持 支持
K8S集成 支持 不支持 支持 不支持

 

六、作为配置中心

1、SpringBoot集成Nacos

Nacos使用key/value形式存储配置信息,为分布式系统中的外部化配置提供服务支持。

(1)maven文件

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

(2)配置文件

spring.application.name=nacos-config
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

blog.name=哪吒编程
blog.language=java

(3)主方法启动类

@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
        String name = applicationContext.getEnvironment().getProperty("blog.name");
        String language = applicationContext.getEnvironment().getProperty("blog.language");
        System.err.println("公众号 :"+name+"; 擅长技术: "+language);
    }
}

2、支持配置的动态更新

一秒刷新一次。

@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
        while(true) {
            //当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
            String name = applicationContext.getEnvironment().getProperty("blog.name");
          String language = applicationContext.getEnvironment().getProperty("blog.language");
         System.err.println("公众号 :"+name+"; 擅长技术: "+language);
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

 

3、可支持profile粒度的配置

4、支持自定义 namespace 的配置

开发测试环境和生产环境的资源(如配置、服务)隔离等,比如dev和prod。

5、支持自定义 Group 的配置

在没有明确指定 ${spring.cloud.nacos.config.group}配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=DEVELOP_GROUP

 

6、配置优先级

profile > 默认配置文件 > extension-configs(下标越大优先级越高) > shared-configs(下标越大优先级越高)

7、@RefreshScope

一般都是通过@Value的形式读取配置文件中的信息,但是无法感知修改后的值,需要利用@RefreshScope动态刷新。

8、Spring Cloud Config 横向对比Nacos

(1) Spring Cloud Config需要结合Git使用,动态变更需要配合Bus 消息总线来通知所有的客户端变化;

(2)Spring Cloud Config没有可视化界面;

(3)Nacos使用长轮询更新配置,速度上秒杀Spring Cloud Config;

                                          - EOF -

标签:服务,name,路过,配置,Nacos,支持,通俗易懂,注册
From: https://www.cnblogs.com/2324hh/p/18231202

相关文章

  • 路过的朋友,欢迎来看看通俗易懂版本的Nacos
    ​一、什么是Nacos?一个更易于构建云原生应用的动态服务发现、服务配置和服务管理平台。 Nacos的关键特性: 二、注册中心演变及其设计思想1、RestTemplate调用远程服务如果此时,服务端接口接口名或参数或请求方式更改了,那么就得同步修改此restTemplate方法,感觉很麻烦。......
  • vue3 实现自定义指令封装 --- 通俗易懂
    1、局部自定义指令1.1 在<scriptsetup>定义组件内的指令,任何以v开头的驼峰式命名的变量都可以被用作一个自定义指令<template><div><h3>使用自定义指令</h3><div>##########################start局部自定义指令</div><div>我是一个input:......
  • 感觉是通俗易懂的大模型入门(一)
    最近人工智能非常火爆,大家可能经常听到AI、深度学习、大语言模型等名词。但真正能够将它们拆开来细致讲解的内容并不多。我大学就是学这个的,毕业后一直从事这个领域的工作。所以我打算今年陆续做一些这方面的科普,也借此机会复习巩固一下自己的知识体系。今天就算是第一期,......
  • 感觉是通俗易懂的大模型入门(一)
    最近人工智能非常火爆,大家可能经常听到AI、深度学习、大语言模型等名词。但真正能够将它们拆开来细致讲解的内容并不多。我大学就是学这个的,毕业后一直从事这个领域的工作。所以我打算今年陆续做一些这方面的科普,也借此机会复习巩固一下自己的知识体系。今天就算是第一期,......
  • springboot+seata+nacos+dubbo搭建分布式事务
    一、环境springboot:2.3.1.RELEASEdubbo:2.7.13seata:1.8nacos:zookeeper:3.7.1java11mysql8依赖:以下版本经测试无依赖冲突#父工程springboot版本<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent......
  • Java学习-Sentinel 1.8.4 规则持久化到Nacos
    文章目录一、前言二、快速体验1、部署sentinel2、SpringCloud中规则持久化到nacos3、sentinel控制台操作测试三、sentinel-dashboard源码修改1、`pom.xml`中添加依赖2、`application.properties`中添加nacos配置3、nacos配置新增NacosConfig新增NacosConfigUtil4、举......
  • vue3项目使用pinia状态管理器----通俗易懂
    1、首先安装piniayarnaddpinia#或使用npmnpminstallpinia2、在项目的src目录下新建store文件夹,然后store目录下新建index.js/index.ts:我这里是index,jsimport{createPinia}from"pinia"//创建Pinia实例constpinia=createPinia()//导出Pinia......
  • 微服务-Nacos-安装-集成SpringBoot
    微服务-SpringCloud-ALibaba-NacosNacos是阿里巴巴推出的SpringCloud的组件官网:什么是Nacos主要是为了解决微服务的架构中服务治理的问题服务治理就是进行服务的自动化管理,其核心是服务的注册与发现。服务注册:服务实例将自身服务信息注册到注册中心。服务发现:服务实......
  • 微服务:构建Spring Boot与Dubbo集成:以Nacos为注册中心
    一、前言  Dubbo是阿里巴巴公司开源的一个高性能、轻量级的JavaRPC框架,用于构建分布式服务架构。Dubbo提供了三大核心能力:面向接口的远程方法调用、智能容错和负载均衡,以及服务自动注册和发现。二、Dubbo的特点  面向接口代理的高性能RPC调用:提供高性能的基于代理的......
  • 基于Nacos实现Sentinel规则持久化
    基于Nacos实现Sentinel规则持久化一、Sentinel使用痛点二、解决方案2.1保存本地文件2.2保存数据库2.3保存到Nacos三、规则持久化到Nacos3.1Nacos服务端修改配置3.2Sentinel控制台修改配置3.3Nacos数据源整合到Sentinel中一、Sentinel使用痛点SpringCloudAlib......