目录
- 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 的共同点:
- 都支持服务注册和服务发现;
- 都支持服务提供者心跳方式做健康检测。
- Nacos 与 Eureka 的区别:
- Nacos 支持服务端主动检测提供者状态:临时实例采用
心跳模式
,非临时实例采用主动检测模式
; - 临时实例心跳不正常会被剔除,非临时实例则不会被剔除;
- Nacos 支持服务列表变更的消息推送模式,服务列表更新更及时;
- Nacos 集群默认采用
AP
方式,当集群中存在非临时实例时,采用CP
模式;Eureka 采用AP
方式。
- Nacos 支持服务端主动检测提供者状态:临时实例采用
- Nacos 还支持了
配置中心
, Eureka 则只有注册中心,这也是很多人选择使用 Nacos 的一个重要原因。
整理完毕,完结撒花~ 🌻