springboot-eureka交流机制
一 前言
这篇文章参考了官方文档,主要是描述了eureka client 和 eureka server 之间的交流机制; peer to peer 的 对等复制交流机制;
二 server client 之间的交流
euraka 的 client 与 server 之间的交流主要通过如下方面;
2.1 Register
Register (服务注册) ; Eureka client 会向 Eureka server 注册 关于自生运行实例的信息,比如 ip 地址,主机名,健康状态;
2.2 Renew
Renew(服务续约);Eureka client 会向 Eureka server 每隔30秒发送心跳;续约的目的是通知 Eureka server 自己代表的实例是处于存活状态;如果 Eureka server 90 秒内 未收到 续约心跳,就会将这个实例从服务列表中剔除;官方建议是不要修改续约间隔,原因是服务器要使用这些信息去确认 Eureka server 与 Eureka client 之间的交流是否存在广泛传播的问题;
2.3 Fetch Registry
Fetch Registry(抓取注册列表);Eureka clients 会 从 Eureka server 中 抓取注册的服务列表并且缓存到本地;Eureka clients 缓存本地的服务列表信息会以30秒为间隔定期更新增量信息(上次抓取与当前抓取的服务列表之间不同的信息);通常 Eureka server 会保存增量信息3分钟;因此,Eureka clients 每个增量抓取的服务信息有可能是相同的实例;Eureka client 会自动处理这些重复的信息;
如果处于一些原因导致抓取的信息不匹配,Eureka Client 就会重新抓取整个注册列表的服务信息;Eureka 抓取的信息是以json或者xml格式,通常是josn格式,并且是被压缩过信息,这些压缩过的信息与没压缩过的细信息是相同,压缩的目的就是减小体积,提升性能;
2.4 Cancel
Cancel(服务下线);Eureka client 会发送 下线请求给 Eureka server ,Eureka server 就会将 这个 client 的实例从注册列表中剔除;发送下线请求代码如下:
DiscoveryManager.getInstance().shutdownComponent()
2.5 Time Lag
Time Lag (时间差);所有的 Eureka client操作都会反应给 Eureka Server 或者 接下来其他的 Eureka client ;由于 Eureka server 会缓存 有效信息并根据时间周期更新,Eureka Client 也会 根据时间周期定期更新增量信息;因此,可能会占据2分钟左右的时间将更新的信息全部发送到Eureka Client ;
三 peer to peer 之间的交流
3.1 故障处理
Eureka clients 与 Eureka server 之间的交流是在相同的zone之间交流;如果 server发生问题或者不在相同的zone中,client 就会将 故障转移到server 的其他zone中处理,每个node中都会有一个zone用于专门处理故障;
3.2 peer to peer
如果 server 开始接受流量,Eureka client所有的操作都会在server 上执行,附近的 集群node就会尝试复制一份server已知信息到自己的node;如果Eureka clinet 操作出于某些原因失败了,这些信息就会遗留到下次心跳进行协调,心跳也会在server之间复制;
如果server启动 ,就会尝试获取附近 node 的信息复制一份过来;如果从这个node复制过来的信息存在问题,就会放弃与之peer to peer(对等复制);如果client续约的时间低至一个阈值(15 分钟内低于 85%),那么server 也会停止这些过期的 client 以保护 已经注册的信息;
peer to peer 也就是 eureka 的自我保护机制; 当 Eureka client 与 Eureka server之间存在网络分区的情况,Eureka server 会 保护已经保存的信息,此时 Eureka client 是不能向 Eureka server 注册自己,最好的方法就是尝试向其他的 Eureka server注册自己;在这种情况下 server 无法从附近的 node 获取注册信息,此时会等待 5分钟 让 client 注册信息,因此流量倾斜到某组实例,会造成容量问题;
3.3 peer之间断网
peer之间断网会发生如下情况:
peers 之间心跳复制就会失败,server 会检查到这种情况并且进入自我保护机制,保护当前已经保存的信息;
server会出现孤立情况,换句话说有些 Eureka Client 会 收到 新的注册信息,有些则收不到;也就是我们经常说的数据丢失;
当网络恢复并且稳定,peers 之间能够进行健康交流,注册信息会自动的同步到其他server;
springboot-eureka交流机制的更多相关文章
- [转]Eureka自我保护机制、健康检查的作用、actuator模块监控
Eureka自我保护机制 接着以上篇文章建立的三个工程为基础(eureka-server,uerreg,myweb),默认Eureka是开启自我保护的.我们来做个测试,我们先启动三个工程,我们访问注册 ...
- Eureka自我保护机制、健康检查的作用、actuator模块监控
在上一篇文章微服务入门之服务的注册以及服务之间的调用中,我们基本实现了服务之间的调用,今天我们来了解一下Eureka自我保护机制以及健康检查. Eureka自我保护机制 接着以上篇文章建立的三个工程为 ...
- Spring Cloud Eureka 自我保护机制
Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果 ...
- springcloud Eureka自我保护机制
自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行. 默认情况下,如果Eureka Serve ...
- Spring Cloud Eureka自我保护机制(服务无法剔除)
说明 自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行. 默认情况下,如果Eureka Se ...
- Spring Cloud Eureka 自我保护机制实战分析
前些天栈长在Java技术栈微信公众号分享过 Spring Cloud Eureka 的系列文章: Spring Cloud Eureka 自我保护机制 Spring Cloud Eureka 常用配置 ...
- Spring Cloud Eureka自我保护机制
自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行. 默认情况下,如果Eureka Serve ...
- springBoot的事件机制---GenericApplicationListener用法
springBoot的事件机制---GenericApplicationListener用法 什么是ApplicationContext? 它是Spring的核心,Context我们通常解释为上下文环 ...
- SpringCloud服务的注册发现--------Eureka自我保护机制
1,Eureka 自我保护机制 Eureka注册中心,一些服务会注册到Eureka 服务器上,例如之前的member服务,order服务. 在网络不通的情况下,如果一个bmember 挂了,但是Eur ...
随机推荐
- vue在移动端实现复制数值到剪贴版
实现按键就指定内容复制到设备的剪贴版,这里是复制快递单号 html <div slot="footer" v-if="express.number" st ...
- 三种方法教你HTML实现点击某一个元素之外触发事件
HTML实现点击某一个元素之外触发事件 大致编写的HTML界面渲染后是这个样子的,我们现在想要实现的需求是点击Button所在的div不会触发事件,而在点击Button所在的div之外的区域时会触发事 ...
- SpringBoot 项目脚手架
写在前面 之前也一直很少有写SpringBoot项目相关的文章,今天 准备整理一个我自己初始化SpringBoot项目时的一个脚手架,便于自己后面查阅.因为SpringBoot的约定大于配置,在整合各 ...
- 2019-9-10:渗透测试,基础学习,nmap扫描命令,php基本语法学习,笔记
nmap参数-sT,使用tcp全连接的方式 ,扫描过程需要三次握手,建立链接,则说明端口开放,扫描速度慢-sS,使用syn的数据包去检测,接收到ACK说明端口开放-sN,null扫描,发出去的数据包不 ...
- linux 正确的关机流程
查看系统的使用状态 1.使用who命令查看在线用户. 2.使用netstat -a或ss -tnl查看网络状态: 3.使用ps -aux 查看后台运行的程序. 通过上述操作可以了解系统目前使用状态,从 ...
- day 36 html的补充
参考博客:https://www.cnblogs.com/majj/p/9062540.html 内容回顾: 0.浏览器 1.标签 - 行内标签 a span i em strong b.label ...
- mac系统下docker安装配置mysql详细步骤
上文介绍了MacOS安装Docker傻瓜式教程,安装好后第一件事就决定把本地数据库迁移过来,那么首先就得安装mysql,下面就开始我们的安装之旅吧. 一.docker配置镜像加速器 我们使用docke ...
- 【RN - 基础】之React Native组件的生命周期
下图描述了React Native中组件的生命周期: 从上图中可以看到,React Native组件的生命周期可以分为初始化阶段.存在阶段和销毁阶段. 实例化阶段 实例化阶段是React Native ...
- VS #region
1.C# 预处理指令 #region使您得以在使用Visual Studio代码编辑器的大纲显示功能时指定可展开或折叠的代码块. #region name 其中:name 希 ...
- PHP页面跳转三种实现方法
一.header()函数 header()函数是PHP中进行页面跳转的一种十分简单的方法.header()函数的主要功能是将HTTP协议标头(header)输出到浏览器.header()函数的定义如下 ...