如何设计一个秒杀系统?

哈喽,小伙伴们大家好!当你们被咨询或者面试到这个问题的时候,大家是不是很困惑?甚至无从下手,感觉这不应该是面试(guan)架(wo)构(mao)师(shi)的问题吗?下面根据我多年来总结的经验,给大家一个示范应答,帮助小伙伴们轻松面对,仅供参考哈!

首先既然设计一个系统,我们就从软、硬件两方面来回答:

第一点:通常秒杀系统活动时间都是比较短,TB双十一买过的小伙伴们肯定深有体会,前一秒秒杀按钮还是可点击的,下一秒后就灰色了,无疑瞬间的操作除了快还是快。。。。。并且秒杀活动的并发量一定是巨大的,所以一定不要和你自身业务系统放置在一起,不然有可能会瞬间瘫痪的哦!可以分配独立的域名单独做个程序来放置。

第二点:通常在秒杀活动前,为了不错过活动,用户会频繁的刷新当前页面,这个操作其实会对后台造成一定的负载,所以在使用数据库集群、Redis集群,负载均衡之外,秒杀页面最好实现静态化,免得因为频繁刷新动态渲染的页面而消耗资源。

第三点:需要短时间内增加网络带宽,可以选择在云端增加或者临时租用带宽资源。也可以把秒杀系统放在CDN(动态分发网络)节点上,这样就可以节省秒杀服务器的带宽了。

第四点:为了防止用户提前获取秒杀下单页面,可以使用动态URL解决问题,使用Redis缓存保存一串随机字符串,秒杀活动时所有用户访问页面都必须要带上上述所说的字符串。

第五点:扣减库存也是一个很值得大家注意的地方,其实最容易发生的问题就是超卖引起的扣减库存不正确,可以使用乐观锁来解决,也就是所谓的更新使用版本号。或者使用Redis事务来解决。

第六点:做好限流,使用消息队列来控制请求

如何解决超售问题?

在秒杀活动之前,我会使用程序在Redis缓存里面创建商品的库存记录,秒杀活动的时候使用watch命令查看Redis里面的库存和秒杀成功的用户列表,开启Redis事务扣减库存并记录一下成功秒杀商品的用户Id,最后提交Redis事务。如果在提交事务和指令给Redis执行事务的同时没有被其他程序打断,则可以使用Redis单线程的特性成功扣减库存,不会引起超售问题。

下面附上操作代码:


这里使用Redis客户端Jedis进行操作,POM引用的依赖为jeds的3.0.1版本。使用线程成进行模拟。


使用Redis事务机制,因为Redis自带乐观锁,所以使用事务的时候Redis的watch命令会帮助我们用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。也就防止在运行期间被其他程序所打断,最后我们看下Redis的数据。


可以看到秒杀的商品数量和我们之前预期设置的商品数量是一致的,都为50个。

库存为0,所以使用Redis事务机制是可以有效的防止库存扣减以及商品超卖的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • 之前一直准备写一篇关于秒杀系统设计的文章,但是因为涉及到的东西还是挺多的,拖延症发作一直没抽空写,最近闲了就把这个...
    monkey01阅读 36,640评论 2 68
  • (1)什么是秒杀: 秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些...
    九点四十阅读 571评论 0 3
  • 简介 秒杀系统本质上是一个满足大并发、高性能和高可用的分布式系统 原则 高可用:流量符合预期的时候肯定要稳定,就是...
    盼旺阅读 438评论 0 2
  • 什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特...
    带着二娃去遛弯阅读 242评论 0 0
  • 刚要给小满同学的水壶里灌点水,就听屋里咔咔咔,我们醒了,抱抱晃晃,躺下又接着睡了。估计是老母亲今天换了个沐浴露,味...
    喵皇后阅读 125评论 0 0