将其发布为答案,因为评论太长了。
微服务是自包含的组件,因此对自己的数据负责。如果您想获取数据,您必须与服务 API 对话。这主要适用于不同类型的服务(即,您不会在提供不同类型业务功能的服务之间共享数据库 - 这是不好的做法,因为您通过数据库在堆上耦合服务,然后很容易耦合更多会通常在 API 级别完成,但通过数据库更方便 => 您可能会失去组件化)。
但是,如果您拥有相同类型的服务,那么正如您所提到的,有两个明显的选择:共享一个数据库或让每个服务都包含它自己的数据库。
现在您必须问自己选择了哪种解决方案:
- 您的这些
OrderService
真的能够独立工作,还是您需要将所有订单放在同一个数据库中以供其他应用程序报告或访问?
- 确定您的实际瓶颈是什么。是数据库吗?如果没有,则共享数据库。是服务吗?如果没有,则分发您的数据。
- 需要分发数据吗?你的选择是什么,你的需求是什么?您是否需要始终保持一致或最终的一致性就足够了?您是否需要拥有单独的数据库并手动同步它们,或者您的数据库安装是否处理开箱即用的复制和分区?
- ETC
我想说的是,在这种情况下,答案是:视情况而定。在开始这样的分布式/可扩展性/架构之旅之前,我们技术极客经常忘记做的事情是与业务交谈。通常,业务可以处理某种程度的不一致、次优流程或在更多地方而不是一个地方查找数据(即,您认为重要的可能不一定对业务而言)。所以和他们谈谈,看看他们能忍受什么。以一种可操作的方式解决问题可能比投入大量资金来尝试构建一个高度可分配的系统更便宜。