【SpringCloud】Eureka工作原理
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工作原理相关推荐
- 微服务 注册中心的作用_SpringCloud(二)服务注册中心与Eureka工作原理介绍
微服务的注册中心 author:QYX 注册中心可以说是微服务架构中的通讯录,它记录了服务和服务地址的映射关系,在分布式架构中,服务会注册到这里,当服务需要调用其他服务时, 就会在这里找到服务的地址, ...
- Eureka工作原理(Eureka简介Eureka ServerEureka Client自我保护机制分布式系统中的CAP理论Eureka 工作流程)
一.Eureka简介 Eureka Server(注册中心,相当于zookeeper) Eureka Client: Provider Consumer 多个Eureka就叫集群.集群之间会定时通过r ...
- SpringCloud Feign工作原理基本理解
Feign介绍 Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端.Spring Cloud引入Feign并且集成了Ribbon实现客户端负载均 ...
- Eureka的工作原理以及它与ZooKeeper的区别
Eureka的工作原理以及它与ZooKeeper的区别 1.Eureka 简介: Eureka 是 Netflix 出品的用于实现服务注册和发现的工具. Spring Cloud 集成了 Eureka ...
- SpringCloud Gateway的工作原理
Spring Cloud Gateway的工作原理 Spring Cloud Gateway是Spring官方基于Spring5.0,Spring Boot2.0和Project Reactor等技术 ...
- Hystrix流程分析及断路器工作原理
上一篇转载的文章主要讲了Hystrix的应用场景.基础组件概念以及从源码的角度阐述了基本应用.本篇文章主要借鉴官方文档介绍Hystrix的工作流程及断路器的原理,最后说一下与SpringCloud的简 ...
- SpringCloud实战与原理---快速入门
SpringCloud实战与原理 第一章 快速入门 1. 初始化工程 2. 启动Eureka注册中心 2.1 Eureka注册中心启动代码 2.2 启动Eureka注册中心 3. 注册Eureka客 ...
- SpringCloud Eureka自我保护机制
转载自 SpringCloud Eureka自我保护机制 自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他 ...
- Spring Cloud Eureka 配置原理详解
导语: 首先对于Eureka注册中心默认大家都有所了解,这篇博客主要就是来通过Eureka的配置源码来了解一下关于Eureka配置中心都有那些详细的配置内容.对于Eureka 客户端的配置主要分为 ...
最新文章
- linux各文件夹的作用域
- Openwebmail在Ubuntu Linux上的安装过程
- Python实现网页截图
- leetcode刷题实录:1
- 生成二维码接口,前端调用接口将二维码显示在页面上
- IAR无法goto的解决办法
- 第一百四十一节,JavaScript,封装库--DOM加载
- 2021-2025年中国传感器融合行业市场供需与战略研究报告
- spring aop中使用@Pointcut注解抽取可重用的切入点表达式
- Nginx源码分析 - Event事件篇 - Nginx的Event事件模块概览(17)
- JavaScript--百度地图那些坑
- kbmmw 的HTTPSmartService中的跨域访问
- mysql监听显示syn_sent,TCP协议端口状态说明:CLOSE-WAIT、TIME-WAIT 、LISTENING、SYN_SENT、ESTABLISHED、LAST-ACK ......
- 2021年中职“网络安全“江西省赛题—B-1:系统漏洞利用与提权
- java 多线程抢票_多线程抢票详解
- 萌新卷妹带你逃出算法无名岛第五站
- 天龙八部科举答题问题和答案(全6/8)
- Matlab——深度学习工具箱
- Lawliet|C语言学习笔记5——循环结构
- 以自动化为核心的自服务大数据治理
热门文章
- firefox让标签栏显示在地址栏的下面的方法
- IDT系列:(一)初探IDT,Interrupt Descriptor Table,中断描述符表
- Android 蓝牙开发实例--蓝牙聊天程序的设计和实现
- oracle23290,oracle标题
- CMake常见指令总结
- 3 账套升级u8_用友U8条码管理的应用对仓库有什么好处?
- c语言单片机求最小公倍数,单片机常用的14个C语言算法,要熟记在心哦!
- linux显示进程的h开头的,Linux上进程的开始时间
- spring 两次进入拦截器_Spring Boot+Redis 扛住,瞬间千次重复提交(实例)
- mongodb安装_MongoDB和Web应用程序