当前位置:首页 > 数码 > Netflix-微服务设计必看-Eureka-的内部运作机制-深入剖析 (netflix)

Netflix-微服务设计必看-Eureka-的内部运作机制-深入剖析 (netflix)

admin4个月前 (05-08)数码28

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

Netflix Eureka 架构

Netflix Eureka 由 Eureka 服务器和 Eureka 客户端两部分构成。它们协同工作,构建了一个完整的服务发现和注册系统。

Eureka 服务器

深入剖析

Eureka 服务器负责存储和管理所有已注册的服务实例信息,保证服务发现的准确性。Eureka 服务器的核心是 InstanceRegistry、LeaseManager 和 SelfPreservationFilter。

InstanceRegistry(实例注册表)

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

LeaseManager(租约管理器)

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

  • 注册实例并创建租约:register 方法负责为新注册的实例创建租约,并将其添加到租约管理器中。
  • 续约租约:renew 方法用于更新租约的到期时间,延长租约的有效期。
  • 移除租约:cancel 方法负责在实例取消注册时移除租约。

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

SelfPreservationFilter(自我保护过滤器)

自我保护机制是 Netflix Eureka 服务器(服务端)中的一项重要功能。它旨在确保在网络抖动等异常情况下,Eureka 服务器不会过早地剔除正常运行的服务实例,从而保持服务的可用性和稳定性。当 Eureka 服务器开启自我保护机制时,它会监测心跳续约失败的实例数量。如果在某个时间段内,心跳续约失败的实例数量超过了预定的阈值,Eureka 服务器将进入自我保护模式。

在自我保护模式下,Eureka 服务器不会剔除任何正常运行的实例,以免影响整个系统的稳定性。这是为了避免在网络抖动等情况下,误判正常实例失效。需要注意的是,虽然自我保护机制保护了 Eureka 服务器上的服务注册表,但在自我保护模式下,Eureka 服务器将不再从已注册的实例中移除长时间未续约的实例,这可能会导致注册表中存在已经下线或失效的实例。因此,自我保护机制只是应对短期网络问题的临时解决方案,当问题解决后,Eureka 服务器会自动退出自我保护模式,重新

Eureka 客户端

Eureka 客户端是运行在各个微服务实例上的轻量级代理,负责将本实例注册到 Eureka 服务器,并定期发送心跳续约请求以维持租约。Eureka 客户端的核心是 DiscoveryClient。

DiscoveryClient

DiscoveryClient 是 Eureka 客户端的核心组件,负责与 Eureka 服务器交互,完成服务注册、续约和查询等操作。从代码层面来看,DiscoveryClient 负责发送注册请求、心跳续约请求和查询请求等 HTTP 请求,并处理 Eureka 服务器返回的响应。

总结

Netflix Eureka 作为一款开源的服务发现和注册工具,在现代分布式系统中发挥着至关重要的作用。通过深入剖析其底层实现原理,我们了解到 Eureka 服务器和 Eureka 客户端是如何协同工作,确保服务发现和注册的准确性和可靠性。这些知识对于设计和构建可扩展、高可用的微服务架构至关重要。


Eureka工作原理及快速使用

Eureka 是 Netflix 出品的用于实现服务注册和发现的工具,Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现 Eureka采用C-S的设计架构,包含Eureka Server 和Eureka Client两个组件 Applecation-server :服务提供者 Application-cliene:服务消费者 服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。 在默认配置中EurekaServer服务在一定时间(默认为90秒)没接受到某个服务的心跳连接后,EurekaServer会注销该服务。 但是会存在当网络分区发生故障,导致该时间内没有心跳连接,但该服务本身还是健康运行的情况。 Eureka通过“自我保护模式”来解决这个问题。 在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。 CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。 由于分区容错性P在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。 Zookeeper保证CP Zookeeper 为主从结构,有leader节点和follow节点。 当leader节点down掉之后,剩余节点会重新进行选举。 选举过程中会导致服务不可用,丢掉了可用行。 Eureka保证CP Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。 而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。 Eureka服务端依赖 服务端配置 将微服务注册到Eureka中 服务实例配置

docker comepose文件怎么写

使用SpringCloud构建实际的微服务架构。 基本概念:使用Docker进行集成测试混合持久化微服务架构服务发现API网关Docker使用Docker对每一个服务进行构建和部署。 使用DockerCompose在一个开发机上进行端到端的集成测试。 混合持久化混合持久化其实就是说使用多种数据库来存储。 不同的微服务实例都会使用它们自己的数据库,并通过REST服务或者消息总线来通信,举个例子,你可以使用基于以下数据库来构建微服务:Neo4j(图形化)MongoDB(文档化)MySQL(关联)微服务架构这个例子展示了如何使用微服务创建一个新的应用。 由于在项目中的每一个微服务只有一个单一的父项目。 开发者为此得到的收益是可以在本机上运行和开发每一个微服务。 添加一个新的微服务非常简单,当发现微服务时将会自动发现运行时的集群环境上。 ServiceDiscovery项目中包含两个发现服务,一个在NetflixEureka,另一个使用了ConsulfromHashicorp。 多种发现服务提供了多种选择,一个是使用(Consul)来做DNS服务集群,另一个是(Consul)基于代理的API网关。 API网关每一个微服务都关联Eureka,在整个集群中检索API路由。 使用这个策略,每一个在集群上运行的微服务只需要通过一个共同的API网关进行负载均衡和暴露接口,每一个服务也会自动发现并将路由请求转发到自己的路由服务中。 这个代理技术有助于开发用户界面,作为平台完整的API通过自己的主机映射为代理服务。 Docker实例下面的实例将会通过Maven来构建,使用Docker为每一个微服务构建容器镜像。 我们可以很优雅的使用DockerCompose在我们自己的主机上搭建全部的微服务集群。 开始构建在这之前,请先移步至项目的GitHub仓库。 pose/install/。 环境要求能够运行实例程序,需要在你的开发机上安装下面的软件:Maven3Java8DockerDockerCompose构建项目通过命令行方式来构建当前项目,在项目的根目录中运行如下的命令:$mvncleaninstall项目将会根据中的每一个项目声明中下载相应的依赖jar包。 每一个服务都将会被构建,同时Maven的Docker插件将会自动从本地DockerRegistry中构建每一个容器镜像。 Docker将会在构建成功后,根据命令行运行mvncleaninstall来清除相应的资源。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: 微服务

“Netflix-微服务设计必看-Eureka-的内部运作机制-深入剖析 (netflix)” 的相关文章

单体与微服务的技术抉择-拆分还是整合 (单体微服务架构是什么意思)

单体与微服务的技术抉择-拆分还是整合 (单体微服务架构是什么意思)

作者|AshleyDavis 译者|明知山 筹划|丁晓昀 继续之战:单体架构与微服务 随着亚马逊云科技在他们的官博中宣称他们丢弃了微服务并回归单体架构,单体架构与微服务之间...

微服务容量规划的最佳实践-确保应用程序的高可用性和性能 (微服务需要多少内存)

微服务容量规划的最佳实践-确保应用程序的高可用性和性能 (微服务需要多少内存)

维护众多的服务需要巨大的努力,手动操作已不再可行。以微博的动态推送功能为例,仅远程过程调用(RPC)服务就接近40种。这些服务接口的性能和需求各不相同,一些接口虽然处理请求量大,但响应迅速,称为轻...

Netflix-Ribbon-分布式微服务架构的负载均衡神器-深入剖析 (netflix)

Netflix-Ribbon-分布式微服务架构的负载均衡神器-深入剖析 (netflix)

在现代分布式微服务架构中,负载均衡是保证系统高可用、高性能的关键组件之一。Netflix Ribbon 作为 Netflix 开源的负载均衡库,为微服务架构提供了强大的负载均衡能力,极大地促进了微...

稳如泰山!-开发微服务眼花缭乱-掌握这9个最佳实践 (稳如泰山心不乱打一最佳生肖)

稳如泰山!-开发微服务眼花缭乱-掌握这9个最佳实践 (稳如泰山心不乱打一最佳生肖)

微服务最佳实践:构建高效且复杂的生态系统 微服务架构已成为现代软件开发中最流行和先进的架构模式之一。它通过将应用程序分解为独立的、松散耦合的服务,实现了对解决方案的解耦,从而促进了持续交付和开发。...

微服务开发的九个最佳实践 (微服务开发的首选框架)

微服务开发的九个最佳实践 (微服务开发的首选框架)

微服务最佳实践:构建高效且可维护的架构 微服务架构作为服务器端代码开发和管理方式的演变,对软件开发产生了重大影响。遵循最佳实践对于减轻其固有复杂性至关重要,确保有效和可维护的微服务生态系统。 1...

辞别繁琐通讯和部署-Istio-微服务开发的终极利器-拥抱高效微服务之旅 (辞别繁琐通讯稿怎么写)

辞别繁琐通讯和部署-Istio-微服务开发的终极利器-拥抱高效微服务之旅 (辞别繁琐通讯稿怎么写)

引言 在前面的解说中,咱们曾经提及了微服务的一些弊病,并引见了Istio这样的处置打算。那么,关于咱们开发人员来说,Istio终究会带来哪些改革呢?当天咱们就来简明讨论一下! Kube...