引言
在上一篇博客《淘东电商项目(55) -支付系统核心表设计》,主要讲解支付系统的数据表结构设计。
本文主要讲解支付系统的分布式事务的问题,以及解决方案。
本文目录结构:
1. 支付流程
下面我贴出一个简单的支付流程:
以上是用户提交订单到支付系统的大致流程,当然里面涉及到最重要的一个问题就是分布式事务的问题,下面来讲解下。
2. 分布式事务的几个问题
① 在网络延迟情况下,回调接口出现重试时,如何保证接口幂等性问题?(举例:第三方系统异步回调成功支付结果给支付系统)
- 答:使用全局id的方式,如果再次请求时,根据全局id查询数据库,如果发现已经修改了数据,确认已接收到消息( 重试机制是间隔性)。
②在网络延迟情况下,第三方系统没有及时的将支付结果通知给商户端,存在支付状态不一致时,如何解决?
- 答:一般第三方系统会提供查询结构,可以调用第三方系统主动查询支付状态。
③商户系统回调接口中,如果存在代码问题,或者是商户系统宕机,导致第三方支付系统一直在重试? 最后放弃重试 如何解决呢?
- 答:方法一:“手动补偿机制+日志记录 主动调用第三方接口查询”;方法二:“写一个定时Job,每天定时检查数据”。
④支付金额与商品金额如果不一致时,如何处理?
- 答:在异步回调中,使用预支付金额与回调真实支付金额进行比对,如果不一致的话,说明该交易信息存在异常。可以使用日志+对账核查。
⑤支付服务如何与其他系统保证分布式事务问题?
- 答:采用第三方支付流程实现补偿和重试机制遵循最终一致性 Base理论和CAP理论。
⑥与内部系统中出现分布式事务问题
- 答:可以使用框架LCN、 MQ 、TCCC。