我是Spring-Boot(Cloud)的新手,正在从事一个新项目。
我们的项目架构师已经设计了这个新应用程序,如下所示:

  • 一个带有Angular-2的前端Spring Boot应用程序(也是微服务)。
  • 一台Eureka服务器,其他微服务将连接到该服务器。
  • ZUUL代理服务器,它将连接到前端和mircoservices。

  • node.js - Spring Cloud : ZUUL + Eureka + NodeJS-LMLPHP
    现在,以下是我感到困惑的事情,我不能问他,因为他对我来说太老了:
  • 我需要有单独的ZUUL代理服务器吗?我的意思是,使用与ZUUL服务器相同的前端应用程序的利弊是什么?
  • MicorService-1将如何与Node的MicroService-1通信?一些博客建议使用Sidecar。但是又为什么呢?因为我可以直接从Microservice-1调用NodeJS-1的ReST api。
  • (我知道,这很难猜测,但仍然会问)NodeJS服务(不是传统服务)应该调用某些第三方api或从数据库检索数据。
    现在,我不明白的是为什么我们根本需要NodeJS代码?为什么我们不能在用Java编写的微服务中做同样的事情?

  • 曾在类似情况下工作过的人可以阐明我的疑问吗?

    最佳答案

    我没有您要解决的问题的完整背景,因此下面的回答很笼统,但仍然可能有用:



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

    这里的主要思想是您可以拥有数百甚至数千个微服务(例如Amazon,Netflix等),并且它们可以分散在不同的机器或数据中心中。强制您的API使用者(在您的情况下为Angular 2)记住每个微服务的所有可能位置真的很愚蠢。最好拥有一个知道其下所有服务的API网关,以便您的客户可以调用您的网关,并可以通过一个地方访问基础服务。在您的系统中也拥有一个将使您的客户与您的服务脱钩,因此可以独立地发展它们。

    另一个好处是您可以在一个位置上进行访问控制,日志记录,安全性等。而且,顺便说一句,我认为您在架构中还缺少一件事-它是授权服务器。构建微服务安全性的常用方法是OAuth 2.0



    我认为您可以使用Sidecar,但我从未使用过。我想问题“为什么”与发现服务(您的体系结构中的 Eureka )有关。
    您不能直接调用微服务NodeJS-1,因为可能有多个NodeJS-1实例,要调用哪个?此外,您无法确定在任何给定时间点服务是否已关闭或处于事件状态。这就是为什么我们使用Eureka之类的Discovery Services的原因-它们可以处理所有这些。当任何给定的服务启动时,它必须在Eureka中进行注册。因此,如果您已经启动了几个NodeJS-1实例,它们都将在Eureka中注册,并且每当Microservice-1想要调用NodeJS-1服务时,它都会向Eureka询问NodeJS-1的事件实例的位置。然后,服务选择调用哪个。



    我只能假设选择NodeJS是因为它在IO操作(包括调用3方服务时可能出现的HTTP请求)的IO操作方面具有出色的性能。我对此没有其他理性的解释。

    通常,微服务使您可以用不同的语言编写微服务,这确实很酷,因为每种语言都比其他语言更好地解决了一些问题。另一方面,应谨慎做出此决定并回答以下问题:“我们是否真的需要在堆栈中使用新语言来解决问题X?”。

    10-07 12:40