Spring Cloud: ZUUL + Eureka + NodeJS

5

我是Spring-Boot(Cloud)的新手,将要开始一个新项目。
我们的项目架构师设计了这个新应用程序:

  1. 一个使用Angular-2的前端Spring boot应用程序(也是微服务)。
  2. 一个Eureka服务器,其他微服务将连接到它。
  3. ZUUL代理服务器,它将连接到前端和微服务。

enter image description here 现在,以下是我困惑的事情,我不能问他,因为他比我资深:

  1. 我是否需要单独的ZUUL代理服务器?我的意思是,使用相同的前端应用程序作为ZUUL服务器的利弊是什么?
  2. MicorService-1如何与Node的MicroService-1通信?一些博客建议使用Sidecar。但是,为什么呢?因为我可以直接从Microservice-1调用NodeJS-1的ReST api。
  3. (我知道,这很难猜测,但还是要问)NodeJS服务(不是旧服务)应该调用某些第三方api或从数据库中检索数据。
    现在,我不明白的是为什么我们需要NodeJS代码?为什么不能在Java编写的微服务中完成相同的操作?

有没有谁曾经遇到过类似情况并能解答我的疑惑?

1个回答

10

我不清楚您要解决的问题的全部背景,因此以下答案比较通用,但仍然可能有用:

我是否需要拥有单独的ZUUL代理服务器?我的意思是,使用相同的前端应用程序作为ZUUL服务器的利弊是什么?

是的,您需要一个单独的API网关服务,可以是Zuul(或其他网关,例如tyk.io)。

这里的主要思想是,您可以拥有数百甚至数千个微服务(例如Amazon、Netflix等),它们可以分散在不同的机器或数据中心。强制API消费者(在您的情况下是Angular 2)记忆每个微服务的所有可能位置是非常愚蠢的。最好有一个API网关,它知道其下所有服务,这样您的客户端就可以调用您的网关,并通过一个单一的地方访问底层服务。此外,在系统中有一个API网关将使您的客户端与您的服务解耦,因此可以独立地对其进行演进。

另一个好处是,您可以在一个单一的地方拥有访问控制、日志记录、安全性等功能。顺便说一句,我认为您的架构中缺少一件事——授权服务器。构建微服务安全性的常见方法是OAuth 2.0

MicorService-1将如何与Node的MicroService-1通信?有些博客建议使用Sidecar。但再次问一下,为什么?因为我可以直接从Microservice-1调用NodeJS-1的ReST API。

我认为您可以使用Sidecar,但我从未使用过。我想问题“为什么”与发现服务(在您的架构中是Eureka)有关。

由于可能有几个NodeJS-1的实例,你无法直接调用微服务NodeJS-1,该调用哪一个?此外,在任何给定时间点,您都无法知道服务是挂起还是在线。这就是为什么我们使用Eureka等发现服务来处理所有这些问题。当任何给定服务启动时,它必须在Eureka中注册自己。因此,如果您启动了几个NodeJS-1实例,则它们都将在Eureka中注册,并且每当微服务1想要调用NodeJS-1服务时,它都会向Eureka请求NodeJS-1活动实例的位置。然后服务选择要调用哪个实例。
(我知道,这很难猜测,但还是问一下)不是传统服务的NodeJS服务应该调用某些第三方api或从DB检索数据。 现在,我没有弄清楚的是为什么我们需要NodeJS代码?为什么不能在Java编写的微服务中执行相同的操作?
我只能假设选择NodeJS是因为它在IO操作方面具有出色的性能,包括调用第三方服务时可能会用到的HTTP请求。我没有其他合理的解释。
总的来说,微服务可以让您将微服务编写成不同的语言,这确实很酷,因为每种语言都比另一种更好地解决了一些问题。另一方面,这个决定应该谨慎地做出,并回答以下问题 -“我们真的需要在堆栈中添加新语言来解决问题X吗?”

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