在电商平台开发中,往往涉及多种类型的订单结算以及并发结算的问题,例如这样的场景:
- 平台涉及国内官方订单、国内商户订单以及海外官方订单等多种订单
- 在各种订单完成时,又根据不同的订单类型,涉及冻结金额扣减、利润账户分润、经纪人分润、商户分润、预付回款、卡主回款等流程,期间将会涉及使用数据库事务,对多个账户钱包记录的行锁后变更
- 但由于项目早期开发的不规范,并没有固定加锁的顺序,并且又将入账出账的流程设计为串行,并没有设计为出账同步入账异步的功能,因此整体处理流程又较依赖于行锁
- 不同的完成订单流程中用户钱包的加锁顺序不一致,这里可能是冻结金额扣减->经纪人分润->利润账户分润,而另一处是冻结金额扣减、利润账户分润->经纪人分润;同时,经纪人也可以作为买家,在完成自己的某类订单时先进行冻结金额扣减
以上的几种条件组合,也就为后续业务的死锁埋下了种子。
