前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >秒杀系统技术解剖

秒杀系统技术解剖

作者头像
公众号_松华说
发布2019-08-20 11:45:51
5330
发布2019-08-20 11:45:51
举报
文章被收录于专栏:松华说
我们知道秒杀类的活动对整个运营贡献是最大的,它的特点是瞬间流量俱增、请求数量远大于库存数量,导致保证下单扣库存准确性难度大,那我们前端、后端怎么做才能保证呢?下面是我的一些思考。

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

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

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 松华说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档