一 前言

这篇文章参考了官方文档,主要是描述了eureka client 和 eureka server 之间的交流机制; peer to peer 的 对等复制交流机制;

eureka 官方文档

二 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之间断网会发生如下情况:

  1. peers 之间心跳复制就会失败,server 会检查到这种情况并且进入自我保护机制,保护当前已经保存的信息;

  2. server会出现孤立情况,换句话说有些 Eureka Client 会 收到 新的注册信息,有些则收不到;也就是我们经常说的数据丢失;

  3. 当网络恢复并且稳定,peers 之间能够进行健康交流,注册信息会自动的同步到其他server;

springboot-eureka交流机制的更多相关文章

  1. [转]Eureka自我保护机制、健康检查的作用、actuator模块监控

    Eureka自我保护机制 接着以上篇文章建立的三个工程为基础(eureka-server,uerreg,myweb),默认Eureka是开启自我保护的.我们来做个测试,我们先启动三个工程,我们访问注册 ...

  2. Eureka自我保护机制、健康检查的作用、actuator模块监控

    在上一篇文章微服务入门之服务的注册以及服务之间的调用中,我们基本实现了服务之间的调用,今天我们来了解一下Eureka自我保护机制以及健康检查. Eureka自我保护机制 接着以上篇文章建立的三个工程为 ...

  3. Spring Cloud Eureka 自我保护机制

    Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果 ...

  4. springcloud Eureka自我保护机制

    自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行. 默认情况下,如果Eureka Serve ...

  5. Spring Cloud Eureka自我保护机制(服务无法剔除)

    说明 自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行. 默认情况下,如果Eureka Se ...

  6. Spring Cloud Eureka 自我保护机制实战分析

    前些天栈长在Java技术栈微信公众号分享过 Spring Cloud Eureka 的系列文章: Spring Cloud Eureka 自我保护机制 Spring Cloud Eureka 常用配置 ...

  7. Spring Cloud Eureka自我保护机制

    自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行. 默认情况下,如果Eureka Serve ...

  8. springBoot的事件机制---GenericApplicationListener用法

    springBoot的事件机制---GenericApplicationListener用法 什么是ApplicationContext? 它是Spring的核心,Context我们通常解释为上下文环 ...

  9. SpringCloud服务的注册发现--------Eureka自我保护机制

    1,Eureka 自我保护机制 Eureka注册中心,一些服务会注册到Eureka 服务器上,例如之前的member服务,order服务. 在网络不通的情况下,如果一个bmember 挂了,但是Eur ...

随机推荐

  1. Maven 无法下载依赖包的解决方法---三步dao!!!

    版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/WLCYSYS/p/11932157.html maven 自动下载依赖包出现 ...

  2. Alibaba Nacos 学习(五):K8S Nacos搭建,使用nfs

    Alibaba Nacos 学习(一):Nacos介绍与安装 Alibaba Nacos 学习(二):Spring Cloud Nacos Config Alibaba Nacos 学习(三):Spr ...

  3. Acquistion Location Confidence for accurate object detection

    Acquistion Location Confidence for accurate object detection 本论文主要是解决一下两个问题: 1.分类得分高的预测框与IOU不匹配,(我猜应 ...

  4. 2019-9-10:渗透测试,基础学习,nmap扫描命令,php基本语法学习,笔记

    nmap参数-sT,使用tcp全连接的方式 ,扫描过程需要三次握手,建立链接,则说明端口开放,扫描速度慢-sS,使用syn的数据包去检测,接收到ACK说明端口开放-sN,null扫描,发出去的数据包不 ...

  5. 新闻实时分析系统-HBase分布式集群部署与设计

    HBase是一个高可靠.高性能.面向列.可伸缩的分布式存储系统,利用Hbase技术可在廉价PC Server上搭建 大规模结构化存储集群. HBase 是Google Bigtable 的开源实现,与 ...

  6. Tensorflow多层LSTM代码分析

    1.tf.Graph() 你一旦开始你的任务,就已经有一个默认的图已经创建好了.而且可以通过调用tf.get_default_graph()来访问到. 添加一个操作到默认的图里面,只要简单的调用一个定 ...

  7. ip地址计算

    1.多少个子网? 2x个,其中x为被遮盖(取值为1)的位数.例如,在11000000(这个值是子网掩码的最后几位,例如,mask=18)中,取值为1的位数为2,因此子网数位22=4个: 2.每个子网包 ...

  8. .NET Core开发的iNeuOS工业互联网平台,发布 iNeuDA 数据分析展示组件,快捷开发图形报表和数据大屏

    目       录 1.      概述... 2 2.      演示信息... 2 3.      简单介绍... 3 4.      产品特点... 4 5.      价值体现... 5 1. ...

  9. Prometheus 【目录】

    正在陆续更新,内容大体包括: rule.标签重置.cAdversior.自动发现(File 自动发现.DNS自动发现.k8s环境自动发现)等... 目录: prometheus[第一篇] Promet ...

  10. 重新调用 layoutSubview

    重新调用 layoutSubview