我正在构建一个微服务,该微服务使用MongoDB作为“元数据”数据库,并使用S3进行文件存储。微服务的API之一需要在同一API调用中同时更新S3和MongoDB。
作为一种情况,我们假设API为:
POST /票
我了解到,机票预订通常是一项涉及多个微服务的复杂事务,但就我们的理论情况而言,我们只能说一个微服务就足够了。 Ticket API运行一些计算,并决定通过更新S3数据库和MongoDB来预订票证。
问题是:如何维护两个数据库之间的内容完整性?
基于一般阅读,对于跨微服务的分布式事务,建议使用2PC或某些事件模式,例如SAGA。我理解需要跨微服务进行“事务”的复杂性级别。但是,如果单个微服务在两个数据库中维护内容,是否可以使用相同的解决方案?
答案 0 :(得分:0)
仅在微服务架构中不建议使用2PC,因此SAGA是首选做法。您可以在SAGA
中找到更多信息当前体系结构
单个API可以与多个数据源通信。认为数据只是其他API的来源,因此单个API与多个API对话不会有问题。
关于多个数据源中的数据完整性是您的责任。 SAGA完全一样。分布式服务中的多个本地事务构成了完整的事务,如果任何本地事务出了问题,我们会提出补偿性事务,指示所有其他服务都已撤消本地事务,则撤消这些事务。这就是我们如何使服务之间的数据保持一致。
在您的情况下,您有责任先提交S3,然后再提交mongo DB,反之亦然。如果有任何问题,您必须还原或采取普遍措施(补偿事务)以使两个数据源保持同步。由于您同时在单个API中进行这两种操作,因此可以更轻松地保持一致性。
提示:此体系结构不错,但可能无法很好地扩展。如果您的业务案例允许,您可以考虑使用队列并触发lambda变为无服务器。将来,如果您使用队列,其他服务也可以使用相同的消息。
希望有帮助!