【问题标题】:Multi module maven Vs Micro-service architecture [closed]多模块 maven Vs 微服务架构 [关闭]
【发布时间】:2020-07-11 16:21:39
【问题描述】:

必须为我的项目创建一个项目模板,所以我很困惑在多模块 maven 或微服务(eureka)之间使用什么。

我有几个疑问/问题,如果有人请帮助我,那就太好了。

  1. 何时使用 Multimodule maven,何时使用微服务?
  2. 假设我们有任何服务都可以使用的实用程序文件,因此它将是一个不同的 Spring Boot 应用程序,或者在每个 Spring 项目中我们必须保留该实用程序文件。
  3. 如果我们有 3 个微服务,我不想授予对其中一个服务的访问权限,我们如何才能像多模块 maven 一样实现这一点,我们可以将其从父 pom.xml 中注释掉项目,但我们可以怎么做在微服务中。
  4. 我们如何在除 restTemplate 之外的 2 个服务之间进行通信。

【问题讨论】:

  • LDD -> 多模块,DDD -> 微服务
  • @emotionlessbananas : 你能提供任何参考吗?
  • 我认为您需要进一步阅读,您反对 maven(这是一种组织源代码/编译/组装它的方式)和微服务,这是一种在不同应用程序中构建功能的方式. Maven 本身,无论有没有多模块,都可以构建单体应用程序或微服务应用程序,同样如此。微服务可以是多模块的 Maven 应用程序。这些是不同层次的概念。 Maven 是一个项目描述工具。微服务是一种多应用程序架构范式。没有什么反对他们。或者也许我误解了你的问题,你可以澄清一下?
  • 就像@GPI说的,它们是组织代码和其他进程的工具,而LDD (Layer driven development)例子可以是ejb project structuresDDD (Domain Driven Development)例子在erp你有库存(microservice1) 和 user (microservice2),但两者都可能有复杂的用例,所以 其中一个或两个都可以或不能是 LDD 其余是偏好(比如你想要多细粒度的服务,其他......)
  • @khmarbaise 更好。 maven.apache.org 的第一行,Apache Maven is a software project management and comprehension tool. 不过并没有真正改变问题的症结。

标签: java spring spring-boot maven microservices


【解决方案1】:

Martin Fowler 的一些建议:https://martinfowler.com/bliki/MonolithFirst.html 基本上它说首先构建一个单体,只有当你拥有一些工作特性时,才决定是否以及如何将它拆分为多个微服务。

恕我直言,微服务的最大优势是可独立部署:您可以开发、QA 和部署一个微服务,而无需担心其他微服务。但这种优势只有在您与多个团队合作时才会发挥作用。

您提到的关于微服务的一些问题:

  • 通常,微服务之间有两种访问模式:发送命令和监听事件。您不能同时使用 REST API,迟早您还需要一些消息传递基础架构。或者使用 GraphQL。
  • 需要保护微服务之间的访问。对于 REST API 和消息传递,您通常会为每个允许使用它的微服务创建一个 API 密钥。
  • 切勿在微服务之间共享实用程序或文件,否则会破坏独立部署能力。如果确实需要共享资源,请创建一个专用的微服务,通过 REST API 公开共享资源或实用程序功能。

但首先:创建一个整体并发现您是否需要微服务边界以及在何处需要。

希望这会有所帮助。

【讨论】:

  • Uwe Friedrichsen 刚刚完成了一个由 3 部分组成的关于可重用软件模块谬误的博客系列:ufried.com/tags/reusability
猜你喜欢
  • 1970-01-01
  • 2017-06-09
  • 2018-01-27
  • 2021-02-16
  • 2019-04-10
  • 2020-06-23
  • 2020-04-07
  • 2017-08-27
相关资源
最近更新 更多