Eureka 作为 Spring Cloud 体系中最核心、默认的注册中心组件,研究它的运行机制,有助于我们在工作中更好地使用它。

Eureka 核心概念

Eureka(注册中心)包含两个组件:Eureka Server和Eureka Client。服务提供者和服务的消费者。

Eureka负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。

同时,服务提供方与Eureka之间通过“心跳”机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。

这就实现了服务的自动注册、发现、状态监控。基本架构如下:

概念详情及其参数配置

Eureka:就是服务注册中心(可以单独,也可以是一个集群),对外暴露自己的地址,

同时注册中心服务端(Eureka Server)主要对外提供三个功能

(1)服务注册:提供者启动后,向Eureka注册自己信息(地址,提供什么服务),ureka Server 会存储该(Eureka Server 内部有二层缓存机制来维护整个注册表)服务的信息。

(2)提供注册表:消费者向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新。

(3)同步状态:通过注册,心跳(续约)机制,和 Eureka Server 同步当前客户端的状态。

心跳(续约就是提供者定期通过http方式向Eureka刷新自己的状态

注册中心客户端(Eureka Client)

Eureka Client 会拉取、更新和缓存 Eureka Server 中的信息。因此当所有的 Eureka Server 节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者,但是当服务有更改的时候会出现信息不一致。

服务注册(Register)
服务的提供者,将自身注册到注册中心,服务提供者也是一个 Eureka Client。当 Eureka Client 向 Eureka Server 注册时,它提供自身的元数据,比如 IP 地址、端口,运行状况指示符 URL,主页等。yml配置如下

eureka:client:service-url:defaultZone: http://localhost:10086/eureka/register-with-eureka: true #服务启动方启动时,会检测该参数是否为true,true会注册给eureka

服务获取(GetRegisty)

Eureka Client 从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每30秒钟)更新一次。每次返回注册列表信息可能与 Eureka Client 的缓存信息不同,Eureka Client 自动处理。

Eureka Client 定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地 这里应该为第一次全量,后面为定时增量。

如果由于某种原因导致注册列表信息不能及时匹配,Eureka Client 则会重新获取整个注册表信息。 Eureka Server 缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。Eureka Client 和 Eureka Server 可以使用 JSON/XML 格式进行通讯。在默认情况下 Eureka Client 使用压缩 JSON 格式来获取注册列表的信息。获取服务的参数示例如下:

eureka:client:service-url:defaultZone: http://localhost:10086/eureka/fetch-registry: true #开启拉取注册后的服务

服务续约(Renew)
Eureka Client 会每隔 30 秒发送一次心跳来续约。 通过续约来告知 Eureka Server 该 Eureka Client 运行正常,没有出现问题。 默认情况下,如果 Eureka Server 在 90 秒内没有收到 Eureka Client 的续约,Server 端会将实例从其注册表中删除,此时间可配置,一般情况不建议更改。服务续约中油两个重要的参数是lease-renewal-interval-in-seconds和lease-expiration-duration-in-seconds,参数配置如下

eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eurekainstance:lease-renewal-interval-in-seconds: 5 # 每隔5秒发送一次心跳,服务续约任务的调用间隔时间,默认为30秒lease-expiration-duration-in-seconds: 10 # 10秒不发送就过期,服务失效的时间,默认为90秒。

服务剔除(Eviction)

当 Eureka Client 和 Eureka Server 不再有心跳时,Eureka Server 会将该服务实例从服务注册列表中删除,即服务剔除

服务下线(Cancel)

Eureka Client 在程序关闭时向 Eureka Server 发送取消请求。 发送请求后,该客户端实例信息将从 Eureka Server 的实例注册表中删除。该下线请求不会自动完成,需要以下代码来进行手动完成。

DiscoveryManager.getInstance().shutdownComponent();

远程调用(Remote Call)

当 Eureka Client 从注册中心获取到服务提供者信息后,就可以通过 Http 请求调用对应的服务;服务提供者有多个时,Eureka Client 客户端会通过 Ribbon 自动进行负载均衡。

自我保护机制

默认情况下,如果 Eureka Server 在一定的 90s 内没有接收到某个微服务实例的心跳,会注销该实例。但是在微服务架构下服务之间通常都是跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,网络分区故障,导致此实例被注销。

固定时间内大量实例被注销,可能会严重威胁整个微服务架构的可用性。为了解决这个问题,Eureka 开发了自我保护机制,那么什么是自我保护机制呢?

Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 即会进入自我保护机制。Eureka Server会将当前的实例注册信息保护起来,同时提示一个警告,一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据。也就是不会注销任何微服务。eureka默认开启自我保护,参数如下

eureka:instance:hostname: localhostserver:enable-self-preservation: false #关闭自我保护机制

当注册中心进入进入自我保护后,页面会出现如下的字样

同时服务会出现以下的情况:

(1 Eureka 不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
(2 Eureka 仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
(3 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

Eureka 自我保护机制是为了防止误杀服务而提供的一个机制。当个别客户端出现心跳失联时,则认为是客户端的问题,剔除掉客户端;当 Eureka 捕获到大量的心跳失败时,则认为可能是网络问题,进入自我保护机制;当客户端心跳恢复时,Eureka 会自动退出自我保护机制。

如果在保护期内刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,即会调用失败。对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。

建议开发环境关闭自我保护,生产开启自我保护。

一个有关eureka的图送给大家。

借鉴博客链接:https://blog.csdn.net/qwe86314/article/details/94552801

【SpringCloud】Eureka工作原理相关推荐

  1. 微服务 注册中心的作用_SpringCloud(二)服务注册中心与Eureka工作原理介绍

    微服务的注册中心 author:QYX 注册中心可以说是微服务架构中的通讯录,它记录了服务和服务地址的映射关系,在分布式架构中,服务会注册到这里,当服务需要调用其他服务时, 就会在这里找到服务的地址, ...

  2. Eureka工作原理(Eureka简介Eureka ServerEureka Client自我保护机制分布式系统中的CAP理论Eureka 工作流程)

    一.Eureka简介 Eureka Server(注册中心,相当于zookeeper) Eureka Client: Provider Consumer 多个Eureka就叫集群.集群之间会定时通过r ...

  3. SpringCloud Feign工作原理基本理解

    Feign介绍 Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端.Spring Cloud引入Feign并且集成了Ribbon实现客户端负载均 ...

  4. Eureka的工作原理以及它与ZooKeeper的区别

    Eureka的工作原理以及它与ZooKeeper的区别 1.Eureka 简介: Eureka 是 Netflix 出品的用于实现服务注册和发现的工具. Spring Cloud 集成了 Eureka ...

  5. SpringCloud Gateway的工作原理

    Spring Cloud Gateway的工作原理 Spring Cloud Gateway是Spring官方基于Spring5.0,Spring Boot2.0和Project Reactor等技术 ...

  6. Hystrix流程分析及断路器工作原理

    上一篇转载的文章主要讲了Hystrix的应用场景.基础组件概念以及从源码的角度阐述了基本应用.本篇文章主要借鉴官方文档介绍Hystrix的工作流程及断路器的原理,最后说一下与SpringCloud的简 ...

  7. SpringCloud实战与原理---快速入门

    SpringCloud实战与原理 第一章  快速入门 1. 初始化工程 2. 启动Eureka注册中心 2.1 Eureka注册中心启动代码 2.2 启动Eureka注册中心 3. 注册Eureka客 ...

  8. SpringCloud Eureka自我保护机制

    转载自 SpringCloud Eureka自我保护机制 自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他 ...

  9. Spring Cloud Eureka 配置原理详解

    导语:   首先对于Eureka注册中心默认大家都有所了解,这篇博客主要就是来通过Eureka的配置源码来了解一下关于Eureka配置中心都有那些详细的配置内容.对于Eureka 客户端的配置主要分为 ...

最新文章

  1. linux各文件夹的作用域
  2. Openwebmail在Ubuntu Linux上的安装过程
  3. Python实现网页截图
  4. leetcode刷题实录:1
  5. 生成二维码接口,前端调用接口将二维码显示在页面上
  6. IAR无法goto的解决办法
  7. 第一百四十一节,JavaScript,封装库--DOM加载
  8. 2021-2025年中国传感器融合行业市场供需与战略研究报告
  9. spring aop中使用@Pointcut注解抽取可重用的切入点表达式
  10. Nginx源码分析 - Event事件篇 - Nginx的Event事件模块概览(17)
  11. JavaScript--百度地图那些坑
  12. kbmmw 的HTTPSmartService中的跨域访问
  13. mysql监听显示syn_sent,TCP协议端口状态说明:CLOSE-WAIT、TIME-WAIT 、LISTENING、SYN_SENT、ESTABLISHED、LAST-ACK ......
  14. 2021年中职“网络安全“江西省赛题—B-1:系统漏洞利用与提权
  15. java 多线程抢票_多线程抢票详解
  16. 萌新卷妹带你逃出算法无名岛第五站
  17. 天龙八部科举答题问题和答案(全6/8)
  18. Matlab——深度学习工具箱
  19. Lawliet|C语言学习笔记5——循环结构
  20. 以自动化为核心的自服务大数据治理

热门文章

  1. firefox让标签栏显示在地址栏的下面的方法
  2. IDT系列:(一)初探IDT,Interrupt Descriptor Table,中断描述符表
  3. Android 蓝牙开发实例--蓝牙聊天程序的设计和实现
  4. oracle23290,oracle标题
  5. CMake常见指令总结
  6. 3 账套升级u8_用友U8条码管理的应用对仓库有什么好处?
  7. c语言单片机求最小公倍数,单片机常用的14个C语言算法,要熟记在心哦!
  8. linux显示进程的h开头的,Linux上进程的开始时间
  9. spring 两次进入拦截器_Spring Boot+Redis 扛住,瞬间千次重复提交(实例)
  10. mongodb安装_MongoDB和Web应用程序