Eureka服务、Eureka客户端、Eureka实例和Eureka服务器是什么?

60
我正在阅读这篇文章学习Spring Cloud Netflix。然而,我开始对文章中的术语感到困惑,它们是:
  1. Eureka服务。 据我理解,它是运行在唯一URI(即每个URI一个服务)上的普通服务(特别是微服务)。例如: localhost:12000。可以将其注册到Eureka服务器中。

  2. Eureka客户端。 和Eureka服务是相同的吗?

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

  4. Eureka实例。 我对它所指的含义感到困惑,与Eureka客户端相同吗?

此外,在这篇文章中,它提到了配置文件中的eureka.client和Netflix API中的EurekaClient,它们是指同一个东西吗?
请告诉我这四个术语的含义并纠正我如果有错误。谢谢!
==================================UPDATE==================================
在文章中它说:

@EnableEurekaClient将应用程序变成Eureka的“实例”(即它注册自己)和“客户端”(即它可以查询注册表来查找其他服务)。

所以看起来Eureka实例与Eureka服务相同,而Eureka客户端则是可以查询其他实例/服务的特殊实例。

1
官方的Netflix Eureka文档也值得一看 - https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance#high-level-architecture - Munish Chandel
5个回答

42

定义


Eureka 服务器

发现服务器,它包含了服务注册表和一个 REST API,可用于注册服务、注销服务以及查找其他服务的位置。

Eureka 服务

任何可以在 Eureka 服务器的注册表中找到且可以被其他人发现的应用程序。服务具有逻辑标识符,有时称为 VIP,有时称为“服务 ID”,可引用同一应用程序的一个或多个实例。

Eureka 实例

任何向 Eureka 服务器注册自己以供他人发现的应用程序。

Eureka 客户端

任何可以发现服务的应用程序。

问题


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

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

Eureka 客户端是否必须是 Eureka 实例?

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


2
但是为什么这个配置属性(eureka.client.register-with-eureka=false)是eureka.client.*的一部分,而不是eureka.instance.*的一部分呢? - sanny
1
很可能是因为客户端在进行注册。 - dustin.schultz
现在Spring有Eureka Server和Eureka Discovery。它们之间有什么区别? - Samet Baskıcı

38

我认为这些术语在文章中有一定的歧义,以下是我认为它们在文章中的含义:

  • Eureka客户端:它可以是一个准备好工作并向Eureka服务器注册的微服务,例如某个应用程序的API,或者某个应用程序前往服务器并请求特定微服务的地址。

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

  • Eureka服务:看起来当您将微服务注册为Eureka客户端时,您会获得一个由ID注册的Eureka服务。

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


关于您添加的更新:

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

关于那个 @EnableEurekaClient 注解,它向框架传达以下信息:嘿,Spring,我是微服务 X 的一个实例,请使用 eureka.instance.* 属性将我注册到 Eureka 服务器,并且我还想发现其他服务,因此为我创建必要的发现客户端 bean(使用 eureka.client.* 属性)。

总之,这个名为 @EnableEurekaClient 的注解执行了这两个操作,也许这就是产生混淆的地方。但是 InstanceClient 确实是不同的概念,尽管在文章中它们有些交替使用。


那么Eureka服务ID与Eureka实例还是Eureka客户端相关联? - OD Street
1
该ID与微服务相关联,不应与实例混淆。据我所知,每个实例都使用相同的ID(例如应用程序名称)进行注册,以便Eureka服务器知道哪些客户端属于每个微服务。 - ESala
我更新了答案,并添加了一些关于你的更新的评论。希望它们有用 ;) - ESala
2
我完全同意Esala的观点。最令人困惑的部分是因为有两种情况,其中单个微服务可以在Eureka服务器中注册自己的实例(顺便说一下,Eureka服务器本身也是一个微服务..),以便其他人(客户端)可以访问它,第二种情况是微服务想要与另一个微服务通信,这基本上是同时被其他人访问并充当客户端(使用通过Eureka服务器发现的另一个微服务)。 - patrykos91
1
概念中的服务ID是为了更轻松地访问(使用特殊的Eureka-aware Ribbon,您不需要知道服务URL,只需知道ID),并进行负载均衡,您只需指定ID,就可以获得所需微服务的“最佳”实例。 - patrykos91
显示剩余2条评论

7

这里输入图片描述

我认为它们看起来像这张图片。

  1. Eureka客户端向Eureka服务器注册。
  2. 因为Eureka实例向Eureka服务器注册,所以它是一个客户端。
  3. 因为Eureka服务向其他人提供api,所以它可以被其他人发现,所以它是一个实例。

现在Spring有Eureka Server和Eureka Discovery。它们之间有什么区别? - Samet Baskıcı
Eureka客户端是Eureka发现服务。 - drac_o

0

让我们举个例子。

Spring-cloud-netflix-turbine使用Eureka来聚合各个微服务的指标。它需要知道云中任何时候运行的每个微服务实例的地址。实例数量可能会上下波动。

Eureka服务器: Turbine查询Eureka服务器以获取访问注册表的权限。使用注册表,它确定所有参与的微服务、它们的终点以及更多信息。

Eureka服务: 由Euerka服务器提供给turbine的信息(参与微服务列表)就是服务。一个服务器可以提供多个服务。

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

Eureka客户端 Turbine是客户端。它只查询注册表以确定微服务的运行实例。


0

来自官方文档

Eureka有两个组件 - Eureka客户端和Eureka服务器。使用Eureka的架构通常会有两个应用程序

  1. 应用程序客户端,它使用Eureka客户端向应用程序服务发出请求。
  2. 应用程序服务,它接收来自应用程序客户端的请求并发送响应。

设置涉及以下内容

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

Eureka实例表示应用程序客户端的单个节点。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接