前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud 注册中心 Eureka 高可用机制

Spring Cloud 注册中心 Eureka 高可用机制

作者头像
dys
发布2019-10-30 15:18:44
7950
发布2019-10-30 15:18:44
举报
文章被收录于专栏:性能与架构性能与架构

一、Eureka 正常时是如何工作的

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

二、Eureka 异常场景下的策略

1. Client 在启动的时候就没有可用 Server

Eureka Client 启动的时候发现 Eureka Server 都用不了,导致:

  • 无法注册自己
  • 无法获取服务列表

这样的话就无法和其他服务交互了,Eureka 通过备用机制解决这个问题。

Eureka Client 有一个属性:

代码语言:javascript
复制
eureka.client.backup-registry-impl

这是 Eureka 为 Client 提供的一个 fallback,在启动的时候如果访问不到 Eureka Server,就会使用备用的 registry,把 backup-registry 返回的服务列表保存到本地 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。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Eureka 正常时是如何工作的
  • 二、Eureka 异常场景下的策略
    • 1. Client 在启动的时候就没有可用 Server
      • 2. 在正常运行期间 Eureka Server 部分不可用
        • 3. 正常运行期间 Eureka Server 全部不可用
          • 4. Eureka Client 未及时续约
          • 三、总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档