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 ...
随机推荐
- Spring 中的统一异常处理
在具体的SSM项目开发中,由于Controller层为处于请求处理的最顶层,再往上就是框架代码的.因此,肯定需要在Controller捕获所有异常,并且做适当处理,返回给前端一个友好的错误码. 不过, ...
- 关于tomcat9的startup.bat闪退问题&乱码
1.打开apache-tomcat-9.0.22的bin目录 选择图中文件 记事本打开 2.更改文件 setclasspath.bat .0_172\jre 3.保存 startup ----- ...
- 多线程(7)— JDK对锁优化的努力
JDK内部的“锁”优化策略 1. 锁偏向 锁偏向是针对加锁操作的优化手段,核心思想是:如果一个线程获得了锁,那么锁就进入偏向模式,当这个线程再次请求锁时,无须再做任何同步操作,这样就节省了大量有关锁申 ...
- (三)spring Security 从数据库中检索用户名和密码
文章目录 配置 Druid 数据源 数据库 Mapper 文件 自定义 `UserDetailsService` 自定义登陆校验器 `AuthenticationProvider ` 配置 secur ...
- Linux基础-09-磁盘分区、挂载及文件系统管理
1. 硬件设备与文件名的对应关系 1) 在Linux系统中,每个设备都被当初一个文件来对待. 2) 各种设备在Linux中的文件名 2. 硬盘的结构及硬盘分区 1) 为什么要进行硬盘分区: a) 更容 ...
- javascript:void(0);的含义以及使用场景
一.含义: javascript:是伪协议,表示内容通过javascript执行. void(0)表示不作任何操作. 二.使用场景 1.href=”javascript:void(0);” 作用:为了 ...
- 基于MFC的网页ActiveX控件开发全程实录2(js向ActiveX控件传递参数)
原文转自 https://blog.csdn.net/qianbin3200896/article/details/81452822 1.ActiveX控件部分(JS到ActiveX控件)继续上一篇博 ...
- 测试人员必须掌握的linu常用命令
有些公司需要测试人员部署程序包,通过工具xshell. 现在我将总结下工作需要用到的最多的命令 ls 显示文件或目录 pwd ...
- iOS - 图片模糊效果实现
下面给大家介绍图片模糊效果的三种方法 第一种使用Core Image进行模糊 - (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFl ...
- seo是什么
SEO(Search Engine Optimization):汉译为搜索引擎优化.搜索引擎优化是一种利用搜索引擎的搜索规则来提高目前网站在有关搜索引擎内的自然排名的方式. SEO的目的是:为网站提供 ...