微信号:frontshow

介绍:InfoQ大前端技术社群:囊括前端、移动、Node全栈一线技术,紧跟业界发展步伐。

秒杀系统,到底难在哪里?

2018-09-26 17:28 前端之巅

说起秒杀,我想你肯定不陌生,从双十一购物到春节抢红包,再到逢年过节抢⻋票,“秒杀”的场景在我们的生活中处处可⻅。简单来说,秒杀就是在同一个时刻有大量的请求,争抢购买同一个商品并完成交易的过程。用技术的行话来说,就是高并发读和高并发写。

我可以确定地说,能否设计一套满足业务场景和流量要求的秒杀系统,这也是对一个公司、一个团队、一个技术人综合能力的终极考验。

从架构角度来说,秒杀系统的整体架构可以概括为“稳、准、快”几个关键字。

所谓“稳”,就是整个系统架构要满足高可用,流量符合预期时肯定要稳定,超出预期时也同样不能掉链子,你要保证秒杀活动顺利完成,即秒杀商品顺利地卖出去,这个是最基本的前提。

然后就是“准”,你的业务需求是秒杀 10 台 iPhone XS,那就只能成交 10 台,多一台少一台都不行。一旦库存不对,那平台就要承担损失,所以“准”就是要求保证数据的一致性。

最后再看“快”,“快”其实很好理解,它就是说系统的性能要足够高,否则你怎么支撑这么大的流量呢?不光是服务端要做极致的性能优化,而且在整个请求链路上都要做协同的优化,每个地方快一点,整个系统就完美了。

对于如何满足解决“稳、准、快”的问题,我有一些自己的心得,也总结过一些原则。比如:

  1. 数据要尽量少,这里面包括用户请求的数据和系统依赖的数据。

  2. 用户端的请求数能少就尽量少。

  3. 用户从发出请求到返回数据这个过程中,路径要尽量短。

  4. 要完成一次用户请求必须依赖的系统或者服务要尽量少。

  5. 不要有单点。

而基于这些原则,我们应该怎么落地呢?在“如何设计一个秒杀系统”这个专栏中,我会一一为你介绍具体的解决方案。比如包括:

  1. 如何才能做好动静分离?有哪些方案可选?

  2. 如何理解 QPS、响应时间和线程数之间的关系?

  3. 如何有针对性地处理好系统的“热点数据”?

  4. 秒杀减库存的方案应该如何设计?

这些点都是秒杀系统设计过程中的关键要点。我希望能够通过这一专栏,借着这个国庆假期,让你能够对秒杀系统有一个多维度立体化的认识。最起码在下一次面试或者领导让你设计秒杀系统的时候,你能够脱口讲出秒杀类系统设计的整理思路和其中的几个关键点。

另外,秒杀系统中设计到的这些优化措施,其实都能够应用到你现有的工作中。

我是谁?

我是许令波,花名“君山”,前阿里巴巴高级技术专家。2009 年大学毕业后我就加入了淘宝,并在工作中积累了丰富的大流量高并发网站架构设计和优化的经验,尤其是针对“秒杀”这个场景。

我在阿里经历了淘宝系统的 PV 从 1 亿到 50 亿的业务升级,也见证了秒杀系统的建设和演进过程。因此,我对如何将系统进行极致优化,才能扛住洪峰般的流量请求深有体会。任职期间,我一直参与淘宝高访问量的系统页面详情系统的优化工作,设计并实现了 sketch 模板引擎将服务端性能提升近 30% 左右。

我希望能够通过“如何设计一个秒杀系统”这一精品专栏将我过去七年的实战经验和感悟分享给你,同时,你也可以借助国庆这七天假期,能够对秒杀类高并发读写系统的架构设计和实现思路有一些自己的理解。

 限时福利

限时秒杀价 ¥ 9.9 ,原价 ¥ 19.9 / 7 期, 10 月 1 日恢复原价

关注“极客时间”微信公众号,回复关键词“秒杀”,我为你准备了一套免费秒杀学习资料,限时领取。

扫描上图二维码或点击「阅读原文」链接,试读或订阅专栏。

 
前端之巅 更多文章 Nuxt 2.0正式发布:支持 Webpack 4、ES module 百度智能小程序月活破亿,今日正式开放申请 Electron 3.0正式版发布,新特性详解 Stack Overflow预测:Python将在五年内超越JavaScript 为什么说React 16是开发者的福音?
猜您喜欢 Web 安全之跨站脚本攻击(XSS) IDF15:Xeon D被阉割?SSD性能的“色子效应” 如何用“大白话”描述量子通信? Raft算法赏析 Java编程 IO概述