秒杀系统技术解剖

2019-08-19 admin

clipboard.png

我们知道秒杀类的活动对整个运营贡献是最大的,它的特点是瞬间流量俱增、请求数量远大于库存,导致保证下单扣库存准确性难度大,那我们前端、后端怎么做才能保证呢?下面是我的一些思考。

先来说说整体的设计理念,秒杀类的活动光靠水平扩展扩增机器只能是个备选方案,它的成本和收益不对等。那我们就应该尽量利用有效的资源最大化处理业务,可从限流、异步处理、内存缓存角度考虑。

接下来说说具体的落地方案。秒杀类的活动前端一般会展示商品描述、秒杀价格、已售比例、时间提示,这些内容基本上是不变的,那我们可以通过内容分发CDN机制来将页面静态化,减少动态元素。前端还需要减少用户提交次数,用户提交之后按钮置灰,禁止重复提交,但是别忘记了还有刷子这个灰色产业链,所以后端还需要做一些限制。

在后端的服务控制层针对同一访问UID,限制请求频率。或者先把请教都写到消息队列中缓存一下,逻辑层订阅消息减库存,减库存成功的请求返回秒杀成功,失败的返回秒杀结束。甚至,我们可以利用缓存来应对读写请求,首先把库存信息同步到Redis缓存中,所以的减库存操作都Redis中进行,然后同步到数据库中。实际上,这些还远远不够,我们还需要考虑以下场景。

场景一是同一个账号,一次性发出多个请求。我们可以利用Redis内容缓存来判断用户是否已参加过了活动,写入一个标志位,结合乐观锁特性约束只允许一个请求写成功,成功写入的也就是没有记录的才能继续参加。

场景二是多个账号,一次性发送多个请求。针对这种场景,我们通过检测指定机器IP请求频率可以解决,如果发现某个请求IP请求频率过高,可以给它弹出一个验证码或者直接禁止它的请求。

场景三是多个账号,不同IP发送不同的请求。这种场景下的请求,和真实用户行为基本相同,想做分辨很难,需要通过账号数据进行数据挖掘后打标,结合是否经常抢票、退票等等标识为风控用户。

其实秒杀类的活动最大的挑战是如何保证高并发下的数据安全和防刷,这是一个矛与盾的博弈。总结一下今天的文章重点,针对秒杀系统,尽量将请求拦截在系统上游,越上游越好,另外读多写少的多使用缓存。好,今天的分享就到这里,欢迎分享给你的朋友。

文章来源:www.liangsonghua.me

作者介绍:京东资深工程师-梁松华,在稳定性保障、敏捷开发、JAVA高级、微服务架构方面有深入的理解

clipboard.png

[转载]原文链接:https://segmentfault.com/a/1190000020115468

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-72907.html

文章标题:秒杀系统技术解剖

相关文章
nodejs实现发出蜂鸣声音(系统报警声)的方法
本文实例讲述了nodejs实现发出蜂鸣声音(系统报警声)的方法。分享给大家供大家参考,具体如下: nodejs 有时候需要发出报警声音,使用以下代码可以调用系统蜂鸣器发声 process.stdout.write('\x07&#x...
2017-03-02
javascript实现秒表计时器的制作方法
本文实例为大家分享了js秒表计时器的制作代码,供大家参考,具体内容如下 具体代码: <!DOCTYPE html> <html lang="en"> <head> <meta ...
2017-03-16
Windows系统下Node.js的简单入门教程
随着近日Paypal和Netflix宣告 迁移到Node.js, 服务器端Javascript平台已经证明其自身在企业领域的价值. 这对于Node来说是一小步,对于Javascript而言却是一大跨越啊! 来自.NET, Java, PHP...
2017-03-24
js实现简单的秒表走动的时钟特效
本文实例介绍了javascript实现简单的秒表走动的时钟特效。分享给大家供大家参考。具体如下: 运行效果图如下: 实现代码: <html> <head> <script type="text&#x...
2017-03-27
简易的投票系统以及js刷票思路和方法
早就听说有什么刷票脚本,微博投票等等相关的投票都有某些人去刷票。 试一下吧,兴许自己也会刷票呢?捣鼓了几个小时,终于有所眉目。 (1)投票系统 要刷票,就得先有个投票界面。 当然,可以直接去各个投票网站就行,不过这里还是自己弄个投票页面,方...
2017-03-22
使用iojs的jsdom库实现同步系统时间
使用iojs的jsdom库与 http://open.baidu.com/special/time/ 同步系统时间。 var jsdom = require("jsdom"); var exec = require(&#...
2017-03-22
二维码活码管理系统
什么是活码? 二维码生成后,二维码图案不变,内容可随时变更,极大提高营销效率,配合美术设计二维码能力大大提升. 并且可以做到实时统计二维码扫描数据,传播效果一目了然;根据地域、网络、设备等多维度分析数据,提升管理效率. 二维码的活码的技术...
2018-03-02
JS脚本实现网页自动秒杀点击
我们先来看下秒杀活动页面代码 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content=&...
2018-01-13
全新升级,基于vue-cli3.0 + Element UI 构建的 响应式后台管理系统
更新日志 [x] 更新vue-cli为3.0版本 这里有篇文章 [x] 增加广告管理 [x] 优化路由控制 [x] 优化一些配置文件 [x] 登录用户信息存储改为 cookie v3.0.0 踩过的坑 这次更新后 vuex 开启严格模...
2018-07-13
纯JavaScript模仿windows系统日历
在网上看了几篇关于生成日历的js 教程于是自己也整理了一个想法思路 大家有什么建议欢迎提出 首先这个项目里面本人认为的几个难点: 1、如何定义每一个月的第一天位置 每个月的第一天都不是固定的星期几,所以第一天的输出需要动动脑筋把它放到对应的...
2017-03-20
回到顶部