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

One database per API or shared database for multiple APIs in Microservice

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

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

每项服务是否意味着一个网站(休息)api 拥有自己的数据库?

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

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

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

谢谢。

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

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

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

此外,由于 2+ 服务依赖共享数据库,因此您不得不对所有服务使用完全相同的 database/version。你失去了独立使用 MySQL 和 MongoDB 的自由。即使对所有人使用相同的工具,当您对其中一个进行维护或迁移时,您也不得不为其余的做同样的事情。所有这些加起来会形成一些耦合服务,使它们更难维护和扩展。

你可以拥有所有微服务的通用数据库,它是微服务模式之一:

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

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

检查这些链接以了解此方法的优点和缺点。