关于账号系统是否应该控制重复请求的问题

案例:
用户发起提现100元。

业务关键步骤:
1、检查用户可用余额是否大于等于100元
2、冻结用户余额100元
3、向银行发起100元转账请求
4、更新用户冻结余额

这几个关键步骤都有异常处理要求,这里重点要讨论的是第2步骤自身有无必要控制重复请求风险。

交易系统向账户系统发起冻结请求,本身会控制重复请求,但也可能存在漏洞。在这种情况下,如果账户系统冻结服务本身没有重复请求控制处理,就会出现数据差错。如果同一笔冻结请求发送了多次,会出现哪些情况?

目前一种观点是账户系统无需控制重复请求,主要理由如下:
1、会影响账户系统性能
2、交易系统与账户系统在同一个应用,前端控制就可以
3、如果账户系统控制了,前端就不用管了。

另一种观点是需要做重复控制:
1、对账户系统性能有影响是伪命题。
a、账户系统性能必须足够支撑这种业务需要。
b、前端判断是否重复,需要调用账户查询功能。
2、不管是二个不同应用接口,还是一个应用内部不同接口,都应该尽力保证接口自身的数据一致性。
3、接口本身应该尽可能独立,减少耦合性。
4、交易、账户都应该控制此类异常情况。

在与银行系统对接时,同一个转账请求(同一个流水号),只能发起一次,否则银行是不允许的。在做证券交易时,柜台也对交易请求进行重复提交的控制。所以个人认为对外服务接口是有必要自身控制重复请求异常的。

还请大家指点指点,谢谢。

猜你喜欢

转载自lunarychen.iteye.com/blog/2100637