前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud升级之路2020.0.x版-16.Eureka架构和核心概念

SpringCloud升级之路2020.0.x版-16.Eureka架构和核心概念

作者头像
干货满满张哈希
发布2021-12-29 15:54:36
1960
发布2021-12-29 15:54:36
举报

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

image
image

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

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

image
image

这里我们忽略所有的 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 指定的服务名称。
image
image
image
image

首先,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 客户端了,而是通过负载均衡器调用,这个我们后面就会提到。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档