SpringCloud(2) 注册中心Eureka、Nacos

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 的一个重要原因。

整理完毕,完结撒花~ 🌻

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不愿放下技术的小赵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值