> 文章列表 > Eureka

Eureka

Eureka

服务注册中心

作用

解耦服务提供者和服务调用者

  1. 实现动态扩缩容。将程序之间对于IP+端口号的依赖转化为服务名的依赖,服务名可以根据业务功能等进行命名
  2. 对服务的状态进行管理,当程序状态发生改变,可以第一时间通知程序的调用者

原理

Eureka

Eureka

Eureka通过⼼跳检测、健康检查和客户端缓存等机制,提⾼系统的灵活性、可伸缩性和可⽤性。
Eureka

流程

客户端发起服务注册
服务端保存注册信息到注册表
客户端定时发生心跳检测
服务端服务剔除及自我保护
客户端发起服务下线
客户端或者服务端注册信息到本地内存
客户端整合服务发现

心跳检测

微服务启动后,会周期性地向Eureka发送⼼跳(默认周期为30秒)以续约⾃⼰的信息
Eureka在⼀定时间内(默认90秒)没有接收到某个微服务节点的⼼跳,Eureka将会注销该微服务节点

注册信息维护

Eureka为了提⾼响应速度,在内部做了优化,加⼊了两层的缓存结构。提⾼ Eureka Server 的响应速度,缺点是缓存会导致 Client获取不到最新的服务实例信息,然后导致⽆法快速发现新的服务和已下线的服务
Eureka

第⼀层缓存是readOnlyCacheMap,采⽤ConcurrentHashMap来存储数据的,主要负责定时与readWriteCacheMap进⾏数据同步,默认同步时间为 30 秒⼀次。

第⼆层缓存是readWriteCacheMap,采⽤Guava来实现缓存。缓存过期时间默认为180秒,当服务下线、过期、注册、状态变更等操作都会清除此缓存中的数据。

如果两级缓存都无法查询,会触发缓存的加载,从存储层拉取数据到缓存中,然后再返回给 Client。

更新问题

我们可以缩短读缓存的更新时间让服务发现变得更加及时,或者直接将只读缓存关闭,同时可以缩短客户端如ribbon服务的定时刷新间隔,多级缓存也导致C层⾯(数据⼀致性)很薄弱。
Eureka Server 中会有定时任务去检测失效的服务,将服务实例信息从注册表中移除,也可以将这个失效检测的时间缩短,这样服务下线后就能够及时从注册表中清除。

自我保护

如果 Eureka 服务器检测到超过预期数量的注册客户端终止了连接,并且同时正在等待被驱逐,那么将进入自我保护模式。这样做是为了确保灾难性网络事件不会擦除eureka注册表数据。