高并发下接口的并发问题

事故

前些天上线的扫码送会员活动。
场景:用户登录账号之后,扫二维码,送七天黄金会员,限制每个帐号只能领取一个
有恶意用户刷接口,在高并发下越过限制。

原因
领取会员流程:
    1.后端先生成卡卷,将卡号放到消息队列中
    2.用户扫码请求领取会员接口
        2-1).先检查用户是否已经领取过该活动会员
        2-2).领取过return “该帐号已领取”的标示  
        2-3).没领取从消息队列中拿取一张卡号
        2-4).激活卡
        2-5).更新用户本次活动为已经激活

这个流程在一般环境下是没有问题的,在高并发下就不行了。

                2-1)        2-2)        2-3)       2-4)      2-5)

    线程a                                                   -->

    线程b                                      -->

    线程c                                 -->

高并发下模拟几个线程同时请求

现在的rpc服务,除去极其敏感性数据的操作,其它数据的接口基本都没有做数据一致性控制。

其实做了控制也不能解决这个问题。再来说这个问题,高并发下因为线程a已经执行完激活卡的操作,用户的会员已经建立权益。但这时候线程a还没有执行到2-5,还没更新用户的领取卡卷的状态,这时候,又有一个这个用户的领取卡卷请求过来。2-1的check 操作并不能阻止这个请求,同样的再次领取卡卷并且激活,导致线程a

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值