微服务设计中生成JPA实体

Generating JPA entities in microservices design

我正在考虑设计,但有点混淆了在微服务架构中生成实体(虽然我是微服务设计的新手,但我对多个精益 war 着迷)。我有 DB 和多个 war 的想法。我应该从 DB 生成实体并将它们放在一个 jar 中,并将 jar 包含在我创建的每个 war 中,或者还有另一个选项。其次,我放置 persistence.xml 的位置。如果我打算稍后使用缓存来缓存实体实例,上述方法是否会带来任何问题。谢谢

如果所有微服务共享同一个数据库,那么就不可能将微服务移动到另一台主机,它打破了最小数据共享原则,增加了依赖性,等等。
集中式数据存储在操作上方便,但微服务应该希望将其所有依赖项嵌入,以实现独立部署。替代方法是:每个微服务都嵌入了它的所有依赖项,包括数据库,因此将这个微服务移动到任何地方都是微不足道的,这很漂亮但在当前上下文中不实用。

微服务应该拥有自己的表,因为微服务之间共享表会扼杀移动性;但是,共享数据库集群安装绝对没问题(Nadareishvili、Mitra、McLarty 和 Amundsen,2016 年)。我发现这种方法是最好的:如果数据库是 Oracle 或 SQL 服务器,微服务在同一数据库中拥有独立的模式。如果数据库是 MySQL 那么微服务应该拥有独立的数据库,因为我相信 MySQL 每个数据库只支持一个模式。

微服务不仅可以拥有不同的数据库,还可以拥有不同类型的数据库,例如在我当前的应用程序中,我们使用 MySQL 进行在线事务处理,但使用 NoSQL 进行离线处理。

使用 Spring 引导和 Spring 数据 JPA 我在每个微服务中生成实体时没有遇到任何问题。我仍在复制微服务中的实体代码,但它仅适用于所需的实体。我们总是可以创建一个通用的 jar 并在微服务之间共享,但这并不适用于所有情况。 类似的讨论在这个 question