微服务中每个API一个数据库或多个API共享数据库



我开始阅读微服务架构,却被下面的一点弄糊涂了。

每个服务应该有一个单独的数据库

是否每个服务都意味着一个拥有自己数据库的web(rest) api ?

例如,如果我将汽车保险索赔操作作为一个业务场景,我将业务域服务建模为3部分保险索赔服务、合作伙伴(汽车服务提供商)服务和客户服务。

理赔api中的保险理赔操作将需要其他信息,如事故,检查员的调查,保单细节,文件等。现在我可以在保险索赔服务中创建5个web(rest) api,并将其数据存储在公共数据库中,其他服务(如合作伙伴和客户服务)将拥有自己的web api和db

什么是正确的?索赔保险服务中的所有web api (claimAPI, PolicyAPI, IncidentAPI, SurveyAPI和DocumentAPI)都应该有自己的数据库,或者可以将数据保存在单个数据库中?

谢谢。

为了遵循微服务最佳实践,它们都应该有自己的数据库,并且只通过api公开是正确的。这是因为体系结构中的每个服务都应该是独立的,并且与其他服务分离。如果两个以上的服务共享一个数据库,那么在操作或升级时可能会出现问题。

共享数据库的一个大问题是每个服务都需要trust另一个服务不会修改它的信息。但是,由于它们都可以访问同一个数据库,因此其中一个实际上可以修改底层数据,从而使事情变得不稳定或不安全。

此外,如果2+服务依赖于共享数据库,那么您将被迫对所有服务使用完全相同的数据库/版本。你失去了独立使用MySQL和MongoDB的自由。即使对所有工具都使用相同的工具,当您在其中一个工具上进行维护或迁移时,您也被迫对其他工具进行维护或迁移。所有这些都导致了一些耦合服务,使它们更难维护和扩展。

你可以为所有的微服务提供一个通用的数据库,这是微服务模式之一:

https://microservices.io/patterns/data/shared-database.html

https://docs.aws.amazon.com/prescriptive-guidance/latest/modernization-data-persistence/shared-database.html

查看这些链接以了解这种方法的优缺点。

最新更新