Spring Cloud Eureka
是Netflix
公司开发的注册发现组件,本身是一个基于REST
的服务。
- 提供注册与发现,同时还提供了负载均衡、故障转移等能力。
Eureka
有 3 个角色:
- 服务中心(
Eureka Server
):
- 服务器端,它提供服务的注册和发现功能,即实现服务的治理。
- 服务提供者(
Service Provider
):
- 服务提供者,它将自身服务注册到 服务中心,以便 服务消费者 能够通过服务器提供的服务清单(服务注册列表)来调用它。
- 服务消费者(
Service Consumer
):
- 服务消费者,它从 服务中心 获取已注册的服务列表,从而消费服务。
Eureka
是 AP 架构(可用性和分区容错性),Zookeeper
是 CP 架构(一致性和分区容错性)。
Eueka
优先保证服务的可用性。
Zookeeper
在Master
节点因网络故障与其他节点失去联系时。
- 剩余节点选取
Leader
时间太长,导致选举期间注册服务瘫痪。
服务自保机制(Service Self-Preservation Mechanism
):
用于保护在
Eureka
注册中心上注册的微服务实例免受意外删除的影响。当微服务实例在心跳超时时间内没有发送心跳信号给
Eureka Server
时:
Eureka Server
不会立即将其从服务注册表中删除,而是认为该实例可能处于网络故障等临时异常情况。- 会将其保留在注册表中,提供一定的自我保护,防止误删健康的实例。
这样可以避免因网络抖动、服务器负载或其他临时问题导致服务实例被误删,从而提高服务的稳定性和可用性。
服务剔除机制(Service Eviction Mechanism
):
是指当服务实例连续长时间未发送心跳信号、或注册中心发现某个服务实例心跳连续失败的次数超过一定阈值时:
Eureka Server
会将该服务实例从服务注册表中剔除。通过服务剔除机制,可以排除不健康、异常或故障状态的服务实例:
- 防止其他服务继续调用故障的实例减少错误的传播范围,提高系统的稳定性。
基本原理
Eureka
注册中心的 Server
端有三级缓存来保存注册信息,可以利用缓存的快速读取来提高系统性能。
一级缓存:
- 只读缓存
readOnlyCacheMap
,数据结构ConcurrentHashMap
。二级缓存:
- 读写缓存
readOnlyCacheMap
,Guava Cache
。三级缓存:
- 本地注册表
registry
,数据结构ConcurentHashMap
。
默认情况下,每隔 30 秒从读写缓存将注册信息更新到只读缓存。
默认情况下,客户端读取注册表时,先从只读缓存读。
- 如果没有,则从读写缓存中读取,如果还是没有,则从本地注册表
registry
读取。默认情况下,每隔 180 秒定时过期读写缓存。
服务实例注册、下线、故障时,会实时过期读写缓存。