电子交易的一个很基本的问题,就是避免用户下重复订单。用户明明想买一次,结果一看下了两个单。如果没有及时发现,就会带来额外的物流成本和扯皮。对商家的信誉也不好看。
从技术上看,这是一个分布式一致性问题;但实际上,技术无法100%解决这类问题,得结合多种手段综合处理。这里就来说道说道。
为啥会下重了呢?
原因1:客户端bug
比如下单的按键在点按之后,在没有收到服务器请求之前,按键的状态没有设为已禁用状态,还可以被按。又或者,在触摸屏下,用户手指的点按可能被手机操作系统识别为多次点击。
嗯,谁能保证客户端不偶尔出个什么bug 呢。
原因2: 超时
用户的设备与服务器之间可能是不稳定的网路。这样一个下单请求过去,返回不一定回得来。超时最大的问题是: 从用户的角度,他无法确定下单的请求是还没到服务器,还是已经到了服务器但是返回丢失了。——用户无法区分到底这个单下了还是没下。
这样在等待一个超时后,UI可能会提示用户下单超时,请重复再试。

原因3: 用户的App闪退/人工强退,之后重新打开重新下单
也许可以使用一些技术手段避免用户下重单,但是心急的用户可能会重启流程/重启App/重启手机。在这种强制的手段下,任何技术手段都会失效——用户压根就不让你的技术执行,你怎么玩?
在这些条件下,如何避免用户多下了一笔订单呢?
用幂等防止重复订单
在技术方面,这是一个分布式一致性的问题,即客户端和服务器端对某个订单是否成功/失败达成一致。防止重单的关键是使用一个由

本文探讨了在分布式秒杀系统中避免用户重复下单的问题,包括客户端的重复点击、网络超时等原因,提出了使用幂等性通过dedup key来防止重复订单的策略。同时,介绍了客户端流程、后端数据表设计以及通知机制来增强一致性。虽然技术手段不能完全避免,但结合产品设计和运营支持,可以显著降低重复下单的发生。
最低0.47元/天 解锁文章

1982

被折叠的 条评论
为什么被折叠?



