SpringCloud(2) 注册中心Eureka、Nacos

news2024/9/20 9:46:15

目录

    • 1.背景
    • 2.Eureka 注册中心
    • 3.Nacos 注册中心
    • 4.常见面试题
      • 1)服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?
      • 2)Nacos 和 Eureka 有什么区别?

1.背景

  • 注册中心是微服务中必须要使用的组件,考察我们使用微服务的程度。
  • 注册中心的核心作用是:服务注册和发现。
  • 常见的注册中心:Eureka、Nacos、Zookeeper

下面我们以 Eureka 注册中心为例,说一下注册中心的作用:

2.Eureka 注册中心

假如我们有一个订单服务 order-service,需要消费用户服务 user-service,而 user-service 是集群部署,有三个节点:8081,8082,8083,那么我们的订单服务应该调用哪一台呢?如果后续又增加了 8084、8085 两个节点后又该怎么调用呢?

所以这时候我们就需要用到注册中心来对服务进行管理了。这里涉及两个概念:

  • user-service 用户服务,是作为服务提供者
  • order-service 订单服务,是作为服务消费者

在这里插入图片描述

我们如何利用注册中心来共享服务的地址呢?

1)首先,当服务提供者启动服务的时候,就会把自己的信息注册到注册中心中,注册中心就会保存服务提供者的这三个节点的地址和端口了。

2)其次,因为目前的远程调用都是相对的,假如有其他微服务也需要去调用 order-service 微服务,那么就需要将订单服务也注册到注册中心上。注册中心也就会保存 order-service 微服务的地址了。

3)当注册中心保存好这些信息之后,服务消费者就回去注册中心拉取这些信息了。比如说,order-service 调用 user-service 就会拉取到 8081、8082、8083 三个地址,那么应该选择哪个地址去调用呢?这时候,在 user-service 内部会做一个负载均衡,假设选中了8081,那么 order-service 就会直接调用 8081 的 user-service 服务。

以上就是 Eureka 的基本工作流程。服务注册主要指的是服务提供者把自己的信息注册到注册中心中,然后由服务提供者去注册中心去拉取,发现服务提供者的信息。

假如三台 user-service 服务提供者中,有一台宕机了,那么这时候应该怎么办呢?

在这里插入图片描述

是这样的,服务提供者的每一个微服务都会每隔30秒向注册中心发送一个心跳进行续约,证明当前是一个健康的实例。假如某个实例一直没有发送请求,比如8083节点挂了,注册中心如果90秒没有收到心跳,注册中心就会认为某一台实例挂机了,然后在服务列表中把8083的服务干掉了。那么相对应的 order-service 服务消费者去注册中心拉取信息的时候,就会发现8083节点不在了,只剩下8081和8082了,这个实际上就是服务的健康监控

3.Nacos 注册中心

Nacos 和 Eureka 的思路还是基本一致的,我们的服务提供者需要把自己的信息注册到 Nacos,服务消费者需要去注册中心去拉取数据,通过这种方式来获取服务列表信息,比如 IP和端口地址等。同样 Nacos 也有健康检测,服务提供者也会定期发送自己的心跳到 Nacos,证明当前某个节点是存活的。这里不同的是有一个名称:临时实例

在这里插入图片描述

下面这是正常在微服务中 Nacos 的配置:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.130:8848
        ephemeral: false # 设置为非临时实例,默认true

ephemeral 意思是临时的,平时我们不会去设置它,那么Nacos默认就是采用临时实例。如果使用的是临时实例,那么和我们的 Eureka 差不多,它的健康检测也是通过心跳去检测的。假如我们这里设置了 false,那么当前这个实例就是非临时实例了。

如果是非临时实例,Nacos 注册中心会主动地询问,查看当前的服务提供者是否存活。之前是由服务提供者主动发送心跳告诉注册中心还活着,非临时实例中就反过来了。而 Eureka 中没有非临时实例的概念,这就是一点不同。

另外一点,如果服务提供者的地址发生变更了,Nacos 注册中心会主动推送变更的信息到服务消费者,也就是说 Nacos 不仅仅有 pull,还有 push。

在这里插入图片描述

由于 Nacos 注册中心的主动推送,那么服务消费者中服务列表的更新就会更加的及时,从而减少服务不可用的时间。

4.常见面试题

1)服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?

  • 我们当时项目采用的 Eureka 作为注册中心,这个也是 Spring Cloud 体系中的一个核心组件。
  • 服务注册: 服务提供者需要把自己的信息注册到 Eureka,由 Eureka 来保存这些信息,比如服务名称、IP、端口等等。
  • 服务发现: 服务消费者向 Eureka 拉取服务列表信息,如果服务提供者有集群,则消费者会利用负载均衡算法,选择其中一个进行调用。
  • 服务监控: 服务提供者会每隔30秒向 Eureka 发送心跳,报告健康状态,如果 Eureka 服务 90 秒没接收到心跳,服务就会从 Eureka 中删除。

2)Nacos 和 Eureka 有什么区别?

  • Nacos 与 Eureka 的共同点
    1. 都支持服务注册和服务发现;
    2. 都支持服务提供者心跳方式做健康检测。
  • Nacos 与 Eureka 的区别
    1. Nacos 支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
    2. 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
    3. Nacos 支持服务列表变更消息推送模式,服务列表更新更及时;
    4. Nacos 集群默认采用 AP 方式,当集群中存在非临时实例时,采用 CP 模式;Eureka 采用 AP 方式。
  • Nacos 还支持了 配置中心, Eureka 则只有注册中心,这也是很多人选择使用 Nacos 的一个重要原因。

整理完毕,完结撒花~ 🌻

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

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

相关文章

JavaWeb 笔记——2

JavaWeb 笔记——2 一、Maven1.1、Maven概述1.2、Maven简介1.3、Maven基本使用1.4、IDEA配置Maven1.6、依赖管理&依赖范围 二、MyBatis2.1、MyBatis简介2.2、MyBatis快速入门2.3、解决SQL映射文件的警告提示2.4、Mapper代理开发 一、Maven 1.1、Maven概述 Maven是专门用于…

时序预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)时间序列预测

时序预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)时间序列预测 目录 时序预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)时间序列预测预测效果基本介绍模型介绍PSO模型LSTM模型PSO-LSTM模型 程序设计参考资料致谢 预测效果 基本介绍 Matlab基于PSO-LST…

高压线路距离保护程序逻辑原理(四)

四、距离I段快速动作程序逻辑框图 距离保护的故障处理程序主要有三个组成部分:手合及I段快速跳闸部分;I、II段延时动作部分;跳闸及后加速部分。后者在第二章的保护故障处理程序中作为各类保护共有的程序分析过。这里只分析I段的程序逻辑框图…

360手机刷机 360手机Xposed框架安装 360手机EdXposed、LSP 360手机xposed模块

360手机刷机 360手机Xposed框架安装 360手机EdXposed、LSP 360手机xposed模块 参考:360手机-360刷机360刷机包twrp、root 360刷机包360手机刷机:360rom.github.io 【前言】 手机须Twrp或root后,才可使用与操作Xposed安装后,重启…

① RESTful API

1.API(Application Programming Interface) API就是一个接口;例如玩某一款游戏,你不必知道游戏具体的实现细节,只需要知道点哪个键是哪个技能就够了,而这个键之所以能实现玩家与游戏的交互,是因…

在个人电脑上部署ChatGLM2-6B中文对话大模型

简介 ChatGLM2-6B 是清华大学开源的一款支持中英双语的对话语言模型。经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,具有62 亿参数的 ChatGLM2-6B 已经能生成相当符合人类偏好的回答。结合模型量化技术,用户可以在消费级的显卡上进行本地部署&…

亚马逊点击广告有什么好处?

亚马逊点击广告可以带来以下几个好处: 1、增加曝光和可见性:亚马逊点击广告可以将你的产品展示给更多潜在的购买者。通过有针对性的广告活动,你可以提高产品的曝光度,使更多的人看到你的产品。 2、提高点击率和流量:…

Python 代码打包

这里写目录标题 1. pyc打包及重调用2. Cython打包及重调用 1. pyc打包及重调用 该打包方式仅为入门级,反编译后为源代码,毫无安全性 指令转换 python -m py_compile /path/**.py 代码统一转换 单个py文件打包 import py_compile py_file ["/home/…

基于STM32设计的青少年学习监控系统(华为云IOT)

一、设计需求 1.1 项目背景 近几年,我国儿童青少年的近视发生率越来越高,生活中总会看到许多小小年纪就戴着眼镜的小朋友。家长对孩子的用眼时间没有约束,电子产品对孩子眼睛的影响,写字姿势,有的孩子写字时握笔太低,以致整个人趴在桌子上等都是造成孩子近视的重要因素…

c++ freetype 解析可变字体(Variable font)

什么是可变字体 上一篇文章说了 传送门也懒的贴了, 自己去翻吧 前言 我这里不会贴完整的代码 也不会说的那么细,主要提供一些关键点和方法 正文 ‘name’ 表table 解析 TrueType 字体的解析 字体里面有很多的表table 我们需要的family和style 都在这…

C++在线五子棋对战(网页版)项目:websocket协议

目标:认识理解websocket协议、websocket切换过程和websocket协议格式。认识和学会使用websocketpp库常用接口。了解websocketpp库搭建服务器流程,认识和学会使用websocketpp库bin接口,最后使用websocketpp库搭建服务器。 初识websocket WebS…

OJ# 384 敲七

题目描述 ​ 有 N 个人在玩一种“敲7”游戏,游戏的规则是这样的:第 x 个人从 t 开始报数,然后按顺序报数, 当某人报的数是 7 的倍数或数字中含有 7 时,便被淘汰,剩下的人继续报数,直到只剩下一…

【CesiumJS入门】(6)修改3D Tiles(tileset)的位置及高度

前言 在之前一篇博客中【CesiumJS入门】(4)加载3D Tiles并获取tileset,我们成功得加载了3D Tiles数据集,本篇中,将会向大伙儿介绍tileset位置的修改与恢复: 直接上代码了 /** Date: 2023-06-28 19:35:03*…

操作系统OS(二)进程和线程

进程 所谓进程,简单来说是计算机中的各种任务。 进程是程序的一次执行,是操作系统进行资源分配和调度的基本单位。 进程结构PCB 进程结构: 控制块PCB:进程唯一标识 程序段:同一个应用程序的多个进程 数据段&#xf…

Pytorch中的Exponential Moving Average(EMA)

EMA介绍 EMA,指数移动平均,常用于更新模型参数、梯度等。 EMA的优点是能提升模型的鲁棒性(融合了之前的模型权重信息) 代码示例 下面以yolov7/utils/torch_utils.py代码为例: class ModelEMA:""" …

ELK报错no handler found for uri and method [PUT] 原因

执行后提示no handler found for uri and method post,最新版8.2的问题? 原因: index.mapping.single_type: true在索引上 设置将启用按索引的单一类型行为,该行为将在6.0后强制执行。 原 {type} 要改为 _doc,格式如…

优炫软件自主研发再结硕果,共享存储SRAC集群数据库重磅发布

新一轮科技革命重塑全球经济结构,关键核心技术是产业发展的基石,数据库、芯片、操作系统是我国数字技术领域三大卡脖子难题。数据库向下发挥硬件算力,向上使能应用系统,是各行各业业务系统运行的基础,是软件行业皇冠上…

光口的作用及应用场景

在光通信中,交换机是一个非常重要的设备,它的作用是将来自不同设备的数据包进行收发和交换。之前发布的文章我们有了解到交换机的光口是如何配置的,本期文章我们将详细讨论交换机的光口的作用及应用场景。 一、光口的主要作用 交换机的光口…

适合团队人数少,预算低的四种办公室类型

如果团队人数少且预算低,以下是一些在深圳比较适合租赁的办公室类型: 1. 联合办公空间:联合办公空间是一种灵活的办公模式,通常提供共享的办公环境和设施,如会议室、休息区、打印机等。这种模式的办公室租金通常较低&…

Linux下Master-Master Replication Manager for MySQL 双主故障切换

简述: Master-Master Replication Manager for MySQL(MMRM)是一种用于MySQL数据库的主-主复制管理工具。它允许在多个MySQL主机之间建立双向的主-主复制关系,实现数据的同步和高可用性。 工作原理是通过在每个MySQL主机上配置双…