春云:ZUUL + Eureka + NodeJS

我是Spring-Boot(Cloud)的新手,正在开发一个新项目。
我们的项目devise师已经devise了这样的新应用程序:

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

在这里输入图像说明 现在,下面是我迷惑的事情,我不能问他,因为他比我还高。

  1. 我需要单独的ZUUL代理服务器吗? 我的意思是,使用与ZUUL服务器相同的前端应用程序有哪些优缺点?
  2. MicorService-1如何与Node的MicroService-1进行通信? 一些博客build议Sidecar 。 但是,为什么呢? 因为我可以直接从微服务-1调用NodeJS-1的ReST api。
  3. (我知道,这是非常困难的猜测,但仍然问)NodeJS服务(这不是传统的服务)是假设调用一些第三方API或从数据库检索数据。
    现在,我不明白为什么我们需要NodeJS代码? 为什么我们不能在用Java编写的微服务中做同样的事情?

任何一个曾经从事过类似工作的人都能看出我的疑惑吗?

我没有你想要解决的问题的完整背景,因此下面的答案是相当一般的,但仍然可能是有用的:

我需要单独的ZUUL代理服务器吗? 我的意思是,使用与ZUUL服务器相同的前端应用程序有哪些优缺点?

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

这里的主要思想是,你可以有数百甚至数千的微服务(如亚马逊,Netflix等),他们可以分散在不同的机器或数据中心。 执行你的API消费者(在你的情况下是Angular 2)来记忆每个微服务的所有可能的位置是非常愚蠢的。 最好有一个知道其下的所有服务的API网关,这样你的客户就可以打电话给你的网关,并通过一个地方访问底层服务。 在你的系统中也有一个将你的客户从你的服务中分离出来,所以它可以独立发展。

另一个好处是您可以在一个地方访问控制,日志logging,安全等。 而且,顺便说一下,我认为你在架构中缺less了另一件事 – 它是授权服务器。 OAuth 2.0是构build微服务安全的常用方法。

MicorService-1如何与Node的MicroService-1进行通信? 一些博客build议Sidecar。 但是,为什么呢? 因为我可以直接从Microservice-1调用NodeJS-1的ReST API。

我想你可以使用Sidecar,但我从来没有使用它。 我想,“为什么”这个问题与发现服务(Eureka在你的架构中)有关。 你不能直接调用微服务NodeJS-1,因为可能有几个NodeJS-1实例,哪一个要调用? 此外,您无法知道服务在任何特定时间点是否已closures或存活。 这就是为什么我们使用发现服务像尤里卡 – 他们处理所有这些。 当任何服务已经开始时,它必须在尤里卡注册。 所以,如果你已经启动了几个NodeJS-1的实例,它们都将在Eureka中注册,并且每当Microservice-1想要调用NodeJS-1服务时,它都会向Eureka询问NodeJS-1的活动实例的位置。 服务然后select哪一个打电话。

(我知道,这是非常困难的猜测,但仍然问)NodeJS服务(这不是传统的服务)是假设调用一些第三方API或从数据库检索数据。 现在,我不明白为什么我们需要NodeJS代码? 为什么我们不能在用Java编写的微服务中做同样的事情?

我只能假定NodeJS已经被选中,因为它具有IO操作的出色性能,包括在调用第三方服务时可能会出现的HTTP请求。 我对此没有任何其他理性的解释。

一般来说,微服务可以让你用不同的语言编写你的微服务,而且确实很酷,因为每种语言都比另一种语言解决了一些问题。 另一方面,这个决定应该小心谨慎地回答这个问题 – “我们真的需要一个新的语言来解决问题X吗?”。