本次主要说说秒杀系统安全相关的优化,比方说秒杀系统的地址如何的隐藏,不让别人刷我的秒杀下单的接口,加验证码,接口做一个限流。本次要说的重点。
极端情况下, 用户已经下单成功,但还没有在缓存中插入,这时库存已经为了0,返回给用户已经抢完了,但是实际上用户已经下单成功了,在订单列表中,可以看到。时间差的问题。
解决方案:如果通过redis接口的检验后,放入异步消息队列中,也就是基本放入消息队列的情况下,不出意外都可以可以下单的。后端队列慢慢处理。在加入队列增加一个排队的标记miaosha_wait_userId_productId,设置一个合理的超时时间。先看看是否有排队标记,有就继续轮训,没有查订单, 有订单返回成功,没有订单说明异常了。
秒杀环境使用map,不要使用HashMap
> 使用ConcurrentHashMap。2分钟让你懂为什么hashMap线程不安全。本身hashmap都是通过链表指针的形式来完成的。
地址中加入一个令牌的概念,当进入秒杀页面的时候,需要请求后端生成对应得一个token令牌(令牌token放入redis中),当下单的时候需要校验这个token是否存在如果存在才可以下单,地址的隐藏,下单校验的时候完毕后删除redis令牌。类似防止表单重复提交。
分控系统控制验证码,如果验证码发生多次请求,就调用其他验证码算法。如果继续被破解,直接锁定IP。
PS:有老铁说你这都不是问题,在黑客面前,其实在BAT大型网站都有风控团队,风控团队就是处理紧急问题。小公司可能你感觉技术可以所有的秒杀系统的功能都完成了,但是在大公司可能一个小功能就是一个团队一起完成的。
>>原创文章,欢迎转载。转载请注明:转载自,谢谢!>>原文链接地址:上一篇:已是最新文章