Spring Cloud:ZUUL + Eureka + NodeJS
Posted
技术标签:
【中文标题】Spring Cloud:ZUUL + Eureka + NodeJS【英文标题】:Spring Cloud: ZUUL + Eureka + NodeJS 【发布时间】:2017-11-16 23:49:41 【问题描述】:我是 Spring-Boot(Cloud) 的新手,正在着手一个新项目。 我们的项目架构师设计了这样的新应用程序:
-
一个带有 Angular-2 的前端 Spring 引导应用程序(也是微服务)。
一个 Eureka 服务器,其他微服务将连接到该服务器。
ZUUL 代理服务器,将连接到前端和微服务。
现在,以下是我很困惑的事情,我不能问他,因为他对我来说太高级了:
-
我需要单独的 ZUUL 代理服务器吗?我的意思是,使用与 ZUUL 服务器相同的前端应用程序的优缺点是什么?
MicorService-1 将如何与 Node 的 MicroService-1 通信?一些博客建议使用Sidecar。但是,为什么?因为我可以直接从 Microservice-1 调用 NodeJS-1 的 ReST api。
(我知道,这很难猜,但仍然在问)NodeJS 服务(不是遗留服务)假设调用一些第三方 api 或从数据库中检索数据。
现在,我没有得到的是为什么我们需要 NodeJS 代码?为什么我们不能在用 Java 编写的微服务中做同样的事情?
遇到过类似情况的人能否解释一下我的疑惑?
【问题讨论】:
【参考方案1】:我没有您尝试解决的问题的完整背景,因此下面的答案很笼统,但仍然可能有用:
我需要单独的 ZUUL 代理服务器吗?我的意思是,使用与 ZUUL 服务器相同的前端应用程序的优缺点是什么?
是的,您需要一个单独的 API 网关服务,它可能是 Zuul(或其他网关,例如 tyk.io)。
这里的主要思想是您可以拥有数百甚至数千个微服务(如 Amazon、Netflix 等),它们可以分散在不同的机器或数据中心。强制您的 API 使用者(在您的情况下是 Angular 2)来记住每个微服务的所有可能位置真的很愚蠢。最好拥有一个了解其下所有服务的 API 网关,这样您的客户就可以调用您的网关并通过一个地方访问底层服务。在您的系统中也有一个将使您的客户与您的服务分离,因此可以独立发展它们。
另一个好处是您可以在一个地方进行访问控制、日志记录、安全等。而且,顺便说一句,我认为您的架构中还缺少一件事 - 它是授权服务器。为微服务构建安全性的常用方法是OAuth 2.0。
MicorService-1 将如何与 Node 的 MicroService-1 通信?一些博客建议使用 Sidecar。但是,为什么?因为我可以直接从 Microservice-1 调用 NodeJS-1 的 ReST API。
我认为您可以使用 Sidecar,但我从未使用过它。我想“为什么”这个问题与发现服务(你的架构中的尤里卡)有关。 不能直接调用微服务NodeJS-1,因为NodeJS-1可能有好几个实例,调用哪一个呢?此外,您无法知道服务在任何给定时间点是关闭还是运行。这就是我们使用像 Eureka 这样的发现服务的原因——他们处理所有这些。当任何给定的服务启动时,它必须在 Eureka 中注册自己。因此,如果您启动了多个 NodeJS-1 实例,它们都将在 Eureka 中注册,并且每当 Microservice-1 想要调用 NodeJS-1 服务时,它都会向 Eureka 询问 NodeJS-1 的活动实例的位置。然后服务选择调用哪一个。
(我知道,这很难猜,但仍然在问)NodeJS 服务(不是遗留服务)假设调用一些第三方 api 或从数据库中检索数据。 现在,我没有得到的是为什么我们需要 NodeJS 代码?为什么我们不能在用 Java 编写的微服务中做同样的事情?
我只能假设选择了 NodeJS,因为它在 IO 操作方面具有出色的性能,包括在调用 3-rd 方服务时可能会出现的 HTTP 请求。我对此没有任何其他合理的解释。
一般来说,微服务让您可以用不同的语言编写微服务,这确实很酷,因为每种语言都比另一种更好地解决了一些问题。另一方面,这个决定应该谨慎做出并回答这个问题——“我们真的需要在我们的堆栈中使用一种新语言来解决问题 X 吗?”。
【讨论】:
以上是关于Spring Cloud:ZUUL + Eureka + NodeJS的主要内容,如果未能解决你的问题,请参考以下文章
spring-cloud-Zuul学习--典型配置重新定义spring cloud实践
Spring Cloud 微服务二:API网关spring cloud zuul
最全面的改造Zuul网关为Spring Cloud Gateway(包含Zuul核心实现和Spring Cloud Gateway核心实现)
spring-cloud-zuul-ratelimit 配置