[英]How to manage Data consistency between two microservices?
我有两个微服务,例如 M1 和 M2。 M1 负责管理用户交易,例如订单。 订单完成后,摘要数据通过消息总线发送到 M2。 M2 负责生成订单报告。 我们的交易在没有检查消息是否被 M2 成功处理的情况下完成。 问题是一些订单没有出现在报告中,因为消息没有被成功处理(因为任何随机问题)。 使两种服务之间的数据保持一致的最佳方法是什么。 我正在实施一种从 M1 中提取数据并使用参考号(它是一个序列号)识别差距的机制,我知道这不是一个好的方法,因为我可能不知道我拥有的最后一个参考号实际上是最后一个。 任何建议或改进将不胜感激。 谢谢。
我尝试过拉取数据机制,但我认为这不是一个好主意。
你可以看看SAGA Pattern 。
Saga 的目标是形成一个具有补偿事务能力的服务跨度事务。
您也可以使用两阶段提交模式 2PC,但主要不推荐使用,因为它是资源跨度事务,这意味着它占用资源直到事务结束,这不好,除非您坚持立即事务,该事务足够短以尽快释放资源.
回到 saga,你可能听说过一个叫做 routing Slip 的术语。 路由单 forms 链接步骤来完成服务交易。 这个路由单可以通过编排和编排两种方式来实现。 如果任何步骤发生故障,补偿将触发所有已完成的步骤。 这种补偿可能是回滚或任何其他应该发生的策略。 例如:
我使用公共交通工具。
读取SAGA State 协调交易步骤的机器并更新交易的 state
阅读Courier Routing Slip ,其中定义了交易的路由单。
观看 Chris Patterson 的MassTransit Serries
另外,请考虑发生故障时的重试策略。 它可以通过 Masstransit 配置来完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.