我的情况如下:
我们有一个复杂的应用程序,我想将其分解为多个可以并行工作的开发团队。微服务概念处理得很好,但由于应用程序没有高负载,因此托管许多不同的微服务是矫枉过正的。因此,问题来了:我应该使用微服务,还是会涉及基础设施的额外费用?
我可以在同一台计算机上以单独的进程运行微服务,还是每个进程都需要 Docker?
每个微服务器都提供 Web 服务/REST,它们甚至可以绑定到一个 IIS 还是 Docker 是唯一的选择? 他们将如何解析为主应用程序?我需要 API 网关吗?
如果不是微服务,我可以使用其他什么来避免大型单体应用程序?
顺便说一句,使用微服务 - 它们如何在一个数据库中共享相同的数据?
通常,适应微服务有 3 个主要好处:
- 可扩展性,这不是您的兴趣所在。 可维护性,
- 其中每个微服务都有一个明确的用例,这些用例会产生少量代码,从而使可维护性更容易。
- 容错,如果某些微服务失败,其他微服务仍在运行。
如果你只关心复杂性,领域驱动设计可以在这里真正提供帮助,通过将你的单体划分为可以分发给不同团队的不同领域。关于架构,你可以采用普通的SOA架构。如果你有一个定义明确的域,那么SOA或微服务只是一个部署架构。
他们如何在一个数据库中共享相同的数据?这是一个非常抽象的问题,因此答案会有点抽象。通常它们不会在同一个数据库中共享数据,在大多数情况下,每个微服务都有自己的数据库,在某些情况下,微服务集群可以共享一个数据库。
这是很多基本问题,在你继续你的项目之前,肯定需要很好的答案。我推荐阅读Sam Newman的"构建微服务"。