0

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

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

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

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

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

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

谢谢。

4

3 回答 3

0

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

于 2021-07-25T20:23:43.953 回答
0

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

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

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

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

于 2022-02-01T08:16:35.553 回答
-1

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

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

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

于 2021-07-25T20:27:00.233 回答