手把手带你搭建秒杀系统
佘志东
前京东交易平台(上海)负责人、资深架构师
12374 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 18 讲
前期准备:技术选型与环境准备 (2讲)
准确无误:打造不超卖和公平的秒杀系统 (2讲)
雷令风行:性能调优更上一层楼 (3讲)
手把手带你搭建秒杀系统
15
15
1.0x
00:00/10:40
登录|注册

开篇词|如何设计一个高并发、高可用的秒杀系统?

讲述:佘志东大小:9.74M时长:10:40
你好,我是志东,欢迎和我一起从零打造秒杀系统。
说起秒杀系统啊,我相信你一定听过,甚至亲身参与过秒杀活动。作为技术人,你应该也好奇和思考过秒杀系统背后的实现方案,或者你在面试的时候被问到过,毕竟说它是高频考点一点不夸张。
因此,可能你已经搜索过秒杀系统的实现,对其有了一定的了解。但我们常说理论和实践是有距离的,知道一些基本的设计理念,其实远不能完成体系化学习的目标。“纸上得来终觉浅,绝知此事要躬行”,我相信头部电商百万用户同时秒杀的实战经验,会是个不错的加持,可以帮助你深刻理解技术难点。
所以,我来了!作为曾经的头部电商平台的秒杀系统负责人,我经常会和同事、朋友们讨论秒杀系统,当然在设计过程中,我们也确实遇到了很多问题。那么作为整个专栏的开篇,我想先就学习秒杀系统的共性问题做一个解答,期望和你对齐目标,然后我们一起向终点发起挑战!欢迎加入思考。

三个问题

问题一:为什么需要秒杀系统?秒杀系统最大的优势是什么?
通俗点讲,电商平台的本质是在线上撮合买卖双方的购销需求,达成交易。虽然是线上交易,但也遵守朴素的经济学原理,供求关系决定了商品的经济活动。当供求平衡时,买方和卖方处于对等关系,双方是相对稳定、和谐的;当供大于求时,这时候市场成了买方市场,买方处于主动地位;当供不应求时,这时候市场是卖方市场,卖方处于有利的主导地位。
买卖双方的关系不同,决定了电商平台会采用哪种营销方式。当供大于求,一般会采用各种促销让利的方式,吸引消费者购买,常见的促销方式有单品满减、总价优惠、赠品、会员优惠等;当供不应求,就需要有计划地设置营销活动、用户参与门槛以及限购规则,尽可能的让商家利益最大化,同时惠及更广泛的消费者。
当供需出现极度不平衡时,不管是线下还是线上,都会出现抢购的情况。上面这张照片,是 1992 年深圳市首次发行股票时群众抢购的情况,“利”字驱动,抢到即是赚到,万人空巷。同样,在线上,当 1499 元平价茅台上架时,当抢到口罩意味着守护更多一份健康时,流量激增,更是盛况空前。因此,回答为什么需要秒杀系统,其实很简单,那就是商品的极度供不应求
那么秒杀系统又有哪些优势呢?对于这些极度供不应求的爆品,合理地设置活动,适时地释放库存,可以持续为电商平台带来稳定的热度和流量,可观的 VIP 会员费,以及技术口碑的认同。当然,通过秒杀系统,电商平台也可以对参与用户进行筛选,杜绝黄牛和刷子,让爆品惠及更广,更公平。
问题二:京东、阿里巴巴等头部电商平台都把建设秒杀系统放在了什么地位?
在头部电商平台,除了售卖我们前面讨论的爆品外,更多售卖的是普通商品,这两类商品特点鲜明,爆品具有流量激增的特点,而普通商品流量则比较均衡。
这里我想请你思考一下:如果这两类商品不加区别,直接在电商平台上一块进行交易,会有什么问题?
没错,灾难性的后果,容易引发平台 P0 级重大事故。究其原因,主要就在于秒杀流量是突发式的,而且流量规模很难提前准确预估,如果混合在一起,势必会对普通商品的交易造成比较大的冲击。
因此,对京东、阿里而言,即使需要投入新的资源,也是需要单独搭建一套秒杀系统的,它将作为交易体系非常重要的一个核心系统
可见,秒杀在京东、阿里具有非常重要的地位,它是非常重要的营销手段之一。每年的 618 和双 11 两次大促,京东都会投入大量的人力资源和机器资源来进行备战,在备战过程中,都会将其作为一个独立专项进行推进,从专项架构梳理、流量预估、全链路压测,到专项预案演练等,再到集团技术 VP 的专项汇报,都体现了秒杀在大厂中不可或缺的地位。
而在平常,由于爆品运营的日常化,秒杀系统每天都在承担着重要的使命,同理对技术团队来说,每天都需要像大促那样做好秒杀的稳定保障工作。
问题三:秒杀系统对于电商技术从业者意味着什么?为什么要学习秒杀系统?
秒杀系统是电商技术从业者绕不开的一个话题,大到京东、阿里这样的头部电商,小到新兴的社区团购公司,都需要通过秒杀促销活动进行拉新留存,或持续引流保持热度。因此对于从事电商行业的同学来说,设计和开发秒杀系统就是一门必修课。
退一步说,即便是电商领域范围广、内容多、分工细,当前你的工作范围并不涉及秒杀系统,你也可以花些时间来系统学习一下。
一方面,这门课程里介绍的一些高可用、高性能、高并发的设计思路遵循普适的原则,在设计其他电商系统时你可以举一反三;另一方面,据我了解,大部分的电商面试场景都会考核秒杀系统的设计能力,而从我自身这么多年作为面试官的经验来看,很多候选人或多或少能描述出一些秒杀的设计思路,比如有些同学知道怎么进行库存控制,有些知道隔离,有些知道限流等等,但是能够系统地讲出怎么设计一个秒杀系统,这样的候选人少之又少。
讨论完这几个问题,你是不是已经开始好奇这门秒杀课会有什么不一样的地方?毕竟电商发展到今天,秒杀系统已经不是个新鲜的话题了。那么闲话少叙,我们一起看看课程设计。

课程设计

首先,我们说说课程亮点。为了让你对秒杀系统有一个全面的认知,这门课程我会手把手带你搭建一个秒杀系统,从基础的设计原则讲起,到高阶的设计技巧实战都会涉及,你看到的、学到的将是一个可扛百万流量的秒杀实战项目
这里我十分鼓励你跟着课程一步步验证,就像我开始说的,没有什么是比你亲手实践一遍收获更大的。这里附上 GitHub 地址:https://github.com/sanyecao-seckill,以及所使用的编程语言:Nignx 服务有 Lua 语言,后端服务都是 Java。
所以说,这门课的受众目标也会较为广泛,它既适用于没有太多经验的初级工程师学习和参考,也可以让相对经验丰富的高级电商从业者查漏补缺,完善学习体系。
接下来,我们看看具体内容,共分为六个部分。
前期准备:这部分我会从秒杀的业务挑战开始讲起,带你看看电商平台的秒杀玩法,总结设计原则;接着我会带着你做秒杀的技术选型,安装基础环境。
系统动工:这部分的内容比较基础,我会对秒杀系统进行业务解构,开始着手搭建秒杀的项目工程,梳理秒杀的业务流程,分析系统提供的接口,填充秒杀的业务实现,最终完成一个最简秒杀系统。
稳定压倒一切:这部分聚焦在“稳”上,在最简秒杀系统的基础上,我将带着你进行高可用建设,重点讲解秒杀的隔离、流控、削峰、限流、降级、热点和容灾。
准确无误:这部分聚焦在“准”上,我们将通过防刷和风控,学习如何保证商品不卖给黄牛和刷子,以确保秒杀的公平性;接着会介绍秒杀的库存和限购设计,以确保商品不超卖,符合限购规则。
雷令风行:这部分聚焦在“快”上,我将带着你一起进行系统优化,从而让我们的秒杀系统响应更快,用户体验更好。
尾声:最后就是总结部分,梳理整个实战项目的关键点;另外我将结合自身经验,带给你在头部电商的秒杀玩法中,除了上述技术内容外的业务协同思考。
值得一提的是,每节课我都会布置一道思考题,你要做好准备哦,我们可以一起互动解决。

自我介绍

那么分享到这里,你可能还不认识我,这里做个自我介绍。
我叫佘志东,本科和硕士均毕业于华中科技大学。参加工作后,到目前为止,我的职业生涯可以分为两个阶段。第一个阶段是通讯行业,主要服务于朗讯、思科、华为等头部通讯公司,从 Java 工程师成长为软件架构师,是早期思科视频云平台的设计者和核心开发者。
从 2015 年开始,我进入了互联网行业,先后服务过唯品会、京东等知名互联网公司,任职资深架构师,擅长高并发分布式软件架构与开发,也是京东交易平台上海团队负责人,曾负责过京豆、预售、秒杀等核心系统。
每年的 618 和双 11,京东大促看交易,交易大促看预售开门红,历经了三年内预售流量和订单增长十几倍的系统稳定性的巨大挑战。2020 年初,在疫情背景下,我带领团队日夜奋战,为全民抢购口罩项目保驾护航,所负责的秒杀系统成功扛住了三百万人同时秒杀的巨大压力。
作为一个常年奋战在一线的架构师,我为我参与过的项目感到自豪,也希望能在这里将这份收获与沉淀传递给你!
随着技术变革,秒杀系统、电商行业乃至整个互联网还会迎来诸多挑战,时代会对技术人提出更高的要求。所以,在当下,我们更应该时刻保持好奇心,保持求知欲,保持激情。“学海无涯苦作舟”,让我们一起苦中作乐,通过学习持续武装自己!
最后,希望这门课能让你在动手实践中,对秒杀系统有一个新的感悟。更多疑惑与思考,或是在实践中遇到了哪些困难,都欢迎你在留言区中提出,我们共同探讨。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

该文章是一篇关于设计高并发、高可用秒杀系统的实践指南。作者从业务挑战、技术选型、系统搭建、高可用建设、风控和系统优化等六个部分详细介绍了秒杀系统的设计原则和实战技巧。课程设计亮点包括手把手搭建秒杀系统、涉及的编程语言和适用人群广泛。作者佘志东具有丰富的通讯和互联网行业经验,曾在头部互联网公司担任资深架构师,成功应对了大规模交易和疫情期间的系统挑战。他希望通过这篇文章和课程,将自己的经验传递给读者,鼓励大家保持好奇心和求知欲,持续武装自己。整体而言,该文章对于想要深入了解秒杀系统设计原理和实际应用的电商技术从业者具有重要的实践指导意义。

2021-09-2255人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你搭建秒杀系统》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(19)

  • 最新
  • 精选
  • 菜心1986
    请问,这里的百万并发是打到服务端的有效信息么? 这里的百万和通常说的几亿流量是怎么区别的啊。

    作者回复: 是的。区别在于时间单位,咋们这个专栏提到的百万是指秒级,而其他书里提到的亿级流量一般是1天内的pv

    2021-09-23
    2
    7
  • 呆萌白的大白。
    秒杀最重要的就是把流量挡在数据库之前。只让真实生效的数据写入mysql。挡流量最重要的两步,第一步是限制每个用户单位时间内的请求访问。第二步让所有用户请求依次排队进行。关键就是第二步需要用到高性能低延迟分布式锁,java恰好有开源的Redisson解决了秒杀中60%的问题。这个库火到什么程度star和fork比mariadb都多,虽然这个比较不恰当但也侧面反映了该库牛逼的地方。但很多语言没有这个库python go都没有,也没有成熟稳定可替代的。这就是为什么很多人问该项目的主编程语言。希望作者大大能有一个更通用的分布式锁解决方案。可以不看语言,不看库。

    作者回复: 你这里说的redisson是redis官方推荐的Java客户端,封装了redis的分布式锁功能,总的来说,就是简单的用lua脚本整合基本的set命令实现锁的功能,其实其他的语言也可以类似实现。

    2021-10-14
    2
    5
  • 学会用实力去谈条件
    可以简单分享下:线上业务故障/事故的级别定义吗

    作者回复: 一般会从事故的影响大小去定级。几个维度:资金损失,订单损失,客诉量。至于具体是多少阈值,要结合自身业务看了。

    2021-09-25
    2
    4
  • 阿福
    项目是用什么语言,Java吗?

    编辑回复: Nignx服务有Lua语言,后端服务都是Java。

    2021-09-22
    3
  • 李威
    老师在文中提到的三百万并发,请问是用了多少台机器做到的呢,以及机器的配置是如何的,感谢。

    作者回复: 秒杀涉及整个交易链路很多的系统,比如商详页,结算页,商品,订单,支付,促销等环节。各个系统根据秒杀场景视情况独立隔离部署,而秒杀系统一般负责隔离秒杀结算页,结算页如本专栏介绍分网关层和业务层,为支持百万秒级并发,网关层一般需要几十台物理机或高规格容器(32C),而业务层也需要不少容器来支持。综合整个链路的系统,大概几万C的计算资源是少不了的。

    2021-10-19
    2
  • _xcc
    还想问有没有代码仓库,看到Github地址就满足了

    编辑回复: 安排!

    2021-09-22
    1
  • 张申傲
    道阻且长,行则将至。打卡

    编辑回复: 期待同行!

    2021-09-22
    1
  • sky
    虽然语言只是一个工具,但还是想问下作者是用GO来实现嘛 是的话就下单了啊

    编辑回复: 抱歉,不是。Nignx服务有Lua语言,后端服务都是Java。

    2021-09-22
    1
  • Geek_d0863b
    怎么进群啊

    编辑回复: 课程介绍页有链接哈

    2021-09-27
    2
  • LouisYuan
    希望老师后面讲解的时候可以少一点语言相关的,让对Java不了解的也能看明白

    编辑回复: 收到,我反馈给老师。

    2021-09-25
收起评论
大纲
固定大纲
三个问题
课程设计
自我介绍
显示
设置
留言
19
收藏
63
沉浸
阅读
分享
手机端
快捷键
回顶部