Eureka

月伴飞鱼 2024-09-21 20:33:43
框架相关
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!

Spring Cloud EurekaNetflix 公司开发的注册发现组件,本身是一个基于 REST 的服务。

  • 提供注册与发现,同时还提供了负载均衡、故障转移等能力。

Eureka 有 3 个角色:

  • 服务中心(Eureka Server):
    • 服务器端,它提供服务的注册和发现功能,即实现服务的治理。
  • 服务提供者(Service Provider):
    • 服务提供者,它将自身服务注册到 服务中心,以便 服务消费者 能够通过服务器提供的服务清单(服务注册列表)来调用它。
  • 服务消费者(Service Consumer):
    • 服务消费者,它从 服务中心 获取已注册的服务列表,从而消费服务。
image-20220822125319145

Eureka 是 AP 架构(可用性和分区容错性),Zookeeper 是 CP 架构(一致性和分区容错性)。

  • Eueka 优先保证服务的可用性。

  • ZookeeperMaster 节点因网络故障与其他节点失去联系时。

    • 剩余节点选取 Leader 时间太长,导致选举期间注册服务瘫痪。

服务自保机制Service Self-Preservation Mechanism):

用于保护在 Eureka 注册中心上注册的微服务实例免受意外删除的影响。

当微服务实例在心跳超时时间内没有发送心跳信号给 Eureka Server 时:

  • Eureka Server 不会立即将其从服务注册表中删除,而是认为该实例可能处于网络故障等临时异常情况。
  • 会将其保留在注册表中,提供一定的自我保护,防止误删健康的实例。

这样可以避免因网络抖动、服务器负载或其他临时问题导致服务实例被误删,从而提高服务的稳定性和可用性。

服务剔除机制Service Eviction Mechanism):

是指当服务实例连续长时间未发送心跳信号、或注册中心发现某个服务实例心跳连续失败的次数超过一定阈值时:

  • Eureka Server 会将该服务实例从服务注册表中剔除。

通过服务剔除机制,可以排除不健康、异常或故障状态的服务实例:

  • 防止其他服务继续调用故障的实例减少错误的传播范围,提高系统的稳定性。

基本原理

Eureka 注册中心的 Server 端有三级缓存来保存注册信息,可以利用缓存的快速读取来提高系统性能。

一级缓存:

  • 只读缓存 readOnlyCacheMap,数据结构 ConcurrentHashMap

二级缓存:

  • 读写缓存 readOnlyCacheMapGuava Cache

三级缓存:

  • 本地注册表 registry,数据结构 ConcurentHashMap
65cc5799b04e223196b424bf95801139

默认情况下,每隔 30 秒从读写缓存将注册信息更新到只读缓存。

默认情况下,客户端读取注册表时,先从只读缓存读。

  • 如果没有,则从读写缓存中读取,如果还是没有,则从本地注册表 registry 读取。

默认情况下,每隔 180 秒定时过期读写缓存。

服务实例注册、下线、故障时,会实时过期读写缓存。

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!