![e2f0c656832f4a11d0bcd03bac96ad1d.png](https://img-blog.csdnimg.cn/img_convert/e2f0c656832f4a11d0bcd03bac96ad1d.png)
1、场景介绍
场景1:扣费,企业账户送流量或者红包,用户签到领取。此场景下就是多用户对某一个账号的并发扣款;
场景2:充值,打赏给主播,这种场景是多用户对同一个账号进行打款,但是方案和问题和场景1是一致的。
2、场景举例
假设有两个业务操作同一个账号,账号余额为100,业务1扣除50,业务2扣除40,如果顺利应该是剩余100-50-40=10,那么我们看如下并发操作的场景:
![adb2e423a139b8b3545d7f70c10a40f7.png](https://img-blog.csdnimg.cn/img_convert/adb2e423a139b8b3545d7f70c10a40f7.png)
通过两个业务的并发操作,最后账户余额为60(是业务2最后修改后的余额值)。
3、解决方案
3.1 分布式锁
由于是分布式环境,采用分布式锁可以保证数据一致性,但是这是小概率事件,并且引入新组件(redis/zk),还会降低吞吐量。
分布式锁参考:https://blog.csdn.net/