【问题标题】:Spring Boot - Different systems( eureka , zuul, ribbon, nginx,) used for what?Spring Boot - 不同的系统(eureka、zuul、ribbon、nginx)用于什么?
【发布时间】:2019-03-20 22:30:11
【问题描述】:

我一直在使用 spring,现在想学习 spring boot 和微服务。我了解microservice 的全部内容以及它是如何工作的。在浏览文档时,我遇到了许多用于开发 microservicesspring boot 的东西,我对此感到非常困惑。

我列出了下面的系统和问题:

  1. Netflix Eureka - 我知道这是服务发现平台。 所有services 将注册到eureka 服务器和所有 microserviceseureka 客户。现在我的疑问是,没有 API网关这个服务注册表有什么用吗?这是 了解服务注册中心的实际使用情况。
  2. ZUULApi 网关- 我知道 ZUUL 可以用作 API 网关,它基本上是一个负载均衡器,调用适当的 请求 URL 对应的微服务。是那个假设 正确的? api 网关是否会与 Eureka 交互以获取 合适的微服务?

  3. NGINX - 我看过NGINX也可以用作API网关?那可能吗?我还阅读了一些其他地方,例如 NGINX 可以用作服务注册表,即作为 Eureka 的替代品!因此哪个是正确的? Api 网关或服务注册表或两者兼而有之?我知道nginx 是一个网络服务器,reverse proxies 可以进行强大的配置。

  4. AWS api 网关 - 这也可以用作ZUUL 的替代品吗?

  5. RIBBON - ribbon 用于什么用途?没看懂!

  6. AWS ALB- 这也可用于负载平衡。因此,如果我们有AWS ALB,我们还需要 ZUUL 吗?

请帮忙

【问题讨论】:

  • 我发现这门课程对使用 Udemy 的领域驱动设计的 Spring MicroServices In Depth 很有用。它讨论了方法、设计模式和技术(Eureka、Ribbon、Hystrix 等)

标签: amazon-web-services spring-boot nginx microservices netflix-zuul


【解决方案1】:

如果没有 API 网关,这个服务注册表有什么用吗?

是的。例如,您可以使用它来定位所有微服务的(IP 和端口)。这对于 devops 类型的工作非常有用。例如,在我参与的一个项目中,我们使用 Eureka 来查找我们微服务的所有实例并 ping 它们以了解它们的状态(/health、/info)。

我知道 ZUUL 可以用作 API 网关,它基本上是一个负载均衡器,它调用与请求 URL 对应的适当微服务。这个假设正确吗?

是的,但它可以做的更多。本质上,因为 Zuul 更像是一个框架/库,您可以将其转换为微服务,您可以对其进行编码以实现您可以提出的任何类型的路由逻辑。从这个意义上说,它非常强大。例如,假设您想根据一天中的时间或任何其他外部因素更改路线,使用 Zuul 您可以做到。

api 网关是否会与 Eureka 交互以获得适当的微服务?

是的。您将 Zuul 配置为指向 Eureka。它成为 Eureka 的客户端,甚至订阅 Eureka 以获取实时更新(哪些实例已加入或离开)。

我看过NGINX也可以用作API网关?我还阅读了一些其他地方,例如 NGINX 可以用作服务注册表,即作为 Eureka 的替代品!因此哪个是正确的? Api 网关或服务注册表或两者兼而有之?

Nginx 非常强大,可以做 API 网关类型的工作。但是有一些主要的区别。 AFAIK,微服务无法在 Nginx 中动态注册,如果我错了,请纠正我……就像 Eureka 一样。其次,虽然我知道 Nginx 是高度(非常高度)可配置的,但我怀疑它的配置能力并不接近 Zuul 的路由能力(因为在 Zuul 中你可以使用整个 Java 语言来编写你的路由逻辑)。可能存在与 Nginx 一起使用的服务发现解决方案。所以 Nginx 会处理路由等,但服务发现仍然需要解决方案。

这也可以作为ZUUL的替代品吗?

是的,AWS API Gateway 可以用作 Zuul 的替代品。这里的问题,就像 Nginx 一样,是服务发现。 AWS API Gateway 可让您将逻辑应用到您的路由……虽然不像 Zuul 那样开放。

用于什么色带?

虽然您可以直接使用 Ribbon 库,但大多数情况下将其视为 Zuul 的内部依赖项。它帮助 Zuul 完成它所做的简单负载平衡。请注意,此项目处于维护模式,不再推荐。

这也可以用于负载平衡。因此,如果我们有 AWS ALB,我们还需要 ZUUL 吗?

您可以使用 ALB 和 ECS(弹性容器服务)来代替 Eureka/Zuul。 ECS 将为您处理服务发现并将特定服务的所有实例映射到目标组。然后,您的 ALB 路由表可以根据简单的路由规则路由到目标组。 ALB 中的路由规则虽然非常简单,但会随着时间的推移而改进。

【讨论】:

  • 感谢您的回答。一个小小的疑问。所以我可以使用 NGINX 作为 API 网关,但我们仍然需要 EUREKA 来进行服务发现,对吧?如果是这样的话,NGINX 可以通过任何方式与 EUREKA 进行交互。由于netflix开发的ZUUL和EUREKA之间显然会有通道。 nginx呢?
  • 关于服务发现和 Nginx 看看这篇文章:nginx.com/blog/… 它提到了 Eureka 和其他可用于 Nginx 原生缺乏的服务发现的选项。
  • 一个问题。如果 nginx 可以做负载均衡,为什么同一个技术栈里的人还要用 Ribbon?
【解决方案2】:

可用于microservices工作的不同系统,与spring boot一起提供:

  1. 尤里卡: 可能是第一个 UP 的微服务。 Eureka 是一个服务注册中心,意味着它知道哪些微服务正在运行以及在哪个端口上运行。 Eureka 正在部署为一个单独的应用程序,我们可以使用 @EnableEurekaServer 注释和 @SpringBootAPplication 使该应用程序成为一个 eureka 服务器。所以我们的 eureka 服务注册已启动并正在运行。从现在开始,所有微服务都将通过在所有部署的微服务中使用@EnableDiscoveryClient 注释和@SpringBootAPplication 注册到这个尤里卡服务器中。

  2. Zuul:ZUUL 是 load balancerrouting 应用程序和 reverse proxy 服务器。那是在我们使用 apache 进行反向代理之前,现在,对于微服务,我们可以使用 ZUUL。优点是,在 ZUUL 中,我们可以以编程方式设置配置,例如 /customer/* 是否像这样访问这个微服务。 ZUUL 也可以充当负载均衡器,它将以循环方式选择适当的微服务。那么ZUUL是怎么知道微服务细节的呢,答案是eureka。它将与eureka 一起工作以获取微服务详细信息。而且实际上这个ZUUL也是一个Eureka客户端,我们应该用@EnableDiscoveryClient标记,这就是这2个应用(Eureka和zuul)的链接方式。

  3. 功能区: 用于负载平衡的功能区。这在 ZUUL 中已经可用,其中 zuul 使用 Ribbon 进行负载平衡。微服务由属性文件中的服务名称标识。如果我们在不同的端口上运行一个微服务的 2 个实例,这将被 Eureka 识别,并与 Ribbon(Inside zuul) 一起,以平衡的方式重定向请求。

  4. Aws ALB 、NGINX 、AWS Api 网关 等:上述所有内容都有替代方案。 Aws 拥有自己的负载均衡器、服务发现、api 网关等。不仅 AWS 所有云平台,如 Azure,都有这些。这取决于使用哪一个。

  5. 也添加一个一般性问题,这些微服务如何相互通信:使用ResttemplateFeignclient 可以调用实际的rest API,或者可以调用Rabbit MQ 等消息队列可以使用。

【讨论】:

  • Resttemplate 的注意事项:从 5.0 开始,该类处于维护模式,仅接受较小的更改和错误请求。请考虑使用 org.springframework.web.reactive.client.WebClient,它具有更现代的 API 并支持同步、异步和流式处理方案。 docs.spring.io/spring-framework/docs/current/javadoc-api/…
  • 在 eureka github 页面上,他们说它也可以用于负载平衡。那么,你知道为什么 Spring Cloud 有另一个依赖,比如 Ribbon 或 Zuul 吗?这是链接顺便说一句:github.com/Netflix/eureka
【解决方案3】:

Eureka 可以和NGINX 结合使用,组合起来非常强大。

我在AWS EC2 环境中使用它。以前我使用的是Spring Cloud Gateway 而不是NGINX,之前是Zuul。根据负载 Spring Cloud Gateway 在 AWS t3.mediumt3.large 实例上运行。迁移到 NGINX 后,我正在使用 t3.micro(内存少 8 倍)实例。我几乎可以肯定我可以使用t3.nano(内存减少16 倍)实例来解决问题,但我想确保不会有任何意外。

以下是将 NGINX 插入 Eureka 生态系统所需执行的高级步骤。您可以在NGINX With Eureka Instead of Spring Cloud Gateway or Zuul 文章中找到更多详细信息。

  • 创建一个服务,该服务可以从 Eureka 读取所有应用程序的配置并将其“转换”为 NGINX 配置。
  • 创建一个 cronjob 条目,它会在特定时间从上述服务读取配置并调用 NGINX 热重载
  • NGINX 将使用从服务和 cronjob 生成的配置,并将作为 API 网关工作

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2021-09-06
    • 2016-03-06
    • 2017-01-02
    • 2017-08-08
    相关资源
    最近更新 更多