微服务:Nacos注册中心

ops/2024/10/23 11:24:46/

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述



一、服务注册与发现


1.启动Nacos

首先,启动Nacos并访问Web端控制台

进入nacos/bin目录下,启动nacos服务:

Windows版启动命令:startup.cmd -m standalone

Linux版启动命令:sh startup.sh -m standalone

Nacos页面的账户与密码均为nacos

在这里插入图片描述


2.引入依赖

①父工程依赖

父工程中导入阿里巴巴相关依赖,用于对Nacos依赖进行版本控制。

<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>
②客户端依赖
<!-- nacos客户端依赖包 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3.添加配置

微服务的application.yml配置文件中添加nacos的服务地址,当微服务启动时,就会完成服务信息的注册,信息列表可在Nacos控制台查看详情。

spring:cloud:nacos:server-addr: localhost:8848 # nacos服务地址
  • 到这里,就完成了nacos的基本配置,可以让微服务借助Nacos进行服务注册与服务发现。



二、Nacos服务分级存储模型


1.概念

  • 一级是服务
  • 二级是集群
  • 三级是实例

在这里插入图片描述

  • 服务跨集群调用问题:
    • 服务调用尽可能选择本地集群的服务,跨集群调用延迟较高,当本地集群不可访问时,再去访问其他集群。

2.配置集群属性

修改application.yml配置文件,添加cluster-name配置属性,以配置集群信息,具体内容如下:

spring:cloud:nacos:server-addr: localhost:8848 # nacos服务地址discovery:cluster-name: HZ #集群名称,可自定义
  • 配置完成后,可重启微服务,在nacos的Web端控制台页面上查看集群变化。



三、NacosRule负载均衡


1.实现NacosRule

在上述Nacos服务分级存储模型的集群属性配置完成的基础上,在application.xml配置文件中添加以下配置,来指定对应服务负载均衡规则:

userservice: # 要做配置的微服务名称,即配置会作用到的微服务ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule  # 使用Nacos负载均衡规则
  • NacosRule负载均衡策略
    • ①优先选择本地集群(同一集群)服务实例列表。
    • ②本地集群找不到服务提供者,才去其他集群寻找,并且会报警告。
    • ③确定了可用实例列表后,再采用随机负载均衡挑选实例。

2.根据权重负载均衡

实际部署时会吃出现这样的场景:

  • 服务设备性能有差异,部分实例所在的机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
  • Nacos中,就提供了权重配置来控制访问频率的功能,权重越大则访问频率越高。

Nacos控制台

  1. 在Nacos控制台可以设置实例的权重值,首先选中实例后面的编辑按钮

在这里插入图片描述

  1. 自定义权重后,保存设置即可

在这里插入图片描述

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



四、环境隔离 - namespace


Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层的隔离。


Nacos控制台

  1. 新建命名空间

在这里插入图片描述

  1. 自定义命名空间信息

在这里插入图片描述

  1. 创建成功

在这里插入图片描述


可在微服务application.yml配置文件中指定微服务的Nacos命名空间,下述配置完并重启微服务微服务的namespace就会改变。

spring:cloud:nacos:server-addr: localhost:8848 # nacos服务地址discovery:cluster-name: GD #集群名称namespace: ec10a576-86b6-45eb-ba7c-c0647b6ef69a #命名空间ID,这里是dev环境
  • Nacos环境隔离
      1. namespace用来做环境隔离;
      2. 每个namespace都有唯一id;
      3. 不同namespace下的服务不可见(无法跨namespace远程调用);



五、Nacos注册中心原理


1.流程原理分析

  • 服务提供者启动时注册信息。
  • 服务提供者为临时实例:采用心跳监控,向每30秒发送心跳请求向nacos汇报状态。
  • 服务提供者非临时实例:nacos会主动询问其状态。
  • 服务消费者远程调用服务提供者时,会定时从nacos拉取服务列表,更新服务列表缓存。
  • 当nacos注册中心的服务列表更新时,nacos还会主动推送消息给服务消费者,以更新服务列表缓存。

在这里插入图片描述


2.临时实例和非临时实例

  • 服务注册到Nacos时,可以选择注册为临时实例或非临时实例,通过application.yml中添加配置消息来设置:
spring:cloud:nacos:server-addr: localhost:8848 # nacos服务地址discovery:ephemeral: false # 是否是临时实例

3.总结

  • Nacos与Eureka的共同点:
      1. 都支持服务注册和服务拉取。
      2. 都支持服务提供者心跳方式做健康检测。
  • Nacos和Eureka区别:
      1. Nacos支持服务端主动检测提供者状态:临时实例采取心跳模式,非临时实例采取主动检测模式。
      2. 临时实例心跳不正常会被剔除,非临时实例则不会被剔除。
      3. Nacos支持服务列表变更的消息推送模式,服务列表更新更及时。
      4. Nacos集群默认采用AP方式(强调数据可用性),当集群中存在非临时实例时,采用CP模式(强调数据可靠性、一致性);Eureka集群采用AP方式。




在这里插入图片描述


http://www.ppmy.cn/ops/17633.html

相关文章

lvgl 移植 stm32F429

LVGL 移植 stm32f429 使用ltdc驱动RGB屏&#xff0c;移植 lvgl8.4.0 前置准备 准备一个能点亮屏的程序下载lvgl源码 将源码添加到工程 lvgl-8.4.0\src\core 中所有 .c添加到工程 lvgl-8.4.0\src\draw 中所有.c添加到工程 lvgl-8.4.0\src\draw\sdl 中所有.c添加到工程 lv…

Centos 7 安装 RocketMQ 5.14(保姆级)

1.yum 安装 upunzip yum install -y unzip 2.创建文件夹存放RocketMQ&#xff0c; 安装之前需要安装JDK mkdir -p /opt/tools/rocketmq 3.下载 RocketMQ 上传到 /opt/tools/rocketmq RocketMQ 官网下载地址 4.切换目录、解压 cd /opt/tools/rocketmq unzip rocketmq-a…

新媒体运营-----短视频运营-----PR视频剪辑----软件基础

新媒体运营-----短视频运营-----PR视频剪辑-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/138079659 文章目录 1.1 PR软件重置与初始化设置1.2 新建项目及序列设置1.3 PR工作区的管理方法1.4 导入4K超高清视频并与ME配合工作1…

TCP/IP协议(二)

一、TCP-选项 1.简介 在TCP/IP报文中&#xff0c;固定头部下边就是 "选项"部分。 (1)TCP头部的选项部分是TCP为了适应复杂的网络环境和更好的服务应用层而进行设计的 (2)大多数的TCP选项部分出现在TCP连接建立阶段 2.构成 2.1 最大报文传输段 最大报文传输段(Ma…

Android Binder——APP中AIDL实现(十九)

AIDL(Android Interface Definition Language)其实就是对 Binder 通信的一个封装,方便在开发中对 Binder 通信的使用,这里我们就从头开始来看一下 AIDL 通信的创建过程。 一、创建AIDL 1、创建AIDL文件 通过 Android Studio 的 File ->New -> AIDL 的方式就会生成对…

MongoDB聚合运算符:$replaceOne

MongoDB聚合运算符&#xff1a;$replaceOne 文章目录 MongoDB聚合运算符&#xff1a;$replaceOne语法参数字段说明 使用$replaceOne 与 Null$replaceOne 和排序规则$replaceOne 和 Unicode 规范化 举例 $replaceOne聚合运算在输入的字符串中搜索目标字符串&#xff0c;并使用指…

第12章 最佳的UI体验——Material Design实战

第12章 最佳的UI体验——Material Design实战 其实长久以来&#xff0c;大多数人都认为Android系统的UI并不算美观&#xff0c;至少没有iOS系统的美观。以至于很多IT公司在进行应用界面设计的时候&#xff0c;为了保证双平台的统一性&#xff0c;强制要求Android端的界面风格必…

实景景区亲自儿童剧本杀小程序开发搭建

实景景区亲自儿童剧本杀小程序开发搭建需要涉及多个方面的内容&#xff0c;包括系统架构设计、功能模块设计、页面设计、开发工具选择等。 系统架构设计需要确定小程序的开发框架&#xff0c;可以使用小程序开发框架来构建前端页面和后端接口&#xff0c;同时需要考虑数据库设…