乐趣区

关于spring-cloud:SpringCloud升级之路20200x版16Eureka架构和核心概念

本系列代码地址:https://github.com/HashZhang/…

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

Eureka 的设计比拟玲珑,没有简单的同步机制 (例如 Nacos 基于 Raft,Zookeeper 基于 Zab), 也没有简单的长久化机制,集群关系只是简略的将收到的客户端申请转发到集群内的其余 Eureka 实例。Eureka 自身也只有注册核心的性能,不像其余品种的注册核心那样,将注册核心和配置核心合在一起,例如 Consul 和 nacos。

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

首先,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 的实例配置。

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

退出移动版