专栏目录
44.避免链路信息丢失做的设计(2) 41. SpringCloudGateway 基本流程讲解(1) 39. 改造 resilience4j 粘合 WebClient 9.如何理解并定制一个Spring Cloud组件 2.微服务框架需要考虑的问题 45. 实现公共日志记录 32. 改进负载均衡算法 31. FeignClient 实现断路器以及线程隔离限流的思路 13.UnderTow 核心配置 5.所有项目的parent与spring-framework-common说明 4.maven依赖回顾以及项目框架结构 30. FeignClient 实现重试 35. 验证线程隔离正确性 43.为何 SpringCloudGateway 中会有链路信息丢失 26.OpenFeign的组件 8.理解 NamedContextFactory 37. 实现异步的客户端封装配置管理的意义与设计 38. 实现自定义 WebClient 的 NamedContextFactory 23.订制Spring Cloud LoadBalancer 42.SpringCloudGateway 现有的可供分析的请求日志以及缺陷 14.UnderTow AccessLog 配置介绍 10.使用Log4j2以及一些核心配置 21.Spring Cloud LoadBalancer简介 40. spock 单元测试封装的 WebClient(下) 20. 启动一个 Eureka Server 集群 17.Eureka的实例配置 11.Log4j2 监控相关 15.UnderTow 订制 18.Eureka的客户端核心设计和配置 28.OpenFeign的生命周期-进行调用 1. 背景 41. SpringCloudGateway 基本流程讲解(2) 3.Eureka Server 与 API 网关要考虑的问题 44.避免链路信息丢失做的设计(1) 16.Eureka架构和核心概念 22.Spring Cloud LoadBalancer核心源码 27.OpenFeign的生命周期-创建代理 19.Eureka的服务端设计与配置 24.测试Spring Cloud LoadBalancer 29.Spring Cloud OpenFeign 的解析(1) 25.OpenFeign简介与使用 33. 实现重试、断路器以及线程隔离源码 40. spock 单元测试封装的 WebClient(上) 7.从Bean到SpringCloud 12.UnderTow 简介与内部原理 6.微服务特性相关的依赖说明 34.验证重试配置正确性 36. 验证断路器正确性

16.Eureka架构和核心概念

unknown
• 阅读 1253

16.Eureka架构和核心概念

本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford

16.Eureka架构和核心概念

Eureka 目前 1.x 版本还在更新,但是应该不会更新新的功能了,只是对现有功能进行维护,升级并兼容所需的依赖。 Eureka 2.x 已经胎死腹中了。但是,这也不代表 Eureka 就是不能用了。如果你需要一个简便易于部署的注册中心,Eureka 还是一个很好的选择。云服务环境中,基本上所有实例地址和微服务名称都在不断变化,也并不太需要 Eureka 所缺少的持久化特性。当你的集群属于中小规模的时候(节点小于 1000 个), Eureka 依然是一个不错的选择。当你的集群很大的时候,Eureka 的同步机制可能就限制了他的表现。

Eureka 的设计比较小巧,没有复杂的同步机制(例如 Nacos 基于 Raft,Zookeeper 基于 Zab),也没有复杂的持久化机制,集群关系只是简单的将收到的客户端请求转发到集群内的其他 Eureka 实例。Eureka 本身也只有注册中心的功能,不像其他种类的注册中心那样,将注册中心和配置中心合在一起,例如 Consul 和 nacos。

16.Eureka架构和核心概念

这里我们忽略所有的 AWS 相关的术语以及配置还有相关逻辑处理。

Eureka 中的术语:

  1. Eureka 实例:每个注册到 Eureka 上面的实例就是 Eureka 实例
  2. Eureka 实例状态:包括 UP(可以处理请求),DOWN(健康检查失败,不能正常处理请求),STARTING(启动中,不能处理请求),OUT_OF_SERVICE(人为下线,暂时不处理请求),UNKNOWN(未知状态)。
  3. Eureka 服务器:作为注册中心运行,主要提供实例管理功能(处理实例注册(register)请求、处理实例注销(cancel)请求、处理实例心跳(renew)请求、内部处理实例过期(evict))、实例查询功能(各种查询实例信息的接口,例如通过 AppName 获取实例列表,通过实例 id 获取实例信息等等)
  4. Eureka 服务器集群:Eureka 服务器的集群,每个 Eureka 服务器都配置了区域以及可用区,Eureka 服务器收到的客户端请求会转发到同一区域内的其他 Eureka 服务器,可以配置优先发到同一可用区的 Eureka 服务器。非同一区域内 Eureka 服务器,通过定时拉取的方式进行同步。
  5. Eureka 客户端:请求 Eureka 服务器的客户端。封装发送实例注册(register)请求、实例注销(cancel)请求和实例心跳(renew)请求。
  6. VIP(或者是 Virtual Hostname): Eureka 中可以通过两种方式获取实例,一个是通过服务名称,另一种是通过 VIP。每个实例都有服务名称,以及 VIP。Eureka 服务器中的索引方式是以服务名称为 key 的索引,我们也可以通过遍历所有实例信息的方式通过 VIP 字符串匹配获取相关的实例。在 Spring Cloud 体系中,一个实例的 VIP、SVIP(其实就是 Secure VIP,即 https 的地址)以及服务名称都是 spring.application.name 指定的服务名称。

16.Eureka架构和核心概念

16.Eureka架构和核心概念

首先,Service A 通过 Eureka Client 发送注册请求(Register)到同一可用区的 Eureka Server 1。之后通过发送心跳请求(Renew)到这个 Eureka Server 1. Eureka Server 1 收到这些请求的时候,会处理这些请求并将这些请求转发到其他的集群内的 Eureka Server 2 和 Eureka Server 3. Eureka Server 2 和 Eureka Server 3 不会再转发收到的 Eureka Server 1 转发过来的请求。然后,Service B 还有 Service C 通过 Eureka 获取到了 Service A 的位置,最后调用了 Service A。

对于本地没有查询到的微服务,Eureka Server 还会从远程 Region 的 Eureka Server 去获取,例如这里对于 Service D,本地没有查到,Eureka Server 会返回远程 Region 的 Service D 的实例。由于本地有 Service A,所以肯定不会返回远程 Region 的 Service A 的实例。并且,本地是定时拉取的远程 Region 的 Service 列表,并不是每次查询的时候现查询的。

一般的,微服务之间的互相调用,并不经过 Eureka,也不会涉及到 Eureka 客户端了,而是通过负载均衡器调用,这个我们后面就会提到。

16.Eureka架构和核心概念

我们这一节详细分析了 Eureka 的架构,以及其中的核心概念。下一节,我们将开始介绍我们微服务的注册中心 Eureka 的实例配置。

微信搜索“我的编程喵”关注公众号,每日一刷,轻松提升技术,斩获各种offer

16.Eureka架构和核心概念

点赞
收藏
评论区
推荐文章

暂无数据

unknown
unknown
Lv1
男 · rrrr · rrrrrrrr
rrrrr
文章
0
粉丝
17
获赞
0
热门文章

暂无数据