首页 > 解决方案 > 是否应该通过单个微服务来访问应用程序中的共享数据库?

问题描述

考虑一个示例应用程序APP。这由微服务ABC以及一个共享的 NoSQL mongo 数据库组成。这些微服务相互进行 API 调用,并说应用程序APP完成每个事务作为这些服务之间的协调动作。在每个事务中,每个服务 A、B 和 C 都需要在某个时间点从一个或多个共享数据库集合中读取和写入数据。

应用APP是否应该将数据库访问限制为仅一个服务A,并让其他微服务BC通过A访问数据库,这样共享数据库只有一个网关,并且只允许一个微服务访问数据库。或者每个微服务ABC是否应该有权独立访问数据库?

假设:假设两个服务不可能同时修改数据库中的任何记录,因为每个操作都是事务性的并且分阶段发生。

标签: mongodbapimicroservices

解决方案


如果多个微服务正在使用/管理来自同一个表/集合的数据,那么很可能这表明设计不佳。

每个微服务都应该负责从一组实体意味着一组集合。

除了通过负责的服务获取数据之外,系统中的任何其他组件都不应该以任何方式访问这些集合。

但这并不意味着您应该创建一组休息端点或类似的东西来将数据库中的数据公开给外部服务。

您应该只在组件之间通过适当的合同来服务您的资源。


推荐阅读