Spring Cloud Eureka 注册中心高可用机制
一、Eureka 正常工作流程
- Service 服务作为 Eureka Client 客户端需要在启动的时候就要向 Eureka Server 注册中心进行注册,并获取最新的服务列表数据。
- Eureka Server 之间通过 Peer To Peer 模式复制最新数据。
- Eureka Client 通过心跳机制定时向 Eureka Server 续约,上报自己的状态,并获取最新的服务列表数据。
- Eureka Client 在本地有一个
localRegionApps变量,用来保存从 Eureka Server 拉取回来的服务列表数据。

二、主要看一下Eureka 异常场景下如何做到高可用
Eureka Client 在启动的时候发现 Eureka Server 都用不了,可能在Eureka Server启动失败,或者还没有启动,这样就会导致:
- 客户端无法注册自己
- 客户端无法获取服务列表
这样就无法和其他服务交互了,但是Eureka 可以通过他的备用机制解决这个问题。
Eureka Client 有一个属性:
|
1
|
eureka.client.backup-registry-impl |
这是 Eureka 为 Client 提供的一个 fallback,在启动的时候如果访问不到 Eureka Server,就会使用备用的 registry,把 backup-reg
istry 返回的服务列表保存到本地 localRegionApps,这就可以正常和其他Service交互了。

2. 在服务正常运行期间 Eureka Server 出现部分不可用的场景
Client 在访问 Server 时,不会一直按照配置文件中的顺序,会随机调换顺序,这样可以防止某个Server成为访问热点。
Eureka Client 维护了一个不可用 Server 列表,如果发现某个 Server 不可用,会将其放入这个不可用列表。
Client 在访问 Server 时,会排除掉不可用列表中的Server。
比如 Eureka Client 配置了3个 Server,server1、server2、server3,假设 server3 故障了,Client 就把 server3 放入不可用列表,以后再访问 Server 时就排除掉 server3。
3. 正常运行期间 Eureka Server 全部不可用
Client 曾从 Server 正常获取过服务列表数据,本地localRegionApps 存有服务列表。
如果 Server 都挂了,那么 Client 的定时程序访问 Server 时会抛出异常,便不会更新localRegionApps变量,所以 Client 可以继续使用localRegionApps中的服务列表,与其他Service正常交互。

4. Eureka Client 未及时续约场景
Eureka Server 对于未续约的 Client 会认为它已经不可用了,就会从服务列表中删除。
但Client 未续约有时不是 Client 的问题,可能是因为网络因素,例如网络的抖动,所以,如果使用一刀切的判断方式,可能出现误判,Eureka 为了避免出现误判,设计了一种自我保护机制 Self Preservation。
如果大面积出现了 Client 未续约的情况,不大可能这么多 Client 同时挂掉,为防止误判,就会开启自我保护,不会剔除 Client 实例,从而保护注册信息。
具体什么情况开启自我保护呢,可以配置一个阈值(默认值为 15%),只有在最近一分钟接收到的续约次数小于阈值的时候开启。
三、总结
Eureka 通过如下机制来达到高可用:
- backup-registry
即使 client 启动的时候 Eureka Server 都不可用也没关系,通过备用 registry 可以拿到服务列表。
- 不可用 Eureka Server 列表
client 会维护一个不可用server列表,避免访问失效的server。
- 服务列表本地缓存
在 Eureka Server 都失效时,本地的服务列表不会更新,使其依然可用,也就可以继续使用其中的service信息。
- Self Preservation
自我保护机制防止误删除client。
来源:内蒙古SEO
Spring Cloud Eureka 注册中心高可用机制的更多相关文章
- Spring Cloud(Dalston.SR5)--Eureka 注册中心高可用-服务提供和消费
由于 Eureka 注册中心只是在内存中保存服务注册实例,并且没有将服务注册实例进行同步,因此我们需要对服务提供和消费进行调整,需要指定服务提供和消费的注册.服务发现的具体Eureka 注册中心配置, ...
- 跟我学SpringCloud | 第七篇:Spring Cloud Config 配置中心高可用和refresh
SpringCloud系列教程 | 第七篇:Spring Cloud Config 配置中心高可用和refresh Springboot: 2.1.6.RELEASE SpringCloud: Gre ...
- IDEA 创建Spring cloud Eureka 注册中心
IDEA 创建Spring cloud Eureka 注册中心 一. 首先创建一个maven project Next之后填好groupId与artifactId,Next之后填好项目名与路径,点击F ...
- Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!
Spring Cloud 的注册中心可以由 Eureka.Consul.Zookeeper.ETCD 等来实现,这里推荐使用 Spring Cloud Eureka 来实现注册中心,它基于 Netfl ...
- Spring Cloud(Dalston.SR5)--Eureka 注册中心高可用搭建
高可用集群 在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须对各个组件进行高可用部署,对与微服务和服务注册中心都需要高可用部署,Eureka 高可用实际上就是将自己 ...
- Spring Cloud Eureka注册中心(快速搭建)
Spring Cloud 详解Eureka注册中心@(微服务)[java|spring-cloud|eureka] Eureka 注册中心是入门Spring Cloud微服务架构的必学组件,是学习所有 ...
- Spring Cloud Config 配置中心高可用
详细参见 <Spring Cloud 与 Docker微服务架构实战> p163-9.10 Spring Cloud Config 与 Eureka 配合使用 p163-9.12 Conf ...
- Eureka注册中心高可用及常用配置项
一.前言 前面已经简单的介绍了 Eureka 注册中心的使用以及查看.下面将继续进行 Eureka 的说明以及应用. 二.Eureka 的高可用搭建 在实际生产项目中,为了保证服务的可用性,连续性,一 ...
- Eureka注册中心高可用集群配置
Eureka高可用集群配置 当注册中心扛不住高并发的时候,这时候 要用集群来扛: 我们再新建两个module microservice-eureka-server-2002 microservic ...
随机推荐
- bam文件格式说明
bam文件说明 bam文件和sam文件内容其实是一样的,只是bam是二进制的压缩文件,需要通过特定的软件来进行查看,bam文件通常可以理解为12个字段组成 BAM格式分为header section( ...
- labelme2coco问题:TypeError: Object of type 'int64' is not JSON serializable
最近在做MaskRCNN 在自己的数据(labelme)转为COCOjson格式遇到问题:TypeError: Object of type 'int64' is not JSON serializa ...
- 在 VMware 中安装 MacOS 全记录
在 VMware 15 中安装 MacOS Mojave 安装文件 下载:Unlocker v3.0 for VMware 15地址:https://github.com/DrDonk/unlocke ...
- Matlab R2017b 打开后一直显示“正在初始化”,导致无法运行命令
1. 前言 Matlab R2017b打开后一直显示"正在初始化",导致无法运行命令. 2. 解决方案 1. 找到并记录授权文件license_standalone.lic的路径. ...
- zblog安装环境介绍?zblog安装需要什么环境
最近在群里看到很的多人有在问:“安装zblog需要什么环境?”,其实这个问题在zblog官网的程序下载页面有说明,但是不太详细,那么本文的目的就是来给大家介绍下zblog安装环境详细说明. zblog ...
- PHP中的PDO数据对象
PDO: PHP Data Object:php的数据对象.pdo是数据库操作工具类!1,它能操作很多种数据库,比如mysql,oracle,sybase....2,它具有操作数据库的更多的功能,比如 ...
- Python-20-异常处理
一.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止) 常用异常: AttributeError 试图访问一个对 ...
- 采用二进制方式安装K8S集群,版本etcd-v3.3.10,flannel-v0.11.0,kubernetes-server-linux-amd64
官方提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环 ...
- Linux下OpenSSL加密解密压缩文件(AES加密压缩文件)
OpenSSL是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法.下面介绍使用Openssl进行文件的对称 ...
- table固定宽度与自动宽度
table-layout:auto(创建的table默认是此布局模式): 对table和td.th指定的宽度无效,浏览器会计算所有单元格的内容宽度才能得出一列宽度 如果想对单元格的内容自动折行需使用w ...