什么是Eureka服务、Eureka Client、Eureka实例和Eureka服务器

What is Eureka service, Eureka Client, Eureka instance and Eureka server

我正在通过阅读 this article 学习 spring 云 Netflix,但是我开始对本文中的不同术语感到困惑,它们是:

  1. Eureka 服务。 据我了解,这是一项普通服务(特别是微服务),运行 在唯一的 uri 上(i.e.one 每个 uri 的服务)。说 localhost:12000。可以在Eureka服务器注册。

  2. Eureka 客户端。 与 Eureka 服务相同???

  3. Eureka 服务器。 据我了解,这是我们可以检查、发现和管理我们构建的一堆微服务的服务器,通常 运行在 localhost:8761

  4. Eureka Instance.我很困惑它指的是什么,和Eureka客户端一样吗?

同样在这篇文章中,它提到配置中的eureka.client和Netflix API中的EurekaClient,它们指的是同一件事吗?

请告诉我这四个术语是什么意思,如果我错了请纠正我。谢谢!

==================================更新========== ========================

文章中说:

@EnableEurekaClient makes the app into both a Eureka "instance" (i.e. it registers itself) and a "client" (i.e. it can query the registry to locate other services).

所以看起来 Eureka 实例与 Eureka 服务相同。而Eureka Client是一个特殊的实例,可以查询其他instances/services.

我想说这些术语的使用有点含糊,这是我认为它们在文章中的意思:

  • Eureka 客户端:它可以是一个准备好工作的微服务,因此它会将自己注册到 Eureka 服务器,例如API 用于某个应用程序,或者某些应用程序,它会访问服务器并请求指向特定微服务的方向。

  • Eureka 实例:微服务的单个实例(您可以随着负载的增长添加更多相同微服务的实例,即水平扩展)。

  • Eureka Service: 貌似当你注册一个微服务为Eureka Client时,你会得到一个ID注册的Eureka Service。

  • Eureka Server:微服务可以在其中注册自己以便其他人可以发现它们的服务器。


关于您添加的更新:

Eureka Instance 不应与 Eureka Service 混淆。 Eureka Service指注册到Eureka Server上提供相同服务的一组微服务实例

关于那个@EnableEurekaClient注解,它告诉框架如下:你好Spring,我是微服务X的一个实例,所以请把我注册到Eureka服务器(用eureka.instance.* 属性),并且我还想发现其他服务,因此为我创建必要的发现客户端 bean(具有 eureka.client.* 属性)。

总而言之,这个名为@EnableEurekaClient 的注解同时做了两件事,也许这就是混淆的来源。但是 InstanceClient 确实是不同的概念,尽管它们在文章中有些互换使用。

定义


尤里卡服务器

The discovery server. It contains a registry of services and a REST api that can be used to register a service, deregister a service, and discover the location of other services.

尤里卡服务

Any application that can be found in the Eureka Server's registry and is discoverable by others. A service has a logical identifier sometimes called a VIP, sometimes called a "service id", that can refer to one or more instances of the same application.

尤里卡实例

Any application that registers itself with the Eureka Server to be discovered by others

尤里卡客户端

Any application that can discover services

问题


一个应用如何既是Eureka实例又是Eureka客户端?

应用程序通常需要使自己可供其他人使用(因此它们是实例),同时它们需要发现其他服务(因此它们是客户端)。

Eureka Client 必须是 Eureka Instance 吗?

没有。有时,应用程序没有什么可提供的,只是其他服务的调用者。通过配置 (eureka.client.register-with-eureka=false),您可以告诉它不要将自己注册为实例。因此它只是一个 Eureka 客户端,因为它只发现其他服务。

我们举个例子。

Spring-cloud-netflix-turbine 使用 Eureka 聚合来自各个微服务的指标。它需要随时知道每个微服务实例在云端的地址运行。实例数可增可减。

尤里卡服务器: Turbine 查询 Eureka 服务器以获取对注册表的访问权限。它使用注册表确定所有参与的微服务、它们要到达的终点等等。

尤里卡服务: Euerka server提供给turbine的信息(参与者微服务列表)就是服务。一个服务器可以提供多种服务。

尤里卡实例 所有希望聚合其指标的微服务都是 Eureka 实例。实例不仅可以查询注册表,还可以注册、注销、提供心跳以保持注册状态等。

尤里卡客户端 涡轮机是客户端。它仅 查询 注册表以确定 运行 个微服务实例。

我觉得他们像这张照片。

  1. Eureka 客户端注册到 Eureka 服务器。
  2. 因为一个Eureka Instance注册到Eureka Server,所以它是一个client
  3. 因为一个Eureka Service提供api给其他人,所以它可以被其他人发现,所以它是一个Instance。

来自官方documentation:

Eureka 带有两个组件 - Eureka Client 和 Eureka Server。您使用 Eureka 的架构通常会有两个应用程序

  1. Application Client 使用Eureka Client 向 应用服务。
  2. 从应用程序客户端接收请求的应用程序服务 并发回响应。

设置涉及以下内容

  1. Eureka 服务器 - 这会记录所有已注册的服务。
  2. 应用客户端的Eureka Client
  3. 应用服务的Eureka客户端

Eureka Instance表示Application客户端的单节点