知识卡片
并发扣款可能导致IC卡余额错乱的未处理风险
内容
IC卡扣款案例中固定扣款策略是”读余额→计算新值→写回”三步简单赋值,无锁或并发 控制。若同一张卡两笔交易几乎同时到达(如MQ并发投递),两线程基于同一份余额快照分别 计算写回,后写入会覆盖先写入结果,导致一笔扣款”凭空消失”。发散:作者称此为”快乐路径”, 只演示业务正确性、假设不会并发,把并发安全责任留给读者(乐观锁、悲观锁或事务隔离级别) 自行补充。
参考来源
- 位置:《设计模式之禅(第2版)》第35章《工厂方法模式+策略模式》35.1节(源文件:_epub-src/text/part0153.html)
- 结论依据:原文明确提出"该逻辑没有考虑账户余额不足的情况,也没有考虑异常情况,比如并发情况,读者可以想想看,一张卡有两笔消费同时发生时,是不是就发生错误了?一张卡同时有两笔消费会出现这种情况吗?会的,网络阻塞的情况,MQ多通道发送,在网络繁忙的情况下是有可能出现该问题……我们在这里的讲解实现的是一个快乐路径",未给出具体解决方案。
- 原始内容:这个具体策略也非常简单,就是两个金额各自减去交易额的一半……该逻辑没有考虑账户余额不足的情况,也没有考虑异常情况,比如并发情况,读者可以想想看,一张卡有两笔消费同时发生时,是不是就发生错误了?一张卡同时有两笔消费会出现这种情况吗?会的,网络阻塞的情况,MQ多通道发送,在网络繁忙的情况下是有可能出现该问题……我们在这里的讲解实现的是一个快乐路径,认为所有的交易都是在安全可靠的环境中发生的。