当前位置:首页 > 科技  > 软件

微服务设计必看:深度解析Netflix Eureka的底层实现

来源: 责编: 时间:2023-10-27 21:43:42 451观看
导读作者 | 波哥审校 | 重楼在微服务架构中,服务发现和注册是确保各个微服务之间通信和协作的核心组件。Netflix Eureka作为一款开源的服务发现和注册工具,在现代分布式系统中扮演着重要角色。本文将从代码层面深入探讨Netf

作者 | 波哥iRz28资讯网——每日最新资讯28at.com

审校 | 重楼iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

在微服务架构中,服务发现和注册是确保各个微服务之间通信和协作的核心组件。Netflix Eureka作为一款开源的服务发现和注册工具,在现代分布式系统中扮演着重要角色。本文将从代码层面深入探讨Netflix Eureka的底层实现原理,为读者详细呈现其内部运行机制。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

Netflix Eureka由Eureka服务器和Eureka客户端两部分构成。它们协同工作,构建了一个完整的服务发现和注册系统。iRz28资讯网——每日最新资讯28at.com

一、Eureka服务器

iRz28资讯网——每日最新资讯28at.com

Eureka服务器负责存储和管理所有已注册的服务实例信息,保证服务发现的准确性。Eureka服务器的核心是InstanceRegistry、LeaseManager和SelfPreservationFilter。下面结合代码详细介绍下这几个核心组件。iRz28资讯网——每日最新资讯28at.com

1.InstanceRegistry(实例注册表)

iRz28资讯网——每日最新资讯28at.com

实例注册表负责存储所有已注册的服务实例信息,包括它们的元数据,如实例ID、主机名、端口等。从代码层面来看,InstanceRegistry是一个包含了实例信息的内存数据结构,通常使用ConcurrentHashMap来存储,当一个新的服务实例注册时,InstanceRegistry 的 register 方法被调用,将该实例信息添加到注册表中;当一个服务实例不再可用,需要从Eureka服务器取消注册时,InstanceRegistry 的 cancel 方法被调用,从注册表中移除该实例信息。具体的功能包括:iRz28资讯网——每日最新资讯28at.com

注册服务实例:register 方法负责将服务实例注册到注册表。iRz28资讯网——每日最新资讯28at.com

取消注册服务实例:cancel 方法用于从注册表中移除不再可用的实例。iRz28资讯网——每日最新资讯28at.com

获取服务实例信息:getInstancesById 方法用于获取特定服务的所有实例信息。iRz28资讯网——每日最新资讯28at.com

2.LeaseManager(租约管理器)

iRz28资讯网——每日最新资讯28at.com

租约管理器负责管理实例的租约,租约是Eureka服务器中的一个重要概念,用于确保实例的健康状态。在代码层面,LeaseManager维护了一个租约的集合,并提供了操作租约的方法,主要包括:iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

注册实例并创建租约:register 方法负责为新注册的实例创建租约。iRz28资讯网——每日最新资讯28at.com

续约租约:renew 方法用于更新租约的到期时间,延长租约的有效期。iRz28资讯网——每日最新资讯28at.com

移除租约:cancel 方法负责在实例取消注册时移除租约。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

在服务实例注册时,LeaseManager 的 register 方法被调用,创建一个新的租约,并将其添加到租约管理器中。在服务实例定期发送心跳续约请求时,LeaseManager 的 renew 方法被调用,更新租约的到期时间,确保租约的有效性。当一个服务实例取消注册时,LeaseManager 的 cancel 方法被调用,从租约管理器中移除相应的租约。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

下面是具体方法内容:iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

3.SelfPreservationFilter(自我保护过滤器)

iRz28资讯网——每日最新资讯28at.com

自我保护机制是Netflix Eureka服务器(服务端)中的一项重要功能。它旨在确保在网络抖动等异常情况下,Eureka服务器不会过早地剔除正常运行的服务实例,从而保持服务的可用性和稳定性。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

当Eureka服务器开启自我保护机制时,它会监测心跳续约失败的实例数量。如果在某个时间段内,心跳续约失败的实例数量超过了预定的阈值,Eureka服务器将进入自我保护模式。在自我保护模式下,Eureka服务器不会剔除任何正常运行的实例,以免影响整个系统的稳定性。这是为了避免在网络抖动等情况下,误判正常实例失效。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

需要注意的是,虽然自我保护机制保护了Eureka服务器上的服务注册表,但在自我保护模式下,Eureka服务器将不再从已注册的实例中移除长时间未续约的实例,这可能会导致注册表中存在已经下线或失效的实例。因此,自我保护机制只是应对短期网络问题的临时解决方案,当问题解决后,Eureka服务器会自动退出自我保护模式,重新恢复正常的剔除机制。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

在代码层面,SelfPreservationFilter定期计算心跳续约失败的比例,根据配置启动或关闭自我保护模式。SelfPreservationFilter 是一个在后台运行的线程,定期检查注册表中的实例健康状态。它会周期性地计算心跳续约失败的比例,当心跳续约失败比例超过一定阈值时,会启动自我保护模式,以防止错误地移除正常的服务实例。如果心跳续约失败比例降低到一定程度,会关闭自我保护模式。具体功能包括:iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

  • 统计心跳续约失败比例:calculateThresholdBreachCount 方法统计失败的心跳续约比例。
  • 启动/关闭自我保护模式:disable 和 enable 方法分别用于启动和关闭自我保护模式。

iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

二、Eureka客户端

iRz28资讯网——每日最新资讯28at.com

在微服务应用启动时,Eureka客户端将自身的实例信息注册到Eureka服务器,并从服务器获取其他服务实例信息,实现服务的发现和负载均衡。它包括DiscoveryClient(服务发现客户端)、InstanceInfo(实例信息)、EurekaHttpClient(Eureka HTTP客户端)三个核心组件,下面详细介绍每个组件:iRz28资讯网——每日最新资讯28at.com

1.DiscoveryClient(服务发现客户端)

iRz28资讯网——每日最新资讯28at.com

从Eureka服务器获取服务实例信息,并缓存在本地。它提供了getInstances、getServices等方法,支持负载均衡和服务发现。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

其中getInstances 方法用于在服务调用前获取特定服务的所有实例信息,实现动态的服务发现。getNextServerFromEureka 方法在服务调用时被调用,实现负载均衡逻辑,选择要调用的服务实例;而refreshRegistry 方法定期刷新注册表信息,以确保实例信息的最新性。iRz28资讯网——每日最新资讯28at.com

2.InstanceInfo(实例信息)

iRz28资讯网——每日最新资讯28at.com

在应用启动时,Eureka客户端创建InstanceInfo对象,包含实例的元数据。它在服务实例启动时创建并初始化,存储了该实例的基本信息,如实例ID、主机名、端口和状态。它通过HTTP请求将元数据注册到Eureka服务器。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

3.EurekaHttpClient(Eureka HTTP客户端)

iRz28资讯网——每日最新资讯28at.com

它用于客户端与Eureka服务器的通信,发送注册、续约、取消注册等HTTP请求,获取注册表信息。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

其中:iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

  • register 方法在服务实例启动时调用,向Eureka服务器注册实例信息。
  • renew 方法定期发送心跳续约请求,保持实例的健康状态。
  • cancel 方法在服务实例关闭或取消注册时调用,向Eureka服务器发送取消注册请求。
  • getInstances 方法在服务发现过程中被调用,向Eureka服务器请求特定服务的实例信息。
  • refreshRegistry 方法周期性地刷新注册表信息,以保持信息的准确性。

三、流程梳理

iRz28资讯网——每日最新资讯28at.com

下面笔者大概梳理了下几个主要流程:iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

1、服务注册流程iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

  • Eureka客户端创建InstanceInfo对象,包含实例元数据。
  • 客户端通过HTTP请求将InstanceInfo注册到Eureka服务器的InstanceRegistry。
  • LeaseManager创建租约,管理续约周期和到期时间。

iRz28资讯网——每日最新资讯28at.com

2、心跳续约流程iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

  • Eureka客户端定期发送心跳续约请求,维持租约有效。
  • LeaseManager更新租约到期时间,确保租约不会过期。
  • Eureka服务器根据心跳续约来监测实例的健康状态。

iRz28资讯网——每日最新资讯28at.com

3、服务发现与负载均衡流程iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

  • Eureka客户端通过DiscoveryClient获取其他服务实例信息。
  • 客户端根据负载均衡策略选择一个实例。
  • 客户端发起HTTP请求,实现服务调用和负载均衡。

四、实例演示

iRz28资讯网——每日最新资讯28at.com

现在,让我们通过实际演示来了解如何使用Eureka服务端和客户端。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

1、Eureka服务端演示:iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

创建Eureka Server:首先,创建一个Spring Boot项目,并添加Eureka Server依赖。iRz28资讯网——每日最新资讯28at.com

配置文件:在application.yml中,进行基本的配置,如端口和Eureka Server配置。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

启动类:创建启动类,并添加@EnableEurekaServer注解。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

运行应用:启动Eureka Server应用,访问http://localhost:8761,将看到Eureka的控制台。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

2、Eureka客户端演示:iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

  • 创建Eureka Client:创建另一个Spring Boot项目,并添加Eureka Client依赖。
  • 配置文件:在application.yml中,配置Eureka Client信息。

iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

创建Controller:创建一个简单的Controller用于演示服务调用。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

启动类:创建启动类,并添加@EnableDiscoveryClient注解。iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

图片图片iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

  • 运行应用:启动Eureka Client应用,访问http://localhost:8761,将看到Eureka的控制台,显示有一个已注册的客户端。
  • 服务调用:在浏览器中访问http://localhost:8080/hello,将会调用Eureka Client的Controller方法,并得到响应。

iRz28资讯网——每日最新资讯28at.com

Netflix Eureka在微服务架构中扮演着重要角色,支持服务发现和注册。Eureka的底层实现涵盖了服务注册、心跳续约、自我保护机制、服务发现和负载均衡等关键功能。通过深入代码层面的分析,我们可以更清晰地理解这些功能是如何在底层实现的。 iRz28资讯网——每日最新资讯28at.com

iRz28资讯网——每日最新资讯28at.com

作者介绍:

波哥,互联行业从业10余年,先后担任项目总监及架构师。目前专攻技术,喜欢研究技术原理。技术全面,主攻Java,精通JVM底层机制及Spring全家桶底层框架原理,熟练掌握当前主流的中间件、服务网格等技术原理。iRz28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-15480-0.html微服务设计必看:深度解析Netflix Eureka的底层实现

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 数据结构与算法绪论

下一篇: 并发的查询请求增加时,数据架构部分如何做主从分离?

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    1、前言在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现“美团直播”的固定入口。在直播聚合页面,外卖“神枪手”直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 首发天玑9200+ iQOO Neo8系列发布首销售价2299元起

    2023年5月23日晚,iQOO Neo8系列正式发布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro强悍登场,限时售价3099元起;价位段最强性能手机iQOO Neo8同期上市
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主“七王”在群里介绍一些刷单赚
Top