我最近开始考虑如何在微服务架构中有效地实现Angular。
我们说我们有登录服务,用户管理服务以及浏览,添加和编辑某些媒体的服务。每个服务都有自己的后端和前端,在自己的私有容器中提供。因此,每个部分都使用明确定义的API进行隔离,以便与后端进行交互,并使用自己的独立用户界面来使用此API。
现在,让我们说我想将每个微服务绑定到一个应用程序中。我有两种方法(据我所知)来做到这一点:
我可以配置服务器将每个服务放在子网址下,并让应用程序成为SPA的数组,即一种MPA(多页面应用程序)。
我可以创建一个主应用程序,为每个微应用程序设置路径并按需加载它们(自定义PreloadingStrategy,我看着你)。
我还发现了this,这个过程我个人并不高兴,因为你会在连续交付方案中失去微服务的许多好处东西的。这旨在用微服务创建一个SPA整体。
现在,第一种选择似乎是一项苦差事,根本没有乐趣。第二个对我很有吸引力。我来到这篇文章:https://coryrylan.com/blog/custom-preloading-and-lazy-loading-strategies-with-angular并立即开始思考;如何利用它从URL加载预构建的角度模块,而不是从文件系统中打包它们?
所以我的问题是;有没有人这样做过?可能吗?这样做有安全问题吗? 或者是否有其他选择将我的微服务绑定到更大的应用程序中?
答案 0 :(得分:4)
微服务本身不应该是一个目标,它是一种实现目标的方法。那么,你需要回答一个问题,你想达到什么目标?
人们开始在前端使用微服务的一个原因是可扩展性。如果您的应用程序足够大并且许多团队使用一个前端,那么最好使用微服务以减少团队之间的依赖关系,从而提高开发效率 - 每个团队都可以独立开发其部分。例如,Microsoft Azure Portal就是一个很好的例子。它有很多前端代码,许多团队同时工作。
但重要的是部署。大多数前端部署为一个组件,根据经典定义,前端微服务不是完全微服务。考虑一下Angular 2模块。通常人们在前端使用微服务术语作为实际的模块,而不是可以单独开发和部署的专用组件。
如果您的应用程序足够小(3-4个开发人员)并且显然不会增加到一些专门的前端团队,那么在前端使用微服务就没有必要增加额外的复杂性。
当前端部件之间的隔离很大时,可以使用第一个选项,它们之间没有相互作用。例如,您有一些应用程序应该将用户视为具有相同样式,组件和单点登录的应用程序,但这些应用程序完全不同。然后最好将它们放在不同的URL,不同的服务(甚至是单独部署)中,在它们之间共享共同的样式和组件。这更容易实现。
当部件彼此绑定时,可以使用主应用程序,它实际上是一个前端应用程序。但这种方法难以实施,需要团队之间更多的互动。
第三种方法也按照上述post所述进行。