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

时间:2021-07-25 19:56:25

标签: microservices

我开始阅读微服务架构,但对以下几点感到困惑。

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

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

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

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

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

谢谢。

2 个答案:

答案 0 :(得分:0)

这里的每一个服务是指每一个微服务。例如,如果我们将单体应用拆分为 4 个不同的微服务,那么每个微服务都应该有一个数据库。

答案 1 :(得分:0)

为了遵循微服务最佳实践,每个微服务都应该拥有自己的数据库并仅由 API 公开是正确的。这是因为架构中的每个服务都应该独立于其他服务并解耦。如果2个以上的服务共享一个数据库,那么在运行或升级时可能会出现问题。

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

此外,如果有 2 个以上的服务依赖于共享数据库,那么您将被迫使用完全相同的数据库/版本。你失去了独立使用 MySQL 和 MongoDB 的自由。即使对所有工具都使用相同的工具,当您对一个工具进行维护或迁移时,您也不得不为其余部分进行维护或迁移。所有这些加起来就形成了一些耦合服务,使它们更难维护和扩展。