database-design - 微服务架构和数据库设计
问题描述
我正在为一个解决方案设计一个微服务架构,该架构将跨越多个模块,这些模块可以单独工作,也可以根据采集进行插拔。我的架构/基础数据定义问题在于以下几点:仅作为示例(不是真正的解决方案),让我们将其视为具有以下模块的预订管理的完整解决方案:
酒店预订模块
娱乐预订模块(各种活动:剧院、音乐剧等)
车辆预约模块
机票销售模块
每个模块都有自己的域:域的集成、规则和数据库,我在此服务/存储建模中试图解决的问题是如何分离服务总线中的公共部分并将其重用于所有模块但不创建一个单一的数据模型,例如:在所有这些模块中,我将有一个用户群(会有其他共同点),有什么更好的方法来为每个服务模块的模型提供一个独特但独立的用户数据存储?
我考虑了以下选项:
1 - 有一个服务总线来管理公共数据库中的用户,每个模块都可以直接通过数据库在其模式中引用用户的 FK。使用这种方法https://www.akadia.com/services/ora_references_constraint.html 但是,例如在模式之间进行 JOIN 会产生什么影响?能让它变得不可能吗?
2 - 有一个服务总线来管理公共数据库中的用户,并通过每个模块的服务复制数据,每个模块都有自己的用户群。问题将是同一解决方案中的多个用户群。
每个模块都有自己的服务和数据模型,我不想为所有模块创建一个存储模型。它不是一个由多个部分组成的大型系统,它是一个具有多个独立但可插拔系统的解决方案。
第一个选项似乎更好,但我不喜欢考虑现代建筑。
你对这个架构有什么建议,NoSQL 解决方案会更合适?
欢迎任何提示。
解决方案
如果您将酒店预订、娱乐预订、车辆预订模块和机票销售模块视为具有自己域的单个微服务,是否还有其他管理用户的微服务的空间?
如果是这样,那么选项 1 听起来是一个更好的选择,尽管您必须注意微服务之间的通信方法。如果处理不当,像 REST over HTTP 这样的同步调用会降低微服务的整体可用性。也许您可以考虑使用基于消息的异步通信方法来通过消息代理检索用户信息。
我认为 NoSQL 数据库在这里没有帮助,因为问题在于识别域的边界。
推荐阅读
- firebase - Apple M1 API S 模拟器 FIREBASE 错误:java.io.IOException:java.util.concurrent.ExecutionException:java.io.IOException:SERVICE_NOT_AVAILABLE
- r - 理解 R 中的“cut”函数
- c# - 如何在异步方法中捕获异常?
- javascript - ES9 javascript从其他对象数组更新对象数组
- java - Java Stream - 基于子类的Groupby并从父类计算总和
- python - 如何将数据框中的每一行乘以不同数据框的不同列,并将所有行的总和作为 Python 中的新列?
- javascript - 如何解决 next.js api 部分中的“ENOENT”错误?
- python - CSV:如何读取(或创建解析器)在每个数据点索引的文件到熊猫数据帧中?
- steam - Steam API 获取游戏信息
- java - 滚动嵌套recyclerview时如何保存布局颜色更改