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 ...
随机推荐
- php中static关键字的理解
函数内的static变量 static静态变量的理解 静态变量 类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整 ...
- Zxing QRCode
1.拉伸 2.只能扫描一次 3.空指针异常
- 堆 堆排序 优先队列 图文详解(Golang实现)
引入 在实际应用中,我们经常需要从一组对象中查找最大值或最小值.当然我们可以每次都先排序,然后再进行查找,但是这种做法效率很低.哪么有没有一种特殊的数据结构,可以高效率的实现我们的需求呢,答案就是堆( ...
- 新闻实时分析系统-Hadoop2.X分布式集群部署
(一)hadoop2.x版本下载及安装 Hadoop 版本选择目前主要基于三个厂商(国外)如下所示: 1.基于Apache厂商的最原始的hadoop版本, 所有发行版均基于这个版本进行改进. 2.基于 ...
- Linux -- 进程间通信之管道
管道是 Linux 里的一种文件类型,同时也是 Linux 系统下进程间通信的一种方式 创建一个管道文件有两种方式: Shell 下命令 mkfifo + filename,即创建一个有名管道 ...
- cookies与session简介
一.session和cookie 简单来讲cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于采用服务器端保持状态的方案在客户端 ...
- 【JavaEE】之MyBatis的ParameterType的使用
在MyBatis的Mapper.xml文件中,参数的表示方法有两种:一种是使用 “#{XXX}” 的方式表示的,另一种是使用 “${XXX}” 的方式表示的.今天来介绍以下这两种方式的不同之处. 1. ...
- java 小程序分析:参数传递
public class Test{ public static void main (String [] ABC){ StringBuffer a = new StringBuffer(" ...
- python模块IO
Python之模块IO io概叙 io模块提供了python用于处理各种类型I/O的主要工具,主要有三种类型的I/O:文本I/O,二进制I/O和原始I/O:这些都是通用类型,各种后备存储可使用其中的每 ...
- DBCP2的使用例子和源码详解(不包括JNDI和JTA支持的使用)
目录 简介 使用例子 需求 工程环境 主要步骤 创建项目 引入依赖 编写jdbc.prperties 获取连接池和获取连接 编写测试类 配置文件详解 数据库连接参数 连接池数据基本参数 连接检查参数 ...