开发者社区> 大坑神> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

电商网站高并发下的数据安全

简介:     我们知道在多线程写入同一个文件的时候,会存现“线程安全”的问题(多个线程同时运行同一段代码,如果每次运行结果和单线程运行的结果是一样的,结果和预期相同,就是线程安全的)。如果是MySQL数据库,可以使用它自带的锁机制很好的解决问题,但是,在大规模并发的场景中,是不推荐使用MySQL的。秒杀和抢购的场景中,还有另外一个问题,就是“超发”,如果在这方面控制不慎,会产生发送过多的情况。我
+关注继续查看
    我们知道在多线程写入同一个文件的时候,会存现“线程安全”的问题(多个线程同时运行同一段代码,如果每次运行结果和单线程运行的结果是一样的,结果和预期相同,就是线程安全的)。如果是MySQL数据库,可以使用它自带的锁机制很好的解决问题,但是,在大规模并发的场景中,是不推荐使用MySQL的。秒杀和抢购的场景中,还有另外一个问题,就是“超发”,如果在这方面控制不慎,会产生发送过多的情况。我们也曾经听说过,某些电商搞抢购活动,买家成功拍下后,商家却不承认订单有效,拒绝发货。这里的问题,也许并不一定是商家奸诈,而是系统技术层面存在超发风险导致的。
    1. 超发的原因
    假设某个抢购场景中,我们一共只有100个商品,在最后一刻,我们已经消耗了99个商品,仅剩最后一个。这个时候,系统发来多个并发请求,这批请求读取到的商品余量都是99个,然后都通过了这一个余量判断,最终导致超发。(同文章前面说的场景)
            


    在上面的这个图中,就导致了并发用户B也“抢购成功”,多让一个人获得了商品。这种场景,在高并发的情况下非常容易出现。
    2. 悲观锁思路
    解决线程安全的思路很多,可以从“悲观锁”的方向开始讨论。
    悲观锁,也就是在修改数据的时候,采用锁定状态,排斥外部请求的修改。遇到加锁的状态,就必须等待。
   



    虽然上述的方案的确解决了线程安全的问题,但是,别忘记,我们的场景是“高并发”。也就是说,会很多这样的修改请求,每个请求都需要等待“锁”,某些线程可能永远都没有机会抢到这个“锁”,这种请求就会死在那里。同时,这种请求会很多,瞬间增大系统的平均响应时间,结果是可用连接数被耗尽,系统陷入异常。
    3. FIFO队列思路
    那好,那么我们稍微修改一下上面的场景,我们直接将请求放入队列中的,采用FIFO(First Input First Output,先进先出),这样的话,我们就不会导致某些请求永远获取不到锁。看到这里,是不是有点强行将多线程变成单线程的感觉哈。
            



    然后,我们现在解决了锁的问题,全部请求采用“先进先出”的队列方式来处理。那么新的问题来了,高并发的场景下,因为请求很多,很可能一瞬间将队列内存“撑爆”,然后系统又陷入到了异常状态。或者设计一个极大的内存队列,也是一种方案,但是,系统处理完一个队列内请求的速度根本无法和疯狂涌入队列中的数目相比。也就是说,队列内的请求会越积累越多,最终Web系统平均响应时候还是会大幅下降,系统还是陷入异常。
    4. 乐观锁思路
    这个时候,我们就可以讨论一下“乐观锁”的思路了。乐观锁,是相对于“悲观锁”采用更为宽松的加锁机制,大都是采用带版本号(Version)更新。实现就是,这个数据所有请求都有资格去修改,但会获得一个该数据的版本号,只有版本号符合的才能更新成功,其他的返回抢购失败。这样的话,我们就不需要考虑队列的问题,不过,它会增大CPU的计算开销。但是,综合来说,这是一个比较好的解决方案。
   




    有很多软件和服务都“乐观锁”功能的支持,例如Redis中的watch就是其中之一。通过这个实现,我们保证了数据的安全。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
支撑千万级实时并发,阿里云助力快速提升视频直播可靠性
如果您计划使用阿里云的视频直播产品进行一场在线直播,并且此次直播活动对您非常关键,想最大程度避免直播中出现任何质量问题,本文将为您介绍较为通用的提升直播可靠性的方案。
0 0
电商大促期间,如何帮助品牌企业解决IT系统的安全性、稳定性问题?商派IT运维成功案例分享
6·18和双11这类电商大促活动期间,如何帮助客户解决IT系统的安全性、稳定性、可靠性等问题?听商派IT运维服务负责人朱士杰分享IT运维服务案例。
0 0
婚恋系统源码,如何应对保护用户数据安全的挑战?
婚恋系统源码,如何应对保护用户数据安全的挑战?
0 0
电商网站业务安全
阿里云基于集团电商业务多年的运营经验,为云上客户提供完整的电商网站运营期间的防护方案,包括防爬风险管理、DDoS防御、运营风险管理等产品。
635 0
直播开发app,别说我没告诉你如何应对高并发
直播开发app,别说我没告诉你如何应对高并发
0 0
从搜索引擎到核心交易数据库,详解阿里云神龙如何支撑双11
订单峰值58.3万笔/秒,销售额4982亿,阿里云神龙再次成功扛住了全球流量洪峰
0 0
【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的方案分析
【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的方案分析
0 0
+关注
大坑神
JAVA菜鸟工程师一枚
文章
问答
文章排行榜
最热
最新
相关电子书
更多
基于云的货拉拉技术稳定性保障实践
立即下载
亿级流量下的数据库技术保障实践
立即下载
亿级流量下数据库技术保障实践
立即下载