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 ...
随机推荐
- 树莓派SSH篇
开启好树莓派后发现一个问题,怎么才可以输入进树莓派里面呢? 一.你需要和我一样准备一个无线(有线)键盘
- 如何搭建Docker私有仓库
私有仓库 有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用. 本节介绍如何使用本地仓库. docker-registry 是官方提供的工具,可以用于构建私 ...
- PL真有意思(八):其它程序设计模型
前言 在之前几篇我们讨论的语法.语义.命名.类型和抽象适用于所有语言.然而我们的注意力都主要集中在命令式语言上,现在这篇来看看其它范式的语言.函数式和逻辑式语言是最主要的非命令式语言. 函数式语言 命 ...
- 原生JS的移入溢出控制div的显示与隐藏
原生JS的移入溢出控制div的显示与隐藏的写法 上面的写法火狐存在兼容性
- 使用 buildx 构建多平台 Docker 镜像
原文链接:使用 buildx 构建多平台 Docker 镜像 在工作和生活中,我们可能经常需要将某个程序跑在不同的 CPU 架构上,比如让某些不可描述的软件运行在树莓派或嵌入式路由器设备上.特别是 D ...
- Java 类、接口的API
本章节收集的类/接口API有: Object类,枚举,包装类,接口Comparable,类Arrays,Thread类,System类,Math,BigInteger,Random,日期时间,异常 O ...
- django中的restful规范
基于django的原生restful规范 主路由:url.py from django.conf.urls import url, include from django.contrib import ...
- centos 7 MysSQL 5.7.23 源码安装
MySQL 5.7.23 源码安装 CentOS 7 将默认数据库MySQL替换成了Mariadb. 这里会从系统的环境准备开始一步一步安装. 环境准备 系统版本 内核版本 IP地址 Centos 7 ...
- PAT甲级专题|链表
PAT链表专题 关于PAT甲级的链表问题,主要内容 就是"建立链表" 所以第一步学会模拟链表,pat又不卡时间,这里用vector + 结构体,更简洁 模拟链表的普遍代码 cons ...
- Delphi7 - Server Monitor开发并实现指定端口定时刷新、重启和邮件提醒等功能
项目背景 近期,总经办邮件反馈考勤数据频繁丢失,请IT排查其根本原因,并提供整改措施. 措不及防,这个项目当初并不是IT主导的,是设备部采购,然后协同软件供应商直接安装.部署和调试的,IT只是提供几个 ...