mongodb - 是否应该通过单个微服务来访问应用程序中的共享数据库?
问题描述
考虑一个示例应用程序APP。这由微服务A、B和C以及一个共享的 NoSQL mongo 数据库组成。这些微服务相互进行 API 调用,并说应用程序APP完成每个事务作为这些服务之间的协调动作。在每个事务中,每个服务 A、B 和 C 都需要在某个时间点从一个或多个共享数据库集合中读取和写入数据。
应用APP是否应该将数据库访问限制为仅一个服务A,并让其他微服务B和C通过A访问数据库,这样共享数据库只有一个网关,并且只允许一个微服务访问数据库。或者每个微服务A、B和C是否应该有权独立访问数据库?
假设:假设两个服务不可能同时修改数据库中的任何记录,因为每个操作都是事务性的并且分阶段发生。
解决方案
如果多个微服务正在使用/管理来自同一个表/集合的数据,那么很可能这表明设计不佳。
每个微服务都应该负责从一组实体意味着一组集合。
除了通过负责的服务获取数据之外,系统中的任何其他组件都不应该以任何方式访问这些集合。
但这并不意味着您应该创建一组休息端点或类似的东西来将数据库中的数据公开给外部服务。
您应该只在组件之间通过适当的合同来服务您的资源。
推荐阅读
- javascript - jQuery DataTables:以原始数据源顺序显示行,同时保持排序功能可用
- curl - cURL 用于在站点需要登录时下载文件
- bash - Bash 脚本无法找到 .JAR 文件
- ios - Fixing "use of unresolved identifier 'addTarget'" while adding func to button click event
- python - 如何从 Powershell 脚本命名 Python 会话?
- string - 在C#中将字符串转换为双精度而不解析或tryparse
- dart - 如何在 Flutter 中使用 BottomNavigationBar 保留 Widget 的状态?
- image - 从 Azure 容器注册表中提取图像后,图像存储在 Azure Kubernetes 集群的什么位置?
- data-structures - 单链表中的节点何时有资格进行垃圾回收
- sqoop - Sqoop 带有 Epoch 时间戳的增量负载