Spring Cloud Eureka 原理

Spring Cloud Eureka 原理SpringCloudE

Spring Cloud Eureka 原理

概述

所有的注册中心都需要两个核心功能:

  • 1、地址统一维护
  • 2、服务的上下线感知

注册中心核心原理:

  • 推送发送:push / pull
  • 存储:持久化
  • 高可用机制:集群特性 -> 选举特性、 一致性问题
  • cap特性:cp 、ap
  • api的提供形式:http协议、 netty通信在这里插入图片描述

一、Eureka的整体架构

Eureka Netflix 服务注册与发现的中间件Spring Cloud 2020版本中唯一留下的组件,整体架构如下。

在这里插入图片描述

  • Application Service: 作为Eureka Client,扮演了服务的提供者,提供业务服务,向Eureka Server注册和更新自己的信息,同时能从Eureka Server的注册表中获取到其他服务的信息。
    • 服务注册, Eureka Client 发送REST请求向Eureka Server注册自己的服务,提供自身的元数据,比如ip:port,url,Eureka Server接收请求后存储在一个双层的Map中。
    • 服务续约-Renew,默认每隔30s发送一次心跳到Server维持和更新注册表中的服务实例元数据的有效性。当在一定时长内Server没有收到Client的心跳信息,将默认服务下线,将服务实例的信息从注册表中删除。
  • Application Client: 作为Eureka Client,扮演了服务消费者,通过Eureka Server获取到注册到上面的其他服务的信息,从而根据信息找到所需的服务发起远程调用。
    • 服务发现,Eureka Client在启动时, 发送REST请求向Eureka Server取到注册到上面的其他服务的信息,并缓存在本地,默认30s轮询一次。
    • 服务调用,进行远程调用,一个Region可以包含多个Zone,优先调用同一个Zone的服务
  • Eureka Server: 扮演服务注册中心的角色,提供服务注册和发现的功能,每个Eureka Client向Eureka Server注册自己的信息,也可以通过Eureka Server获取到其他服务的信息达到发现和调用其他服务的目的。
    • Replicate:服务同步,Eureka Server直接相互注册构建集群,注册表信息的同步拷贝,保持不同的Eureka Server集群中的注册表中的服务实例信息的一致性。提供了数据的最终一致性。
    • Cancel: 服务下线,Client在关闭时主动向Server注销服务实例元数据,这时Client的的服务实例数据将从Server的注册表中删除。
    • 服务剔除,Client由于网络原因,没有发送请求给Server来进行服务下线,Eureka Server会每60秒遍历一次注册表中的信息,把超过90秒还没有续约的服务剔除。

二、服务注册发现的流程

注册:

  • 1、读取eureka server的地址信息和自己的配置信息,
  • 2、然后将自己的信息封装在InstanceInfo实例中,
  • 3、先把eureka server中的注册拉取到本地缓存起来
  • 4、将封装的InstanceInfo实例发送到eureka server进行注册,然后初始化心跳检测以及缓存刷新
  • 5、再次拉取注册表更新本地注册表信息

发现:

Eureka Client在启动时, 发送REST请求向Eureka Server取到注册到上面的其他服务的信息,并缓存在本地,默认30s轮询一次。

三、如何判断一个服务不可用(心跳)

在每一个Eureka Client启动的时候,都会有一个HeartbeatThread的心跳线程,保证默认每隔30秒的时候向Eureka Server发送一个心跳,告诉Eureka Server当前的Eureka Client还存活着。eureka.instance.lease-renewal-interval-in-seconds,这个参数可以来配置对应的心跳间隔时间。

Eureka Server在接收到请求之后,先去自己的注册表中去,找到请求的对应的服务信息,在这个服务信息里面有个Lease的对象,更新Lease对象里面的LastUpdateTimestamp时间戳,每一次接收到都会更新这个时间戳的(Renew 续约)

Eureka Server会每60秒遍历一次注册表中的信息,然后查看注册表中的信息是否有过期的,如果90秒还没有更新对应的LastUpdateTimestamp就表示这个服务过期(从注册表中删除注册信息)。

//可以配置心跳检测的时间间隔 eureka.server.evictionIntervalTimerInMs //90秒过期的配置 eureka.instance.lease-expiration-duration-in-seconds 

四、Eurka的自我保护机制

Eureka Server在运行期间会去统计心跳失败的比例在15分钟之内是否低于85% 如果发现85%以上的服务都没有心跳,Eureka Server会认为当前实例的客户端与自己的心跳连接出现了网络故障,那么Eureka Server会把这些实例保护起来,让这些实例不会过期导致实例剔除。

这样做的目的是为了减少网络不稳定或者网络分区的情况下,Eureka Server将健康服务剔除下线的问题。 使用自我保护机制可以使得Eureka 集群更加健壮和稳定的运行。

进入自我保护状态后,会出现以下几种情况

  • Eureka Server不再从注册列表中移除因为长时间没有收到心跳而应该剔除的过期服务
  • Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点上,保证当前节点依然可用。
protected volatile int numberOfRenewsPerMinThreshold; //每分钟最小续约数量 protected volatile int expectedNumberOfClientsSendingRenews; //预期每分钟收到续约的 客户端数量,取决于注册到eureka server上的服务数量 

Eureka的自我保护机制,都是围绕上面这两个变量来实现的。

五、Eurka信息存储原理多级缓存设计

在这里插入图片描述

在这里插入图片描述

六、zk和eureka的区别

Eureka Server在运行期间会去统计心跳失败的比例在15分钟之内是否低于85% 如果发现85%以上的服务都没有心跳,Eureka Server会认为当前实例的客户端与自己的心跳连接出现了网络故障,那么Eureka Server会把这些实例保护起来,让这些实例不会过期导致实例剔除。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177541.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:16
下一篇 2026年3月26日 下午7:16


相关推荐

  • DeviceIoControl端口隐藏

    DeviceIoControl端口隐藏DeviceIoControl端口隐藏通过HookTCP驱动程序的Irp分派例程(irpStack->MajorFunction[IRP_MJ_DEVICE_CONTROL])来隐藏应用层查询端口信息#include<ntddk.h>#defineCO_TL_ENTITY0x400#defineCL_TL_ENTITY0…

    2025年9月27日
    5
  • 中兴F450光猫设置桥接_电信光猫改桥接后上不了网络

    中兴F450光猫设置桥接_电信光猫改桥接后上不了网络前几天突然想搞外网访问,但是电信这款光猫DMZ不能用让我很愁,后来经过一番了解可以让光猫只负责光数转换,剩下的事情交给路由,但是要把光猫设置成桥接模式这个光猫比较特殊不需要进入超级管理员只需要下面这个链接:http://192.168.1.1:8080/bridge_route.gch会出现这个页面,点击桥接复原就行,我是已经点过了,所以置灰了。…

    2022年10月8日
    8
  • 华为官网ensp安装包在哪?_手机安装华为路由器的步骤图解

    华为官网ensp安装包在哪?_手机安装华为路由器的步骤图解今天给小伙伴们详细介绍一下ensp的安装教程,附有安装包有,可自行下载目录一,安装包链接二,安装详细步骤1.安装OracleVMVirtualBox2.安装Wireshark3.安装ensp4.安装完成三,总结一,安装包链接链接:https://pan.baidu.com/s/1d-8dd9qBhpAwxc0UBL8vdg提取码:df6m二,安装详细步骤1.安装OracleVMVirtualBox下载好安装包后解压,打…

    2022年10月14日
    5
  • 企业微信机器人发送消息[通俗易懂]

    企业微信机器人发送消息[通俗易懂]背景:之前用钉钉机器人可以发送消息,可以将线上的告警通知发送到消息群中,后来企业微信也支持在群组中增加机器人了,钉钉和企业微信机器人的使用很相似,都是使用webhook的方式来进行实现的,话不多说,咱们先配置机器人,然后再上代码。1.在企业微信的聊天群中增加机器人注意:目前只能在聊天群中添加机器人,所以我当时的做法是,先拉一个同事进群,然后再让他退群,具体步骤如下…

    2022年6月28日
    36
  • java工具类——验证码(VerifyCode)[通俗易懂]

    java工具类——验证码(VerifyCode)[通俗易懂]importjava.awt.BasicStroke;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics2D;importjava.awt.image.BufferedImage;importjava.io.FileNotFoundException;importjava.io.IOExcept

    2022年7月15日
    19
  • 认为C/C++很难理解、找工作面试笔试,快看看这本书!

    认为C/C++很难理解、找工作面试笔试,快看看这本书!

    2022年1月17日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号