Spring 引导微服务共享领域模型

Spring Boot microservices sharing domain models

我即将开始一个小型个人项目,该项目将 API 公开我的股票投资组合。为实现这一点,我必须按计划从 3 APIs(我的股票经纪人,一个统计数据 API 和一个获取延长时段的股票价格)中获取数据,然后计算某些统计数据并公开它们通过 REST 服务,这将是最终目标。我打算将该应用程序分成两项服务。第一个将与外部 API 通信并将其信息存储到数据库中,另一个将计算我需要的统计信息并公开 REST 服务。

我想它看起来像这样:

蓝色部分是我的两个微服务。

我最初认为这看起来是个不错的设计。这两个服务有两个独立的问题,如果其中一个失败,另一个将完全可用。但是,由于它们都将使用相同的数据库表,这意味着我将在我的两个服务中拥有相同的域 类。我不喜欢代码的重复,然后我认为我想在这两个服务之间共享的任何类型的数据都应该在这两个服务中复制。

我没有这种架构的经验,我很好奇你以前是如何解决类似问题的。

理想情况下,在真正的微服务架构中,您不应该共享数据库。为什么?根据定义,微服务在开发和部署方面应该是松散耦合的、可扩展的和独立的。因此,每个服务的数据库是首选方法,因为它完全满足这些要求。

话虽如此,您确实应该考虑迁移到两个单独的数据库或将服务合并为一个。

如果您真的想继续使用两个服务和一个数据库(我真的不推荐这样做),您可以构建一个包含数据库实体甚至 DAOs/Repositories 的库。然后,您将使该库成为您的两个服务的依赖项。

我会有三个模块:

  • 核心:该模块将负责实际存储和检索数据库中的股票。
  • Extractor/Scheduling:该模块将负责从外部资源中提取信息并将其提交给核心模块。
  • API/APIGateway:该模块将负责接收传入流量。可根据需要与核心模块合并