客户下订单后,订单总额100RMB; 客户点击支付后,支付系统收到请求,从客户账户扣除100RMB,订单状态修改为已支付,通知商品出库系统等一系列工作后,最后返回正确状态给客户,这样基本完成支付工作。
在此,如何在突发情况下,保证支付完成或者支付失败。
这些突发情况应该包括:
客户点击支付后,又使用系统的购物卡(或者现金卡等),用虚拟币替代部分支付款;
这里增加了一点复杂度: 在虚拟币扣除后突然宕机(只是其中一个原因,实际情况下可能会有其他的奇葩事件),现金款没有被扣除,客户也没有获得返回状态,这个时候客户发现虚拟货币少了,但是订单还是未支付。
不好意思,我不是做电子商务的同学,提不出其他的深奥问题了。
对于案例出现的情况, 我先提出我的解决方案:
要想解决这些问题,我会要设计一套日志系统来记录每步的操作和涉及到的数据,这个系统单独运行在一个单独的硬件环境下面,宕机恢复瞬间(也就是系统提供服务之前)查询日志,日志返回最后失败的业务(注意是业务,不是具体的某个操作,因为支付是一系列的流程,不能用单独的某个操作去表示)用来恢复数据。
那么我的问题是,
1.如何设计系统来保证支付的原子性。
2.有开源系统可以来借鉴吗?
先谢谢大牛!
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
人生最曼妙的风景,竟是内心的淡定与从容!