【分布式事务系列】最大努力通知型实现最终一致性

353 阅读2分钟

这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

最大努力通知型

最大努力通知型和基于可靠性消息投递最终一致性方案的实现是类似的,它是一种比较简单的柔性事务解决方案,比较适用于对数据一致性要求不高的场景,最典型的使用场景是支付宝支付结果通知。

从商户角度分析最大努力通知型的处理过程:

  1. 商户先创建一个支付订单,然后调用支付宝发起支付请求
  2. 支付宝唤醒支付页面完成支付操作,支付宝针对商户创建一个支付交易,并且根据用户的支付结果记录支付状态。
  3. 支付完成后触发一个回调通知给商户,商户收到通知后,根据结果修改本地支付订单的状态,并且返回一个处理状态给支付宝。
  4. 针对这个订单,在理想状态下支付宝的交易状态和商户的交易状态会在通知完成后达到最终一致,但是由于网络的不确定性,支付结果通知可能会失败或丢失,导致商户端的支付订单状态是未知的,所以最大努力通知型作用体现在此,如果商户端在收到支付结果通知后没有返回一个“success”状态码,那这个支付结果回调请求会以衰减重试机制(逐步拉大通知的间隔)继续触发,比如每个5分钟倍数时间点发通知直到达到最大通知次数,如果达到指定次数后商户还没有返回确认成功状态码,那接下来如何处理呢?
  5. 支付宝提供了一个交易结果查询接口,根据这个支付订单号去支付宝查询支付状态,然后根据返回的结果来更新商户的支付订单状态,这个过程通过定时器来触发,也可以进行人工对账来触发。