【图灵学院】分布式解决方案–最大努力通知型

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

下面站在商户的角度来分析最大努力通知型的处理过程。

  • 商户先创建一个支付订单,然后调用支付宝发起支付请求。
  • 支付宝唤醒支付页面完成支付操作,支付宝同样会针对该商户创建一个支付交易,并且根据用户的支付结果记录支付状态。
  • 支付完成后触发一个回调通知给商户,商户收到该通知后,根据结果修改本地支付订单的状态,并且返回一个处理状态给支付宝。
  • 针对这个订单,在理想状态下支付宝的交易状态和商户的交易状态会在通知完成后达到最终一致,但是由于网络的不确定性,支付结果通知可能会失败或者丢失,导致商户端的支付状态一直是未知的,所以最大努力通知型的作用就体现了,如果商户端在收到支付结果通知后没有返回一个”SUCCESS”的状态码,那么这个支付结果回调请求会以衰减重试机制继续出发,比如1min、5min、10min、…直到达到最大通知次数。
  • 如果达到指定次数后商户还是没有返回确认状态,支付宝提供了一个交易结果查询接口,可以根据这个支付订单号去支付宝查询支付状态,然后根据返回的结果来更新商户的支付订单状态,这个过程可以通过定时器来触发,也可以通过人工对账来触发。

所谓的最大通知型,就是在商户端如果没有返回一个消息确认时支付宝会不断地进行重试,直到收到一个消息确认或者达到最大重试次数。