Spring Cloud - Nacos 注册发现、分级模型、配置集群、环境隔离、原理

news2024/11/8 20:01:44

目录

一、Nacos 安装和配置

二、Nacos 服务注册发现

2.1、将服务注册到 nacos 中

2.2、执行效果

三、Nacos 的服务分级模型及配置

3.1、分级模型

3.2、配置集群

3.3、配置 Nacos 负载均衡策略

3.4、Nacos 服务实例的权重设置

3.5、环境隔离——namespace

四、Nacos注册原理

4.1、工作原理

4.2、临时实例与非临时实例的配置

4.3、Nacos 和 Eureka 的区别


一、Nacos 安装和配置


在 浏览器地址栏中输入 nacos.io 就可以访问到 nacos 官网,然后点击前往 github ,如下图:

下滑就可以看到 nacos 的一个发行历代版本,如下:

这里大家可以根据需求,自由下载~

我使用的是 1.4.1 版本的 nacos,下载好 zip 后,解压到一个非中文目录路径下即可,成功后文件内容如下:

conf 目录下 有一个文件名为 application.properties ,这个文件使用来对 nacos 进行配置的,有什么用呢? nacos 默认配置端口为 8848,如果你电脑上的 8848 端口被占用,那么就可以对 nacos 端口信息进行配置~

bin 目录下就是我们需要的 nacos 的可执行文件啦,我们要使用的就是 startup.cmd ,如下:

最简单的启动方式就是双击这个文件即可,但是这样打开会缺少一些详细的信息~

因此,我们还有一种打开办法就是通过如下命令启动 nacos 服务(该文件目录下打开终端):

./startup.cmd -m standalone

以下为执行成功的效果: 

上图中圈起来的就是 Nacos 服务的地址,可以通过 Ctrl + 点击 的方式打开,就可以看到如下界面:

默认账号和密码都是输入 nacos 即可,后面讲到 Nacos 服务注册时会用到~

二、Nacos 服务注册发现


2.1、将服务注册到 nacos 中

ps:案例是上一章所讲的 “根据订单id查询订单的同时,把订单所属的用户信息一起返回”  。

a)在你项目的父工程中加入 spring-cloud-alibaba 依赖,如下:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

Ps:注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本 

b)如果项目项目中之前使用过 eureka 服务注册,一定记得要将其依赖注释掉

c)对你项目需要进行注册的微服务添加 nacos 依赖(对于本章所讲案例,需要在 user-service 和 order-service 的 pom 文件添加依赖)如下:

<!-- nacos客户端依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

d)修改 user-service,order-service 中的 application.yml 文件,注释 eureka 地址(如果以前使用过),添加 nacos 地址:

spring:
   cloud:
     nacos:
       server-addr: localhost:8848 # nacos 服务注册

2.2、执行效果

a)接下来启动如下项目:

b)打开nacos 注册中心页面,输入账号和密码(默认是 nacos),接着进入主页,打开服务列表就可以观察到刚刚的服务,如下:

同时你也可以观察他们的详细信息,如下:

三、Nacos 的服务分级模型及配置


3.1、分级模型

为什么 nacos 要引入这样的服务分级模型呢?

实际上也就是说,为什么要加上地域划分这个概念~

  1. 容灾能力:假设如果把所有的实例都部署在一个集群,这就像把鸡蛋都放在一个篮子里,哪天你一不小心把篮子打翻了,那所有的蛋不是都破了?那都部署在一个集群中,万一这一个集群出了问题,整个服务就完蛋了,因此为了解决整个问题,我们需要将一个服务的多个实例部署到多个集群(机房),这样就大大增加了他的容灾能力。
  2. 调用效率:nacos 引入服务分级还有重要的一点就是,防止跨集群调用(提高调用效率)服务调用尽可能选择本地集群的服务,跨集群调用延迟较高,当本地集群不可访问时,再去访问其它集群。

3.2、配置集群

a)修改 user-service 的 application.yml 文件,如下配置:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos 服务端地址
      discovery:
        cluster-name: BJ # 配置集群名称,也就是机房位置,例如:BJ,北京

b)接着打开以下两个服务:

c)继续在配置文件中修改 cluster-name: SH ,这里的 SH 表示代指上海,接着再启动 UserApplication3 服务,如下:

d)登录 nacos,查看服务详情信息,可以观察到如下结果:

这样就完成了集群的配置~

3.3、配置 Nacos 负载均衡策略

前面我们提到 Nacos 的服务分级模型,他会优先访问本地集群,实际上这也是需要进行配置的~

Ps:配置前我们应当注意,如果之前有重写 IRule 修改负载均衡算法,一定要注释掉!

a)首先,我们需要给 order-service 的 application.yml 添加配置集群信息,如下:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos 服务端地址
      discovery:
        cluster-name: BJ # 配置集群名称,也就是机房位置

b)接着,我们只需要在 order-service 的 application.yml 文件中添加以下信息即可(这个就是在配置负载均衡的原则为“优先访问本地集群”):

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 

这样就可以实现优先访问本地集群啦~

Ps:在本地集群中选择实例的时候,还是以随机方式进行选择的~

值得注意的一点是,当本地集群挂掉,那么就不得不跨集群访问了,并且在项目中会打印以下日志信息:

通过这个信息,运维人员就可以快速找到挂掉的集群,进行修复~

3.4、Nacos 服务实例的权重设置

Nacos 的权重使用来干什么的呢?往下看~

使用场景(作用):

  1. 在实际的部署环境中,服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求,那么这时候就可以通过 Nacos 配置权重来控制频率,权重越高的,访问频率越大
  2. 当我们某一个服务需要进行优化的的时候,需要先下线该服务,那么可以先将该服务的权重改到很低,最后改到零,这样用它的用户越来越少,最后就感知不到他的存在,同样,当服务优化完后,进行上线的时候,可以先将其权重修改为一个很小的数字,这样使用的用户也很少,可以让这些用户来进行一个服务的测试,如果用户反馈的效果不错,再将权重改为合适的数字即可,这样就做到了平滑上下线服务的效果

Nacos 权重的特点如下:

  1. Nacos控制台可以设置实例的权重值,0~1之间
  2. 同集群内的多个实例,权重越高被访问的频率越高
  3. 权重设置为0则完全不会被访问

Nacos 权重的配置步骤如下:

a)在 Nacos 的服务列表的服务详情信息中可以观察到权重信息,以及编辑按钮,如下:

b)通过编辑按钮即可对一些信息进行修改,例如我们修改权重为0.1,如下:

 c)修改完后点击确定,就完成啦,可以达到这样一个效果——使得端口为 8081 的服务访问频率是端口号为 8082 的服务访问频率的十分之一!

3.5、环境隔离——namespace

Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离,在实际的工作中,需要有开发环境、测试环境等,彼此直接的隔离就是通过 namespace 实现的,他们的关系如下图:

 特点有如下三点:

  1. 每个namespace都有唯一id
  2. 服务设置namespace时要写id而不是名称
  3. 不同namespace下的服务互相不可见

配置环境隔离步骤如下:

a)在 Nacos 主页中点击命名空间,再新建命名空间,如下:

b)我们也可以根据需求取创建命名空间,例如创建生产环境,如下图:

c)确定后,就可以看到通过 UUID 随机生成的命名空间ID,如下:

d)修改 order-service 的 application.yml ,添加 namespace 和 命名空间 ID,如下:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false
    username: root
    password: 1111
    driver-class-name: com.mysql.jdbc.Driver 
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: BJ # 北京
        namespace: 12c8df32-0dbf-48a0-9889-098a6d15c31d # dev

e)重启 order-service ,观察 Nacos 服务列表,可以看到 dev 命名空间下,出现了 order-service 的信息,如下:

f)由于不同的命名空间下的服务是相互不可见的,因此输入 url 再次请求的时候就会报错,如下:

 

这样就是实现了环境隔离~

四、Nacos注册原理


4.1、工作原理

工作过程如下:

  1. 首先由服务提供者向 nacos 注册服务信息.
  2. 接着,服务消费者定时向 nacos 拉取服务(每隔30秒一次),并将拉取到的服务缓存到起来,下一次就可以不用去拉取,而是直接从缓存中拿,当然也不是每次都从缓存中拿,他会每隔30秒取拉取一次服务,并更新缓存.
  3. 另外,一旦 nacos 注册中心有新的变更,nacos 也会及时的通过消息推送机制,将更新信息推送给服务消费者.
  4. 消费者拿到服务列表之后,就可以通过负载均衡,向服务提供者发起远程调用.
  5. nacos 会把服务提供者划分成临时实例(可以直接人为停掉服务)和非临时实例(只能标记为下线),临时实例采用心跳检测(比 Eureka 快一些,每隔一段时间发一个请求),当有一天心跳检测发现不在了,nacos 就会把他从服务列表中直接删除,而非临时实例则不是使用心跳包,是由 nacos 主动向服务提供者发起询问,如果发现非临时实例挂了,不会从列表中删除,而是标记为“不健康”,等待这个实例恢复健康.

4.2、临时实例与非临时实例的配置

在 application.yml 中加入以下配置信息,即可修改为非临时实例,如下:

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 设置为非临时实例

Ps:临时实例宕机时,会从nacos的服务列表中剔除,而非临时实例则不会 

4.3、Nacos 和 Eureka 的区别

共同点:

  1. 都支持服务注册和服务拉取
  2. 都支持服务提供者心跳方式做健康检测

不同点:

  1. Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,心跳不正常会被剔除,非临时实例采用主动检测模式,若不正常不会被剔除,只是作标记
  2. Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  3. Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

真实企业做自动化测试做法,从测试用例到测试报告...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 首先&#xff0c;…

SAP MM 组织结构配置

1.定义公司代码 创建公司代码一般来说是财务去配置&#xff0c;但是我们需要去有一个基本的了解&#xff0c;这样&#xff0c;你才能理清公司代码和MM 组织的关系 配置&#xff1a;SAP IMG Enterprise Structure -》Definition -> Financial Accounting -> Edit, Copy, …

深度学习(26)——YOLO系列(5)

深度学习&#xff08;26&#xff09;——YOLO-v7&#xff08;5&#xff09; 文章目录 深度学习&#xff08;26&#xff09;——YOLO-v7&#xff08;5&#xff09;絮絮叨叨1. conv和BN的融合2. 3*3卷积的替换&#xff08;1&#xff09;1*1卷积有什么作用&#xff1f;&#xff08…

解决方案 | 照明行业数字化营销CRM平台

“数字中国”作为二十大报告的“关键词”&#xff0c;也成为各行各业的高质量发展的主旋律&#xff0c;历史悠久的中国照明产业也积极拥抱“数字化”&#xff0c;以驱动高质量发展 。作为照明行业的领军企业&#xff0c;某照明行业客户很早就意识到企业数字化转型的重要性&…

Spring事务源码详解-spring原码(二)

上篇文章介绍了事务开启&#xff0c;前面介绍了解析adviors。 spring事务源码详解-spring原码&#xff08;一&#xff09;https://blog.csdn.net/ke1ying/article/details/131360060 事务源码 先从缓存里获取&#xff0c;主要是判断循环依赖是否创建动态代理 进去wrapIfNeces…

【MOOC 作业】第3章 传输层

不是标答也不是参考答案 仅从个人理解出发去做题 1、(20分) ‍主机甲和主机乙之间已建立一个 TCP 连接&#xff0c;TCP 最大段长度为 1000 字节&#xff0c;若主机甲的当前拥塞窗口为 5000 字节&#xff0c;在主机甲向主机乙连接发送 2 个最大段后&#xff0c;成功收到主机乙发…

Java微服务金融项目智牛股 项目简介与金融知识介绍及技术特点

项目简介 金融交易平台服务于金融衍生产品&#xff0c; 包含外汇、贵金属、期货、股票。 各产品具有不同属性与交易规则&#xff0c; 本项目对标MT4等大型交易平台&#xff0c; 遵循FIX全球最广泛的金融市场通用协议。 实现从证券注册开户、行情订阅与呈现&#xff0c; 股票撮合…

JAVA 日期类Date SimpleDateFormat Calendar

1、Date日期类 类 Date 表示一个特定的瞬间&#xff0c;精确到毫秒 1.1 Date的构造函数 Date() 分配一个 Date 对象&#xff0c;以表示分配它的时间&#xff08;精确到毫秒&#xff09; Date(long date) 分配一个 Date 对象&#xff0c;表示自从标准基准时间起指定时间的毫秒数…

2023最新AI创作系统/ChatGPT商业运营版网站程序源码+支持GPT4+支持ai绘画(MJ)+实时语音识别输入+免费更新版本

2023最新AI创作系统/ChatGPT商业运营版网站程序源码支持ai绘画支持GPT4.0实时语音识别输入文章资讯发布功能用户会员套餐免费更新版本 一、AI创作系统二、系统介绍三、系统程序下载四、安装教程五、主要功能展示六、更新日志 一、AI创作系统 1、提问&#xff1a;程序已经支持G…

论洗碗哥在CSDN摸滚打爬的256个日夜

目录 机缘 收获 成就 憧憬 机缘 创作初心了为了记录一下自己的日常学习过程&#xff0c;方便自己日后去总结&#xff0c;或者遇到类似的问题的时候就可以翻阅自己的文章了。也可以加深自己的印象。其实一开始我是一个不太善于总结的人&#xff0c;机缘之下&#xff0c;听到…

机器学习之PCA算法

目录 PCA算法 PCA目标 PCA原理推导 基于最大可分性推导 基于最近重构误差推导 PCA算法流程 PCA优点 PCA缺点 基于PCA的人脸识别 PCA算法 PCA&#xff0c;即主成分分析&#xff08;Principal Component Analysis&#xff09;&#xff0c;是一种常用的降维技术&#x…

【博客674】警惕Prometheus 中的重复样本和无序时间戳错误

警惕Prometheus 中的重复样本和无序时间戳错误 1、场景 您的 Prometheus 服务器日志中是否遇到过以下错误&#xff1f; "Error on ingesting out-of-order samples" "Error on ingesting samples with different value but same timestamp" "dupli…

2023最全 Java 高频面试合集,掌握这些你也能进大厂

进大厂是大部分程序员的梦想&#xff0c;而进大厂的门槛也是比较高的&#xff0c;所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全&#xff0c;对于 Java 后端的朋友来说应该是最全面最完整的面试备战仓库&#xff0c;为了更好地整理每个模块&#xff0c;我也参考了很…

内网隧道代理技术(六)之 PowerCat反弹Shell

PowerCat反弹Shell PowerCat介绍 PowerCat是一个powershell写的tcp/ip瑞士军刀&#xff0c;看一看成ncat的powershell的实现&#xff0c;然后里面也加入了众多好用的功能&#xff0c;如文件上传&#xff0c;smb协议支持&#xff0c;中继模式&#xff0c;生成payload&#xff…

几分钟带你快速了解SpringBoot框架理论知识!

1.什么是SpringBoot SpringBoot其实就是Spring的子项目。它简化了Spring的开发难度&#xff0c;舍弃了一切可以舍弃的xml配置文件&#xff0c;提供了各种启动器&#xff0c;让程序员上手更快&#xff0c;节省了开发时间。 2.SpringBoot的优点 SpringBoot其实就是对Spring的缺…

抖音林客系统定制开发

抖音林客是一款提供旅游攻略和景点推荐的短视频社交平台&#xff0c;主要用户群体为喜欢旅游和分享生活的年轻人。从需求分析角度来看&#xff0c;可以从以下几个方面进行分析&#xff1a; 信息获取需求&#xff1a;抖音林客用户需求获取有关旅游的详细和实用的信息&#x…

Idea快捷键设置(Idea快捷键大全)

目录 友情提醒第一章、IDEA常用快捷键1.1&#xff09;快捷键&#xff1a;查找/提示类1.2&#xff09;快捷键&#xff1a;修改代码类1.3&#xff09;快捷键&#xff1a;光标移动类 第二章、如何修改快捷键2.1&#xff09;修改快捷键的方法2.2&#xff09;我修改的快捷键&#xf…

不容错过!科东软件在2023华南国际工博会等你,一起见证科技的力量!

诚挚邀请 2023年6月27-29日&#xff0c;SCIIF华南国际工业博览会即将在深圳国际会展中心&#xff08;宝安新馆&#xff09;召开。本届华南工博会汇集大批国内外头部大咖&#xff0c;将呈现一系列世界领先的技术和创新理念&#xff0c;为新型工业发展注入新动力。 科东软件作为…

华为eNSP入门实验,Vlan配置,路由配置,用户模式,链路聚合

文章目录 一、同一交换机下的PC通信二、不交换机下的PC通信三、配置静态路由通信四、路由器rip协议配置五、路由器ospf协议配置六、单臂路由七、通过三层交换机使不同的Vlan能连通八、设备consolo密码模式九、设备consolo用户密码模式&#xff08;AAA模式&#xff09;十、Telne…

2023年低代码平台全球排行榜:企业首选榜单,揭晓最受欢迎的工具

近年来&#xff0c;随着数字化转型和云计算技术的普及&#xff0c;低代码平台已经成为企业开发和应用程序的首选工具之一。低代码平台可以大大缩短开发时间和成本&#xff0c;提高灵活性和可扩展性&#xff0c;同时保证应用程序的质量和稳定性。在这个强制数字化的时代&#xf…