写点什么

架构师训练营 -week9 命题作业

用户头像
J.Spring
关注
发布于: 2020 年 08 月 02 日
架构师训练营 -week9 命题作业



秒杀活动的本质其实是营销,通过秒杀活动以更低廉的价格换得更多的流量进来,提高知名度,吸引粉丝。

但秒杀活动本身由于吸引大量用户进来,会对系统造成巨大的冲击,如何承载这么大的并发量是秒杀需要考虑的,所以秒杀最主要考虑的关键问题其实是限流

秒杀的大概限流通道为:

可以设置三道阀门:

  • 列表页阀门,商品列表页点击详情按钮进入商品详情页,可以通过一个计数器进行控制进入详情页的人数,比如这里只允许1000人进入,其余超出的跳转到“秒杀结束”页。

  • 详情页阀门,商品详情页点击下单按钮进入订单提交页,同样是通过计数器进行控制进入的人数,比如这里为100人,那么最终只有100人可以进入提交订单的页面参与抢购。

  • 秒杀阀门,商品数量有限,比如100个人提交订单到订单系统,但只有10件商品,那么只允许前10个人下单成功,其余的90人进入“秒杀结束”页。

通过这三道阀门,可以逐步将流量限制到一个比较小的数量级,保证不会对后台订单系统造成冲击。

用户不断刷新订单列表页怎么办?

秒杀活动开始前,用户其实也可以不断刷新订单列表页,这样以来后台系统也会收到大量的查询请求。所以一般的做法是将订单列表页作为静态html缓存在cdn服务器上,用户请求直接请求到cdn服务器上转移压力。

怎么判断秒杀开始让进入详情的按钮点亮?

秒杀开始前,从列表页进入详情页的按钮也是灰色的,直到秒杀开始后点亮。这个过程其实是通过一个js文件来控制,刚才说了列表页是静态html从cdn得到,但是这个js确是从后台js服务器动态得到,秒杀开启前js中内容为空;秒杀开启后,js文件返回一串可以秒杀的商品id,商品列表页可以通过这些id点亮已经开始秒杀商品的商品按钮。

如何防止url不提前暴露?

而且这个js除了这一串id,还包含了商品详情的url,这样子就可以做到不会提前对html页面暴露url,防止被不法分子拿到url提前进入详情页。这个url包含一个token,由后台随机生成,绝对不会被猜测到。所以,可以利用这个token进行url的合法校验。



总结:这种方案是通过限流策略不让后台服务器承载太大的压力。

而还有一种方式是不限制前端用户流量,全部承接到后台,由后台通过高并发处理能力的中间件进行秒杀逻辑控制。这里附上一篇之前写的秒杀方案供参考和批评:《redis设计秒杀活动图解》

https://blog.csdn.net/shengqianfeng/article/details/86656143



发布于: 2020 年 08 月 02 日阅读数: 56
用户头像

J.Spring

关注

努力支撑经历,经历支撑能力! 2018.12.03 加入

追不上BAT的人... 分享,聚焦

评论 (2 条评论)

发布
用户头像
手动点赞,CSDN 博客专家!
2020 年 08 月 02 日 16:06
回复
感谢
2020 年 08 月 13 日 15:31
回复
没有更多了
架构师训练营 -week9 命题作业