You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
10 KiB
Markdown

2 years ago
# 开篇词|如何设计一个高并发、高可用的秒杀系统?
你好,我是志东,欢迎和我一起从零打造秒杀系统。
说起秒杀系统啊,我相信你一定听过,甚至亲身参与过秒杀活动。作为技术人,你应该也好奇和思考过秒杀系统背后的实现方案,或者你在面试的时候被问到过,毕竟说它是高频考点一点不夸张。
因此,可能你已经搜索过秒杀系统的实现,对其有了一定的了解。但我们常说理论和实践是有距离的,知道一些基本的设计理念,其实远不能完成体系化学习的目标。“纸上得来终觉浅,绝知此事要躬行”,我相信头部电商百万用户同时秒杀的实战经验,会是个不错的加持,可以帮助你深刻理解技术难点。
所以,我来了!作为曾经的头部电商平台的秒杀系统负责人,我经常会和同事、朋友们讨论秒杀系统,当然在设计过程中,我们也确实遇到了很多问题。那么作为整个专栏的开篇,我想先就学习秒杀系统的**共性问题**做一个解答,期望和你对齐目标,然后我们一起向终点发起挑战!欢迎加入思考。
## 三个问题
**问题一:为什么需要秒杀系统?秒杀系统最大的优势是什么?**
通俗点讲,电商平台的本质是在线上撮合买卖双方的购销需求,达成交易。虽然是线上交易,但也遵守朴素的经济学原理,供求关系决定了商品的经济活动。当**供求平衡**时,买方和卖方处于对等关系,双方是相对稳定、和谐的;当**供大于求**时,这时候市场成了买方市场,买方处于主动地位;当**供不应求**时,这时候市场是卖方市场,卖方处于有利的主导地位。
买卖双方的关系不同,决定了电商平台会采用哪种营销方式。当供大于求,一般会采用各种促销让利的方式,吸引消费者购买,常见的促销方式有单品满减、总价优惠、赠品、会员优惠等;当供不应求,就需要有计划地设置营销活动、用户参与门槛以及限购规则,尽可能的让商家利益最大化,同时惠及更广泛的消费者。
![](https://static001.geekbang.org/resource/image/dc/79/dcbf846eb29232268a3ae01a8776b479.png?wh=1346x686)
当供需出现极度不平衡时不管是线下还是线上都会出现抢购的情况。上面这张照片是1992年深圳市首次发行股票时群众抢购的情况“利”字驱动抢到即是赚到万人空巷。同样在线上当1499元平价茅台上架时当抢到口罩意味着守护更多一份健康时流量激增更是盛况空前。因此回答为什么需要秒杀系统其实很简单那就是**商品的极度供不应求**。
那么秒杀系统又有哪些优势呢对于这些极度供不应求的爆品合理地设置活动适时地释放库存可以持续为电商平台带来稳定的热度和流量可观的VIP会员费以及技术口碑的认同。当然通过秒杀系统电商平台也可以对参与用户进行筛选杜绝黄牛和刷子让爆品惠及更广更公平。
**问题二:京东、阿里巴巴等头部电商平台都把建设秒杀系统放在了什么地位?**
在头部电商平台,除了售卖我们前面讨论的爆品外,更多售卖的是普通商品,这两类商品特点鲜明,爆品具有流量激增的特点,而普通商品流量则比较均衡。
这里我想请你思考一下:如果这两类商品不加区别,直接在电商平台上一块进行交易,会有什么问题?
没错灾难性的后果容易引发平台P0级重大事故。究其原因主要就在于秒杀流量是突发式的而且流量规模很难提前准确预估如果混合在一起势必会对普通商品的交易造成比较大的冲击。
因此,对京东、阿里而言,即使需要投入新的资源,也是需要单独搭建一套秒杀系统的,它将作为**交易体系非常重要的一个核心系统**。
可见秒杀在京东、阿里具有非常重要的地位它是非常重要的营销手段之一。每年的618和双11两次大促京东都会投入大量的人力资源和机器资源来进行备战在备战过程中都会将其作为一个独立专项进行推进从专项架构梳理、流量预估、全链路压测到专项预案演练等再到集团技术VP的专项汇报都体现了秒杀在大厂中不可或缺的地位。
而在平常,由于爆品运营的日常化,秒杀系统每天都在承担着重要的使命,同理对技术团队来说,每天都需要像大促那样做好秒杀的稳定保障工作。
**问题三:秒杀系统对于电商技术从业者意味着什么?为什么要学习秒杀系统?**
秒杀系统是电商技术从业者绕不开的一个话题,大到京东、阿里这样的头部电商,小到新兴的社区团购公司,都需要通过秒杀促销活动进行拉新留存,或持续引流保持热度。因此对于从事电商行业的同学来说,设计和开发秒杀系统就是一门必修课。
退一步说,即便是电商领域范围广、内容多、分工细,当前你的工作范围并不涉及秒杀系统,你也可以花些时间来系统学习一下。
一方面,这门课程里介绍的一些高可用、高性能、高并发的设计思路遵循普适的原则,在设计其他电商系统时你可以举一反三;另一方面,据我了解,大部分的电商面试场景都会考核秒杀系统的设计能力,而从我自身这么多年作为面试官的经验来看,很多候选人或多或少能描述出一些秒杀的设计思路,比如有些同学知道怎么进行库存控制,有些知道隔离,有些知道限流等等,但是能够系统地讲出怎么设计一个秒杀系统,这样的候选人少之又少。
讨论完这几个问题,你是不是已经开始好奇这门秒杀课会有什么不一样的地方?毕竟电商发展到今天,秒杀系统已经不是个新鲜的话题了。那么闲话少叙,我们一起看看课程设计。
## 课程设计
首先,我们说说课程亮点。为了让你对秒杀系统有一个全面的认知,这门课程我会手把手带你搭建一个秒杀系统,从基础的设计原则讲起,到高阶的设计技巧实战都会涉及,你看到的、学到的将是**一个可扛百万流量的秒杀实战项目**。
这里我十分鼓励你跟着课程一步步验证就像我开始说的没有什么是比你亲手实践一遍收获更大的。这里附上GitHub地址[https://github.com/sanyecao-seckill](https://github.com/sanyecao-seckill)以及所使用的编程语言Nignx服务有Lua语言后端服务都是Java。
所以说,这门课的受众目标也会较为广泛,它既适用于没有太多经验的初级工程师学习和参考,也可以让相对经验丰富的高级电商从业者查漏补缺,完善学习体系。
接下来,我们看看具体内容,共分为六个部分。
**前期准备:**这部分我会从秒杀的业务挑战开始讲起,带你看看电商平台的秒杀玩法,总结设计原则;接着我会带着你做秒杀的技术选型,安装基础环境。
**系统动工:**这部分的内容比较基础,我会对秒杀系统进行业务解构,开始着手搭建秒杀的项目工程,梳理秒杀的业务流程,分析系统提供的接口,填充秒杀的业务实现,最终完成一个最简秒杀系统。
**稳定压倒一切:**这部分聚焦在“稳”上,在最简秒杀系统的基础上,我将带着你进行高可用建设,重点讲解秒杀的隔离、流控、削峰、限流、降级、热点和容灾。
**准确无误:**这部分聚焦在“准”上,我们将通过防刷和风控,学习如何保证商品不卖给黄牛和刷子,以确保秒杀的公平性;接着会介绍秒杀的库存和限购设计,以确保商品不超卖,符合限购规则。
**雷令风行:**这部分聚焦在“快”上,我将带着你一起进行系统优化,从而让我们的秒杀系统响应更快,用户体验更好。
**尾声:**最后就是总结部分,梳理整个实战项目的关键点;另外我将结合自身经验,带给你在头部电商的秒杀玩法中,除了上述技术内容外的业务协同思考。
![](https://static001.geekbang.org/resource/image/85/f1/85eee31f737518f3d26f82ed705399f1.jpg?wh=1896x814)
值得一提的是,每节课我都会布置一道思考题,你要做好准备哦,我们可以一起互动解决。
## 自我介绍
那么分享到这里,你可能还不认识我,这里做个自我介绍。
我叫佘志东本科和硕士均毕业于华中科技大学。参加工作后到目前为止我的职业生涯可以分为两个阶段。第一个阶段是通讯行业主要服务于朗讯、思科、华为等头部通讯公司从Java工程师成长为软件架构师是早期思科视频云平台的设计者和核心开发者。
从2015年开始我进入了互联网行业先后服务过唯品会、京东等知名互联网公司任职资深架构师擅长高并发分布式软件架构与开发也是京东交易平台上海团队负责人曾负责过京豆、预售、秒杀等核心系统。
每年的618和双11京东大促看交易交易大促看预售开门红历经了三年内预售流量和订单增长十几倍的系统稳定性的巨大挑战。2020年初在疫情背景下我带领团队日夜奋战为全民抢购口罩项目保驾护航所负责的秒杀系统成功扛住了三百万人同时秒杀的巨大压力。
作为一个常年奋战在一线的架构师,我为我参与过的项目感到自豪,也希望能在这里将这份收获与沉淀传递给你!
随着技术变革,秒杀系统、电商行业乃至整个互联网还会迎来诸多挑战,时代会对技术人提出更高的要求。所以,在当下,我们更应该时刻保持好奇心,保持求知欲,保持激情。“学海无涯苦作舟”,让我们一起苦中作乐,通过学习持续武装自己!
最后,希望这门课能让你在动手实践中,对秒杀系统有一个新的感悟。更多疑惑与思考,或是在实践中遇到了哪些困难,都欢迎你在留言区中提出,我们共同探讨。