傻瓜式秒杀系统——高并发场景下的秒杀优化,超好用

秒杀系统

傻瓜式秒杀系统

秒杀系统的核心难点是并发量,如果不考虑并发问题,那么我们可以用如下图所示的简单的系统结构来实现秒杀系统,用户只有两个简单操作:刷新界面和秒杀按钮,服务端也只有两个服务接口:返回秒杀界面和处理秒杀逻辑。假设本文中秒杀商品有100个,参与秒杀的用户有100w个。

傻瓜式秒杀系统——高并发场景下的秒杀优化,超好用

但是在高并发场景下,这个系统会有很多问题,我们全文会针对这些问题一一进行优化

  1. 大量用户同时刷新界面,会对服务器的带宽造成非常大的压力;
  2. 用户在秒杀前后可以多次重复点击按钮,造成很多不必要的请求;
  3. 用户可以通过脚本进行抢购,并且抢购成功率非常高;
  4. 服务端承受高并发请求,会出现响应过慢或失败等情况;
  5. 数据库承受高并发请求,会导致连接池耗尽和响应缓慢;
  6. 如果数据库更新设计的不合理,可能会出现超卖的情况;

秒杀界面CDN

秒杀开始之前,用户都会请求秒杀界面,有的用户甚至会不断的刷新秒杀界面,100W用户可能产生上千万次秒杀界面请求。秒杀界面往往包含很多静态资源,如果这些界面请求全部通过服务器获取,会造成大量的带宽消耗,甚至造成秒杀还没开始服务器就崩了的情况。

对于网页这种静态资源的并发访问,业内早就有成熟的解决方案:内容分发网络(CDN)。我们可以在秒杀开始前,预先把网页的静态资源存放在CDN节点,用户在刷新界面时直接从CDN获取静态资源,从而降低刷新秒杀界面对服务器造成的压力。添加了CDN服务之后,秒杀界面有大量用户同时访问和刷新并不会给服务端带来多大压力。

傻瓜式秒杀系统——高并发场景下的秒杀优化,超好用

秒杀按钮优化

我们知道,秒杀系统往往会有一个秒杀按钮,如果不对按钮限制,可能存在以下问题:

  • 用户在秒杀开始前点击按钮,造成很多无用请求;
  • 用户在秒杀开始后多次点击按钮,造成很多重复请求;

所以我们可以对按钮做一些限制:秒杀开始前按钮不可用,用户点击一次秒杀按钮后,按钮也进入不可用状态。这种方式无法限制通过脚本请求后端的情况,但是可以限制正常用户的多次无效点击,大大降低请求量。

傻瓜式秒杀系统——高并发场景下的秒杀优化,超好用

秒杀链接优化

普通情况下,用户在点击秒杀按钮的时候,前端会请求一个固定的URL,这个URL可以在前端界面查到。对于普通不懂技术的用户来说,这没有什么问题,如果用户稍微懂点Http协议,就可以在秒杀开始前拿到URL,在秒杀开始前或开始的毫秒级时间内请求秒杀链接,不仅会给服务端带来很大的压力,还会造成不公平现象:商品都被开脚本的人抢走了。

为了避免这种现象,我们可以将URL动态化,即使秒杀系统的开发人员也无法在知晓在秒杀开始时的URL。具体实现方法是在获取秒杀URL的接口中,返回一个服务器端生成的随机数,并在下单URL中传递该参数完成下单。

傻瓜式秒杀系统——高并发场景下的秒杀优化,超好用

秒杀验证码

虽然说我上面通过动态URL避免了用户在秒杀开始前请求秒杀链接,但是用户还是可以通过脚本在秒杀开始的那一刻去请求秒杀连接,普通用户基本没有办法和脚本秒杀进行竞争。

我们可以引入机器难以识别的验证码,用户在请求秒杀链接之前,需要填写验证码识别的结果,验证码错误的请求直接拒绝。使用验证码不仅可以增加脚本秒杀的难度,还可以降低请求的QPS,因为请求不再是在秒杀那一刻进来,而会被分散到填写验证码的时间段内。

傻瓜式秒杀系统——高并发场景下的秒杀优化,超好用

过滤请求

通过上面的步骤,我们可以减少很多重复请求和脚本请求,可以保证秒杀活动中一个人大致只会请求一次(脚本还是可以请求多次)。但是100W人参与秒杀,每人请求一次秒杀链接也有将近100W次请求,服务器还是扛不住。

仔细分析之后可以发现,秒杀的商品只有100个,最后成功的也只有100个,那么我们100W的请求是不是都有必要请求到秒杀服务器上呢?显而易见,我们没有必要把所有请求都打到秒杀服务器上,我们只需要保证有大于100个请求打到秒杀服务器就可以保证秒杀的正常进行,所以我们可以在用户端和服务端添加一层过滤层,过滤层只要保证有100个以上的请求能打到秒杀服务器端。

我们可以使用Nginx服务器来构建过滤层,一个Nginx服务器也没法抗100W的请求,我们假设每个Nginx服务器可以处理10W的请求,那么我们就需要10台Nginx。那么怎么用保证至少有100个请求可以请求到后端呢?我们可以简单的让每个Nginx服务器只通过前100个请求,后续请求直接返回降级界面。通过Nginx过滤,我们可以把100W的请求过滤为1000个请求,大大减少了服务器端的压力。

傻瓜式秒杀系统——高并发场景下的秒杀优化,超好用

Redis缓存

如果通过前面的过滤,请求量依旧非常大,如果数据库无法处理这些请求量,我们就需要在数据库之上添加一层Redis缓存了。单个Redis可以处理几万的QPS,如果预估请求的QPS大于几万,我们还可以使用Redis集群模式来增加Redis的处理能力。

在Redis存放和售卖商品数目大小相同的数字,秒杀服务每次访问数据库之前,都需要先去Redis中扣减库存,扣减成功才能继续更新数据库。这样,最终到的数据库的请求数目和需要售卖商品的数目基本一致,数据库的压力可以大大减少。

Redis原子性

我们知道Redis是不支持事务的,所以可能出现扣减为负数的情况,这种情况下我们可以使用Lua脚本来保证一次扣减操作的原子性,从而保证扣减结果的正确性。

傻瓜式秒杀系统——高并发场景下的秒杀优化,超好用

异步更新数据库

通过Redis判断之后,去更新数据库的请求都是必要的请求,这些请求数据库必须要处理,但是如果数据库还是处理不过来这些请求怎么办呢?

这个时候就可以考虑削峰填谷操作了,削峰填谷最好的实践就是MQ了。经过Redis库存扣减判断之后,我们已经确保这次请求需要生成订单,我们就可以通过异步的形式通知订单服务生成订单并扣减库存。

傻瓜式秒杀系统——高并发场景下的秒杀优化,超好用

码事通
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
秒杀系统设计
小明的博客
11-24 948
秒杀活动是指网络商家为促销等目的组织会网上限时抢购活动,这种活动具有瞬时并发量大、库存量少和业务逻辑简单等特点。设计一个秒杀系统需要考虑的因素很多,比如对现有业务的影响、网络带宽消耗以及超卖等因素。本文会讨论秒杀系统的各个环节可能存在的问题以及解决方案。 秒杀系统 傻瓜式秒杀系统 秒杀系统的核心难点是并发量,如果不考虑并发问题,那么我们可以用如下图所示的简单的系统结构来实现秒杀系统,用户只有两个简单操作:刷新界面和秒杀按钮,服务端也只有两个服务接口:返回秒杀界面和处理秒杀逻辑。假设本文中秒杀商品有100个,
第一百一十一期:思考 | 一文说透秒杀系统如何设计
歌谣的博客
11-12 829
秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看,秒杀系统本质是一个高性能、高一致、高可用的三高系统。 作者:阿哲 前言 秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻...
EasyRC 傻瓜式系统一键重装 v1.4.9官方版
10-23
EasyRC一键重装是一款系统重装软件,可实现任何Windows系统下一键重装 Windows 系统,是当前最简单最快速的系统重装软件,EasyRC摆脱了传统借助光驱、U盘等介质的繁琐,操作者无需任何
PHP程序开发社区交友APP系统源码 开源可傻瓜式搭建.zip
01-09
PHP 开源社区交友APP 系统源码,可以傻瓜式搭建,可以实时发送消息接受消息,视频通话,语音通话。
实践出真知:全网最强秒杀系统架构解密,不是所有的秒杀都是秒杀!!
最新发布
2401_83915812的博客
04-21 864
所以,很多所谓的秒杀系统,存在着秒杀的业务,但是称不上真正的秒杀系统,原因就在于他们使用的是同步的下单流程,限制了系统的并发流量。之所以上线后没出现太大的问题,是因为系统的并发量不高,不足以压死整个系统。
gulimall——秒杀商品上架流程(一)
qq_38246328的博客
05-04 328
1、秒杀商品上架流程图 2、设置定时任务 通过定时任务,每天三点上架最近三天的秒杀商品。同时为了避免分布式情况下同时上架的情况,使用了分布式锁。 定时任务默认是阻塞的,上一个未执行完下一个会一直阻塞住,因此@Async开启异步任务。 //秒杀商品上架功能的锁 private final String upload_lock = "seckill:upload:lock"; /** * 定时任务 * 每天三点上架最近三天的秒杀商品,提前预告 *.
Java 秒杀方案
Kaka_csdn14的博客
05-15 2292
Java 秒杀方案第一部分之 分布式会话 以及 简单的秒杀功能实现;
秒杀系统架构设计-许大牛
11-06
许大牛就不用介绍,通过相关思想学习秒杀系统设计,对实际有较大帮助
简易秒杀系统
01-02
一个简易的秒杀系统,实现了限流,库存闸,批量入库,并且所有请求同步返回,所有参数可配置
jd抢购秒杀助手 傻瓜式操作
02-13
京东预约秒杀抢购助手 显卡、白酒等抢购,操作简单 内含说明书
免授权版傻瓜式建站系统
03-22
前些天发现了一款傻瓜式建站系统,基于宝塔面板搭建的建站系统,功能丰富。 源码大部分是开源的,我破解了几个文件后,已经可以不需要授权就能使用。 因为官方已经录制了详细的教程视频,我这边就不录制了。 教程...
影子系统傻瓜式一键安装重启还原
12-12
很简单的一键安装,我自己也在用,关机还原,保护电脑
java高并发秒杀活动的各种简单实现
weixin_42470983的博客
03-24 5342
最近遇到比较多数据不一致的问题,大多数都是因为并发请求时,没及时处理的原因,故用一个比较有代表性的业务场景【活动秒杀】来模拟一下这个这种高并发所产生的问题。 众所周知,电商系统的秒杀活动是高并...
java 2023秒杀项目 day(1) 面经
初心魏的博客
06-22 1218
使用redis优化
秒杀系统的设计
bin的专栏
05-07 514
一,秒杀系统要解决的技术挑战 1,短时间内的超高访问量对后台服务的冲击。秒杀期间,来自外部请求产生的QPS会是平时的10~100倍。 2,数据库的读写压力陡增。大量的并发写,会造成数据库的行锁处于无法释放的状态,大量的线程排队进而造成服务请求超时失败。 3,网络带宽资源会因为秒杀被大量占据掉。假设秒杀页面的大小为150K,如果最大并发连接数为20000,那么应用服务器至少需要支持的带宽&gt...
linux系统可以做到傻瓜式安装mysql吗
05-10
在Linux系统上,可以通过包管理器来安装MySQL,以达到傻瓜式安装的效果。例如,在Ubuntu系统上,可以使用以下命令来安装MySQL: ``` sudo apt-get update sudo apt-get install mysql-server ``` 在CentOS系统上,...

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 如何使用mybatis连接数据库?详细解析 13745
  • Maven三种打包方式,看看你都掌握了没? 10818
  • 真香啊,Typora 收费,竟意外发现这6款开源笔记工具 6583
  • Netty客户端断线重连实现及问题思考 6289
  • cron表达式,看这篇就够了 5983

分类专栏

  • Java面试 58篇
  • Java 33篇
  • 算法 4篇
  • 微服务 2篇
  • ES 2篇
  • Redis 1篇
  • 领域驱动设计 1篇

最新评论

  • SQL参数化查询为什么能够防止SQL注入

    2201_75718211: 师傅讲的非常详细表情包

  • 队列实现栈的3种方法,全都击败了100%的用户

    Xzyyyyyy: 确实,图里左边入队列,结果是从右边入队的

  • Feign调用技巧!老手分享如何优雅地进行本地调用!

    weixin_46625059: 有没有更简单的方法

  • SpringBoot自定义注解 + AOP 防止重复提交(建议收藏)

    xyan9i: 博主, 你好, 有源码地址吗? LoginInterceptor中的ThreadLocal不太理解

  • 一次Linux中的木马病毒解决经历

    爱吃菜的小虾米: chattr lsattr 也限制了怎么办?

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 吊打98%的JAVA同行,这份阿里P8架构师升级手册登上天梯!
  • HashMap源码详解
  • 重磅!程序员都在学的Spring实战(第6版),你竟然还没有掌握?
2023年305篇
2022年115篇
2021年254篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司铜川网站建设设计哪家好绍兴网站设计模板推荐绍兴模板制作多少钱揭阳网站建设设计北京网络营销价格宣城SEO按天收费吕梁网站优化排名公司自贡外贸网站制作价格昆明关键词排名哪家好株洲网站推广工具报价防城港外贸网站建设哪家好资阳SEO按天计费公司赣州营销型网站建设报价湘潭网站优化排名报价宣城SEO按天扣费多少钱秦皇岛企业网站制作公司陇南营销网站徐州如何制作网站公司保山网站建设设计报价南澳网站seo优化多少钱罗湖百度网站优化公司昌吉网站设计哪家好武汉高端网站设计推荐郑州网站定制推荐阿里模板推广哪家好许昌优秀网站设计价格丹东网站seo优化哪家好兰州网站优化排名阳江网站制作设计公司娄底网站定制公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化