实施微服务架构的意义

Jam*_*ler 3 architecture licensing amazon-web-services spring-boot microservices

我是第一次开始学习/实施微服务架构的旅程,我有一些与所产生的影响相关的问题。

对于某些背景,我打算使用的技术堆栈在一个非常重要的意义上是在 AWS 上运行的 dockerized spring-boot 微服务。

所以我想知道的是...

首先,考虑到每个微服务都应该是完整的堆栈,包括单独的数据库,这是否意味着我需要选择运行的任何数据库的 3 个单独实例?我猜答案是肯定的。所以,我想我真正的问题是,这不是比使用单个数据库的单体应用程序消耗更多的硬件资源吗?数据库非常需要内存......

不仅如此,如果我运行 5 个微服务,运行单个 spring-boot 应用程序所需的全部内存将需要 5 倍,对吗?在我看来,这比单体应用程序需要更多的内存,对吗?

如果您使用 Oracle 作为数据库呢?它对许可有什么影响?如果每个微服务都需要一个单独的数据库,它会不会变得非常昂贵?

是否还有其他许可陷阱需要考虑?或者在开始这一旅程之前,人们应该考虑/意识到 MSA 的任何其他陷阱?

编辑:另外,鉴于每个微服务都是全栈的,如果我想要为每个微服务寻找一个前端(微服务需要前端)怎么办?我在这方面没有看到任何好的建议。特别是考虑到(如果它们被称为“12 因素”),代码库应该位于每个微服务的单独存储库中。这是如何最好地管理/实现的?

小智 5

这是一个很大的清单,但我会试一试:

数据库:是的,他们应该有自己的数据库。这并不一定意味着他们自己的数据库 SERVER,这是一个扩展问题,但您当然不想将它们耦合在一起。绝对最干净的方法是在物理上将它们分开,但从许可的角度来看,彼此没有权限的单独模式可能就足够了。

RAM:是的,这肯定需要更多的程序区空间。这通常无关紧要,因为程序的数据通常远远超过程序/框架内存。我相信 spring boot 框架需要大约18 mb才能运行。除非您有一个非常小的服务,否则您将需要一个(或两个)数量级的 RAM 来运行您的服务,此时 spring 框架是一个舍入误差。甚至 JVM 本身也可能压倒这一点。您可以进行一些测试,但请不要花任何时间优化掉 2-3 mb 的 RAM...当您遇到演出或更多时进行优化。

许可:除了上面对数据库实例的评论之外,这太广泛了,无法解决。如果您正在许可单个产品/库,那么您必须查阅您的许可协议以了解它会如何发生。一些由“服务器”许可,一些由“应用程序”许可,一些由进程许可。

用户界面:我真的不明白这一点。微服务被组装成一个应用程序。该应用程序有一个用户界面。服务本身通常没有 UI。该应用程序通常是一个单独的应用程序服务器,或者有时只是一个带有 javascript 的 HTML 页面来调用服务。