Eureka 框架的原理
Eureka 是 Spring Cloud“全家桶”中非常重要的一个组件,主要实现服务的注册和发现。Eureka 做到了 CAP 理论[分布式数据库中的一种弱一致性理论,即系统最多只能同时满足一致性(Consistency)、可用性(Availability)、容忍网络分割(Partition Tolerance)等 3 个需求中的 2 个]中的 AP,强调服务的高可用性,实现中分 Eureka 服务端和 Eureka 客户端两部分。
Eureka 客户端会向 Eureka 注册中心注册服务,并通过心跳来更新它的服务租约。同时 Eureka 客户端可以从 Eureka 服务端查询当前注册的服务信息,把它们缓存到本地并周期性地刷新服务状态。若服务集群出现分区故障,Eureka 会进入自动保护模式,允许分区故障的节点继续提供服务;若分区故障恢复,集群中的其他分区会再次同步它们的状态。
Eureka 是 Netflix 开发的服务发现框架,Spring Cloud 将它集成在自己的子项目 Spring Cloud Netflix 中,以实现 Spring Cloud 的服务发现功能。Eureka 的基本架构由 3 个角色组成:提供服务注册和发现 Eureka 服务端;服务提供者(Service Provider)将自身服务注册到 Eureka,从而使服务消费者能够找到;服务消费者(Service Consumer)从 Eureka 获取注册服务列表,从而能够消费服务。
Application 服务端相当于服务提供者,Application 客户端相当于服务消费者;远程调用可以简单理解为调用 RESTful API。
Eureka 包含两个组件:Eureka 服务端和 Eureka 客户端,它们的作用如下。
Eureka 客户端是一个 Java 客户端,用于简化与 Eureka 服务端的交互。
Eureka 服务端提供服务发现的能力,各个微服务启动时,会通过 Eureka 客户端向 Eureka 服务端注册自己的信息(如网络信息),Eureka 服务端会存储该服务的信息。
微服务启动后,会周期性地向 Eureka 服务端发送心跳(默认周期为 30s)以续约自己的信息。如果 Eureka 服务端在一定时间(默认为 90s)内没有接收到某个微服务节点的心跳,将会注销该微服务节点。
每个 Eureka 服务端同时也是 Eureka 客户端,多个 Eureka 服务端之间通过复制(Replicate)的方式完成服务注册表的同步。
Eureka 客户端会缓存 Eureka 服务端中的信息。即使所有的 Eureka 服务端节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者。
总结一下,Eureka 通过心跳检测、健康检查和客户端缓存等机制,提高了系统的灵活性、可伸缩性和可用性。
版权声明: 本文为 InfoQ 作者【阿泽🧸】的原创文章。
原文链接:【http://xie.infoq.cn/article/1ed43db7a0cc74a01c655dc12】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论