可以将共享数据库用于多个微服务。您可以在以下链接中找到微服务数据管理的模式:http : //microservices.io/patterns/data/database-per-service.html。顺便说一下,对于微服务架构而言,这是一个非常有用的博客。
对于您的情况,您更喜欢按服务模式使用数据库。这使微服务更加自治。在这种情况下,您应该在多个微服务之间复制一些数据。您可以在微服务之间通过api调用共享数据,也可以通过异步消息共享数据。这取决于您的基础架构和数据更改的频率。如果不经常更改,则应使用异步事件复制数据。
在您的示例中,交付服务可以复制交付位置和产品信息。产品服务管理产品和位置。然后将所需数据与异步消息一起复制到Delivery Service的数据库中(例如,您可以使用Rabbit mq或apache kafka)。交付服务不会更改产品和位置数据,但会在完成工作时使用这些数据。如果交付服务使用的部分产品数据经常更改,那么使用异步消息传递进行数据复制将非常昂贵。在这种情况下,您应该在产品和交付服务之间进行api调用。送货服务要求产品服务检查产品是否可送货到特定地点。送货服务要求产品服务提供产品和位置的标识符(名称,ID等)。这些标识符可以从最终用户那里获取,也可以在微服务之间共享。由于此处的微服务数据库不同,因此我们无法在这些微服务的数据之间定义外键。
Api呼叫可能更易于实现,但此选项的网络成本较高。此外,在进行api调用时,您的服务也不太自治。因为在您的示例中,当产品服务关闭时,交付服务无法执行其工作。如果使用异步消息传递复制数据,则进行传递所需的数据位于传递微服务的数据库中。当产品服务不起作用时,您将可以交货。