【问题标题】:Do I include Front-end (HTML/Javascript) as a separate Microservice [closed]我是否将前端(HTML/Javascript)作为单独的微服务包含在内 [关闭]
【发布时间】:2020-10-07 18:34:33
【问题描述】:

我将在微服务架构中使用 Angular 和 Spring Bootstrap:

1) 我是否将 Angular 模块作为自己的微服务?

2)如果第一个问题是真的,所有前端微服务是运行在同一个AWS实例上还是分别运行?

【问题讨论】:

  • 您好,有没有适合您的答案?如果是这样,您介意接受“答案”吗?这将有助于我们和未来的访客。 meta.stackexchange.com/questions/5234/…。如果没有,请告诉我们缺少什么。

标签: java angular spring-boot microservices netflix-eureka


【解决方案1】:

答案

1) 我是否将 Angular 模块作为自己的微服务?

,如果 Angular 模块由“静态”内容组成和/或不需要应用程序服务器。例如,“静态”是指纯 HTML/javascript,而不是对另一个服务或后端的单个 AJAX/SOAP/REST 调用。

,如果 Angular 应用程序是轻量级的可独立部署的 Web 应用程序 (HTML+JS+WebServices)。

,如果您决定将 Angular+SpringBoot 组合“转变”为微服务。参照。解释如下。

2)如果第一个问题是真的,所有前端微服务都运行吗 在同一个 AWS 实例上还是分开?

视情况而定。参照。解释如下。


为什么

我认为回顾微服务架构中微服务的真正特征非常重要。为此,我将从维基百科中引用一些有趣的部分(以及其他部分):

  • 微服务架构中的服务可独立部署
  • 服务是围绕业务能力组织的
  • 微服务不是单一应用程序中的一个层。相反,它是一个独立的业务功能,具有清晰的接口,并且可以通过自己的内部组件实现分层架构
  • 主要优势有:模块化、可扩展性(尤其是横向)、集成和交付(CI、CD)

因此,严格定义微服务的不是技术(Angular、Spring Boot)或层(后端、前端)。


相反,您必须问自己:

  1. 您希望达到的粒度级别
  2. 我想让什么可独立部署(或容器化)
  3. 我打算如何扩展?
  4. 我想如何提供更新?

    (非详尽列表...)

最后,你可能会想出至少两种可能性:

  • (1) 假设您的整个 Angular + Spring Boot(应用程序)形成了一个可独立部署的微服务,以便最终可以容器化并在负载均衡器后面的多个 AWS 实例上运行从集群功能中获益。

  • (2) 假设您的 Angular 应用 (JS) 及其服务(即 REST)形成一个微服务,您可以将其与其他微服务一起部署在任何 Web/应用程序服务器上。 p>

案例 (1) 可能类似于:

AWS Instance1
  Docker container
     SpringBoot + Angular app (JS+WS)
AWS Instance2
  Docker container
     SpringBoot + Angular app (JS+WS)

而 case (2) 类似于:

AWS Instance1
  SpringBoot
    Angular app1 (JS+WS)
    Angular app2 (JS+WS)
AWS Instance2
  SpringBoot
    Angular app1 (JS+WS)
    Angular app2 (JS+WS)

在最新示例中,我将两个相似的微服务放在一起(app1 和 app2)来说明共存的可独立部署的业务单元。

其他技术组合(也有实际依赖关系!)是可能的。一个例子:

AWS.Instance1 (Front-End)
   ApplicationServer
     MicroService1 (facing REST-API)
     MicroService2 (AngularJS app + REST)
AWS.Instance2 (Back-end)
   ApplicationServer
     MicroService3 (business/core REST-API)
     ...

这里的前端 (MS2) 使用一个可以调用后端函数 (MS3) 的 REST 外观 (MS1)。单独更新每个组件并进行扩展很容易,您必须创建两个具有相似布局的新 AWS 实例。只是一种味道...

您会注意到,可独立部署并不意味着任何依赖。 (微)服务之间会(并且经常)存在逻辑/功能依赖关系,因此这里的关键字是独立的-deployable

希望对你有帮助!

【讨论】:

    【解决方案2】:

    我是否将 Angular 模块作为自己的微服务?

    您的 Angular 模块是前端,需要单独的应用程序服务器 node,因此您需要单独运行它。

    如果第一个问题是真的,是否所有前端微服务都运行在 同一个 AWS 实例还是单独的?

    对于这两种服务(angular + spring-boot),您需要不同的应用程序服务器而不是不同的实例,因此您可以将这两种服务部署在侦听不同端口的单个 AWS 实例上。

    例如angular-app 在 3000 和 spring-boot 在 8080(这是你的选择)

    希望这些信息能满足您的需求。

    【讨论】:

      猜你喜欢
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 2018-10-14
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多