一、Eureka注册中心
Eureka注册中心包含了三个功能:
- 服务注册:服务提供者需要把自己的信息注册到Eureka, 由Eureka来保存这些信息,比如服务名称、IP、端口等。
- 服务发现:消费者向Eureka拉取服务列表信息,如果服务提供者有集群,则消费者会利用负载均衡算法,选择一个发起调用。
- 服务监控:服务提供者会每隔
30秒向Eureka发送心跳,报告健康状态,如果Eureka服务90秒没有接收到心跳,则认为服务已经挂掉了,从Eureka中剔除,消费者服务也会将本地的服务提供者列表中的挂掉的服务去掉。 - 服务模式:Eureka集群采用AP模式。
- Eureka不支持配置中心。
二、Nacos注册中心
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.200.130:8848
ephemefal: false #设置为非临时实例
Nacos注册中心包含了三个功能:
- 服务注册:服务提供者需要把自己的信息注册到Nacos, 由Nacos来保存这些信息,比如服务名称、IP、端口等。
- 服务发现:
- 消费者向Nacos拉取务列表信息,如果服务提供者有集群,则消费者会利用负载均衡算法,选择一个发起调用。
- Nacos支持服务列表变更的消息推送模式,服务列表更新更及时。
- 服务监控:
- 服务提供者的临时实例会每隔
30秒向Nacos发送心跳,非临时实例采用主动监测模式,报告健康状态。 - 如果Nacos服务
90秒没有接收到心跳,则认为临时实例已经挂掉了,从Nacos中剔除,消费者服务也会将本地的服务提供者列表中的挂掉的服务去掉。 - 非临时实例即使不健康了,也不会被剔除。
- 服务提供者的临时实例会每隔
- 服务模式:Nacos集群默认采用AP模式,当集群中存在非临时实例时,采用CP模式。
- Nacos支持配置中心。
2.1 Nacos原理
1. 微服务上下线动态感知实现原理
- 在Nacos 1.4.x版本中,新增服务时,服务提供者在启动时向Nacos中注册自己,Nacos的服务列表中会记录服务提供者的serverName、IP地址等信息。在服务消费者的Ribbon底层中会有一个定时任务,每隔一段时间从Nacos拉取服务列表并缓存到本地。在服务提供者的Nocos client包中有一个心跳任务,服务启动时会启动心跳任务,定时给Nacos注册中心发送心跳。如果Nacos在超过一定时间没有收到心跳就将服务提供者剔除掉。服务消费者重新拉取服务列表时就会得到最新的机器了。在此过程中,服务提供者与消费者跟Nacos的通信都是通过HTTP协议进行的。
- 从Nacos 2.x版本开始,服务提供者与消费者跟Nacos的通信都是通过grpc协议进行的,建立长链接后,grpc底层是有心跳保证的。 服务提供者新增机器或者下线机器,Nacos与服务消费者都会通过grpc长链接的心跳动态感知到。使用grpc协议代替http协议也是为了提高性能。