我是否将前端 (HTML/Javascript) 作为单独的微服务包含在内

Do I include Front-end (HTML/Javascript) as a separate Microservice

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

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

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

Do I place the Angular module as its own microservice?

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

If the first question is true, do all front-end microservices run on the same AWS instance or separately?

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

例如angular-app on 3000 and spring-boot on 8080(由您选择)

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

回答

1) Do I place the Angular module as its own microservice?

,如果Angular模块由"static"内容组成and/or呢不需要应用程序服务器。 "static" 我的意思是,例如,纯 HTML/javascript 而不是对另一个服务或后端的单个 AJAX/SOAP/REST 调用。

,如果angular应用程序是轻量级独立部署的网络应用程序(HTML+ JS+网络服务)。

,如果您决定"to turn" Angular+Spring启动组合取而代之的是微服务。比照。下面的解释。

2) If the first question is true, do all front-end microservices run on the same AWS instance or separately?

这取决于。比照。下面的解释。


为什么

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

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

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


相反,你必须问问自己:

  1. 你想达到什么程度的 g运行通用性
  2. 我想让什么可以独立部署(或容器化)
  3. 我打算如何扩展?
  4. 我想如何传送更新?

    (非详尽列表...)

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

  • (1) 说你的整个 Angular + Spring Boot (app) 形成一个可独立部署的微服务,这样它就可以容器化并 运行 在负载均衡器后面的多个 AWS 实例上,最终从集群功能中获益。

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

案例 (1) 可能类似于:

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

而案例 (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 facade(MS1)。单独更新每个组件并进行扩展很容易,您必须创建两个具有相似布局的新 AWS 实例。尝一尝...

你会注意到独立部署并不意味着任何依赖。 (微)服务之间会(并且经常)存在 logical/functional 依赖关系,所以这里的关键字是独立的-deployable.

希望对您有所帮助!