SpringCloud-Eureka原理分析

简介: SpringCloud-Eureka原理分析

 SpringCloud-Eureka原理分析

Eureka是Netflix开源的一款用于实现服务注册与发现的工具。在微服务架构中,服务的动态注册和发现是必不可少的组成部分,而Eureka正是为了解决这一问题而诞生的。

 

一、为何需要Eureka

在微服务架构中,服务之间的协同合作和高效通信是至关重要的。服务的自动注册与发现成为了解决这一挑战的核心问题之一。Eureka作为Netflix开源的服务注册与发现组件,提供了一种简单且高效的解决方案。通过Eureka,服务实例能够自动注册和注销,同时其他服务能够动态地发现和调用这些服务,实现了微服务架构中的高度灵活性和可伸缩性。

 

可能这段话听上去有些晦涩难懂,下面就由我来举例解释:

 

如我们前面文章介绍的,微服务架构是一种优秀的分布式架构,是为了弥补单体应用的不足发展过来的。

image.png

各业务之间是耦合的,没有单独根据业务去做区分,部署虽然方便,但是容灾性比较差,一旦一个服务挂掉,整个应用都会宕机,而且每次发布,都需要全量部署,系统维护非常耗时,从而影响用户体验。

 

后面为了适应大项目的需求,解决这类宕机问题,分布式架构应运而生,服务按模块为单位进行封装,极大程度避免了整体宕机的问题,而且每次发布只需要发布所需要的模块。

 

分布式应用架构如下:

image.png

但分布式的服务调用问题也接踵而至。

 

由于服务分别部署在不同的端口,如果我们按照传统的调用方法,把端口号写死,那么会导致端口变动时需要反复部署。

 

传统服务调用如图所示:

image.png

这种硬编码地址的调用方法非常不灵活,我们需要做很多的端口配置,修改起来又需要重新部署,而且服务挂掉了,也没有补救措施。

 

对于服务挂掉的问题,我们的理想方案是同时启动多个相同服务,部署在不同端口,一旦一个服务挂掉了,系统可以自动选择出最优端口进行替补。

 

为此,Eureka 应运而生。

 

Eureka 重点解决的就是服务注册与发现、负载均衡的问题。

 

引入Eureka 解决服务注册与发现、负载均衡后的服务调用如图:

image.png

二、Eureka原理

Eureka 的原理基于 CAP(一致性、可用性、分区容忍性)理论。Eureka 通过维护一份服务注册表,记录了各个服务实例的信息,包括服务名、实例 ID、IP 地址等。服务提供者通过向 Eureka 服务器注册自身信息,而服务消费者则通过查询 Eureka 服务器来获得可用服务实例的信息。Eureka 还实现了心跳机制和自我保护机制,确保服务实例的及时发现和故障恢复

服务提供者在启动时向 Eureka 服务器注册自己的信息,包括服务名、实例 ID、IP 地址等。完成注册的服务会出现在图中的服务提供者模块里,供服务消费者调用时选择。

 

服务消费者同样也会向 Eureka 服务器注册。服务消费者通过查询 Eureka 服务器获取可用服务实例的信息,从而进行服务调用。

 

服务调用的过程,大概如下:

 

① 服务提供者向 Eureka 服务器注册服务信息;

② 服务消费者从 Eureka 服务器拉取已注册的服务提供者信息;

③ 服务消费者选择其中一个最优的服务提供者,这个过程叫负载均衡;

④ 服务消费者远程调用选定的服务提供者。

同时,Eureka 通过定时发送心跳来检测服务实例的健康状况,确保注册表的及时更新。当 Eureka 服务器在一定时间内未收到服务实例的心跳时,会进入自我保护模式,保障注册表的稳定性。

三、Eureka原理总结

总体而言,Eureka的工作原理可归纳为以下几点:

功能点 功能详述

自动注册与发现 Eureka 允许服务实例在启动时自动注册,同时其他服务可以通过查询 Eureka 服务器获得服务实例的信息,实现动态发现。

负载均衡 Eureka 通过维护服务实例的注册表,使得服务消费者可以从多个可用实例中进行负载均衡,提高系统性能和可用性。

自我保护机制 Eureka具备自我保护机制,能够在网络分区故障或服务实例长时间不发送心跳时,保障注册表的稳定性。

开源社区支持 作为Netflix开源项目,Eureka得到了广泛的社区支持和持续的更新,使其成为一个稳定可靠的服务注册与发现解决方案。

Eureka的设计理念简单而实用,使得它成为构建微服务架构中服务注册与发现的首选解决方案。通过深入理解Eureka的原理,开发者能够更好地利用其功能,构建出稳健、高可用的微服务体系。

 

 

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
1月前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
4月前
|
存储 Dubbo 算法
SpringCloud原理分析 | 简介
SpringCloud原理分析 | 简介
57 0
|
5天前
|
负载均衡 算法
SpringCloud&Ribbon负载均衡原理与实践
SpringCloud&Ribbon负载均衡原理与实践
13 3
|
5月前
|
存储 安全 API
微服务技术系列教程(40)- SpringCloud -OAuth2简介&原理
微服务技术系列教程(40)- SpringCloud -OAuth2简介&原理
23 0
|
5月前
|
消息中间件 JSON Java
微服务技术系列教程(33) - SpringCloud-消息驱动简介&原理
微服务技术系列教程(33) - SpringCloud-消息驱动简介&原理
28 0
|
1月前
|
安全 Java 数据安全/隐私保护
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
|
1月前
|
存储 负载均衡 Java
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
|
6月前
|
缓存 前端开发 Java
8000字+42张图探秘SpringCloud配置中心的原理
不知你是否跟我一样,在刚开始使用SpringCloud配置中心的时候也有很多的疑惑: - SpringCloud是什么时候去拉取配置中心的? - 配置中心客户端的配置信息为什么要写在bootstrap文件中? - 对象中注入的属性是如何动态刷新的? - 一些开源的配置中心是如何整合SpringCloud的? - ... 本文就通过探讨上述问题来探秘SpringCloud配置中心核心的底层原理。
|
1月前
|
Java Nacos Sentinel
Spring Cloud Alibaba 面试题及答案整理,最新面试题
Spring Cloud Alibaba 面试题及答案整理,最新面试题
216 0
|
1月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
169 0