写点什么

1 号店 11.11:秒杀排队系统设计理念

  • 2015-11-11
  • 本文字数:2555 字

    阅读完需:约 8 分钟

1、秒杀的场景

电商中为了吸引顾客、聚集人气,经常会策划一些秒杀活动。活动中售卖的商品,要么价格远低于市场价格,要么比较稀缺(如一些新发布的商品)。这些商品电商一般都会限量、限时销售。无疑这些商品对消费者的诱惑力是巨大的,消费者蜂拥而来,往往几秒钟就可以将商品抢购一空。而对于电商系统来说可能更多的是考验。

2、传统秒杀系统的痛点

首先,秒杀的场景决定了秒杀是一场速度的比拼,也就是俗话说的“手快有、手慢无”。大家都争着在活动开始后,第一时间将商品抢到,完成下单。因此秒杀活动开始的一瞬间会有大量的流量涌入,几倍、甚至于十几倍的流量对系统的冲击不可谓不大。如果系统没有足够的 capacity 或应对措施,很可能就被瞬时高流量给压垮了。

其次,突如其来的高流量,给系统各个模块都来了一连串的压力,系统可能会因此变慢,而且可能会彼此影响,影响可用性。比如:数据库更新同一个商品库存,需对同一行记录加锁,随着并发的压力逐渐增大,数据库更新的性能是逐渐下降的。从而引起提供库存 service 的应用服务性能下降,连锁的影响到下单 service 的性能,最终反馈到消费者的可能就是整个网站购物流程性能差、响应慢。而面对响应慢的系统,很多消费者可能采取反复刷新,多次尝试,这无疑又增大了对系统的压力。

还有,上述种种给消费者带来的往往是体验上的痛苦。如:网站响应慢,点击抢购按钮没反应。好不容易可以操作了,却发现秒杀活动已经结束,消费者的参与感比较差。久而久之,可能就对此类活动失去了兴趣。

3、1 号店秒杀系统的设计理念

基于以上秒杀场景下的痛点,1 号店的秒杀排队系统在设计时主要考虑以下几点:

  1. 限流:当秒杀活动开始后,只有少部分消费者能抢购到秒杀商品,意味着其实大部分用户的流量传达到后台服务后都是无效。如果能引导这大部分的流量,不让这大部分的流量传达到后台服务,其实对我们系统的压力就很小了。因此设计思路之一就是,仅让能成功抢购到商品的流量(可以有一定余量)进入我们的系统。
  2. 削峰:进入系统的有效流量虽然总量不一定是很大的,但却是在很短的时间内涌入的,因此会存在很高的瞬时流量峰值。总量相同的流量在 1 秒钟进入系统,和在 10 分钟均匀地进入系统,对系统的冲击是相差很大的。高峰值的流量往往能将系统压垮。因此另一个设计思路是,如何将进入系统的瞬时高流量拉平,使得系统可以在自己处理能力范围内,将所有抢购的请求处理完毕。
  3. 异步处理:传统的系统对于请求是同步处理的,即收到请求后立即处理并把结果返回给用户。我们的系统有了削峰的设计后,请求不是被立刻处理的,因此就要求我们能将同步的服务改造成异步的。
  4. 可用性:我们设计时始终把系统的可用性放在重要的位置,针对系统可能出现的各种状况,都尽最大程度地保证高可用。
  5. 用户体验:系统设计一定要充分考虑用户体验。消费者点击抢购按钮后,无论是否能抢到商品,期望是能得到及时的反馈。系统上发生任何故障也要尽可能的保证用户体验的损害减到最小。

4、系统架构简介

现在来简单介绍下我们秒杀排队系统的架构,从大的方面来说分为三个主要模块:

  1. 排队模块:负责接收用户的抢购请求,将请求以先入先出的方式保存下来。每一个参加秒杀活动的商品保存一个队列,队列的大小可以根据参与秒杀的商品数量(或加点余量)自行定义。排队模块还负责提供一系列接口,如:给已进入队列的用户查询下单状态的接口,给调度模块拉取请求的接口,服务模块回写业务处理状态的接口等。
  2. 调度模块:负责排队模块到服务模块的动态调度,不断检查服务模块,一旦处理能力有空闲,就从排队队列头上把用户访问请求调入服务模块。并负责向服务模块分发请求。这里调度模块扮演一个中介的角色,但不只是传递请求而已。它还担负着调节系统处理能力的重任。我们可以根据服务模块的实际处理能力,动态调节向排队系统拉取请求的速度。作用有点类似水坝的闸门,当下游干旱时就打开闸门多放些水,当下游洪涝时,就放下闸门少放些水。
  3. 服务模块:是负责调用真正业务处理服务,并返回处理结果,并调用排队模块的接口回写业务处理结果。我们设计这个模块,是为了和后面真正的业务处理服务解耦。目前我们的系统不只支持秒杀抢购这种业务场景,后续有其他适用于排队系统的业务都可以接入,如:领取抵用券等等。同时我们也可以针对后面业务系统的处理能力,动态调节服务模块调用后面业务处理服务的速度。

5、容错处理

任何系统都不可能一帆风顺,但我们要能在出现错误时仍旧保证系统的高用性和良好的客户体验。举几个简单的例子,比如服务模块调用后面服务时,出现调用服务超时怎么办?对此我们设计了对于超时的请求,可以重试的机制。再比如,如果后面真正的业务处理系统宕机怎么办?如果是传统系统的话,可能就面临系统无法使用的尴尬。而我们的系统已经是异步的了,因此加入排队队列的用户请求,在业务处理系统恢复后都可以得到处理。只要我们在前端给用户以友好的交互、提示,系统还是能提供一定质量服务的。

6、用户交互

因为我们的系统设计成异步的,因此消费者不再是像以前一样同步地去等待反馈。消费者需要一个途径来获取抢购的状态和进度。我们的主体流程大体上分为几个阶段:

  • 当等待人数大于 500 人,页面提示:排在您前面的人超过 500 位;
  • 当等待人数小于等于 500 人,页面提示:您已挤进第 *** 位;
  • 当等待时间大于等于 1 分钟,页面提示:剩余时间约 * 分钟。每次以分钟倒计时。
  • 当等待时间小于 1 分钟,页面提示:预计剩余 * 秒。
  • 抢购成功,后续跳转到订单支付页面

下面仅挑选 2 个 PC 端页面交互的设计供大家参考,

当然我们还提供了一些分支流程的提示与处理,如果大家感兴趣,更详细的情况可以到 1 号店亲自参与秒杀活动来体验。

7、总结

目前我们的秒杀排队系统已经应用于 1 号店的历次大促,并取得了良好的效果,受到业务运营和消费者一致的好评。优秀的系统一定是建立在对业务透彻理解的基础上,针对业务的场景与痛点,结合现有的技术有针对性的提供解决方案。同时技术上成功的系统,往往也推动着业务的发展,给业务更好的支撑和推动。


感谢郭蕾对本文的策划和审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-11-11 17:1224200

评论

发布
暂无评论
发现更多内容

Python数据可视化:数据分布图表可视化

不脱发的程序猿

Python 数据可视化 大数据分析

华为云弹性云服务器 ECS,如何引领行业高速发展?

路过的憨憨

读 2022 年 JavaScript 趋势报告

devpoint

typescript vite SOLID tauri

【深入浅出Seata原理及实战】「入门基础专题」带你透析认识Seata分布式事务服务的原理和流程(1)

洛神灬殇

分布式事务 seata Alibaba SpringCloud Alibaba Seata框架

华为云桌面Workspace荣获CSDN年度创新产品与解决方案大奖

Geek_2d6073

Jira + GitLab 实践 DevOps

跟YY哥学Jira

DevOps gitlab jenkins Jira

瑞萨E1/E20烧录工具自检方法

不脱发的程序猿

嵌入式 汽车电子 MCU 瑞萨 RH850

dcm4che 依赖下载异常

JefferLiu

安全、高效、便捷,华为云CDN助力企业体验升级!

i生活i科技

CDN

企业如何轻松上云?华为云弹性云服务器ECS给出答案

IT科技苏辞

告别“自建房”,华为云ECS为企业提供更优选

科技说

华为云云原生数据库,激发数据活力

与时俱进的时代

华为云数据库,安全、专业,值得信赖

与时俱进的时代

CSDN 2022年度榜单揭晓,华为端云协同智能流程机器人斩获大奖

Geek_2d6073

华为云为瑞星量身打造下载加速方案,助力瑞星完成产品升级

秃头也爱科技

2023-01-12:一个n*n的二维数组中,只有0和1两种值, 当你决定在某个位置操作一次, 那么该位置的行和列整体都会变成1,不管之前是什么状态。 返回让所有值全变成1,最少的操作次数。 1 <

福大大架构师每日一题

算法 rust Solidity 福大大

看不见的控制流 — Rust 异步取消问题的几点思考

Greptime 格睿科技

数据库 rust 异步编程 tokio

数据上云难?华为云对象存储服务OBS给企业最便捷体验

路过的憨憨

聊一聊华为云弹性公网IP的那些事儿

路过的憨憨

本地数据怎么备份上云?华为云对象存储服务OBS帮你实现

科技说

华为云CDN全站加速助力网站性能全面优化

i生活i科技

CDN

华为云CDN为企业下载加速,极大提升客户体验

i生活i科技

CDN

架构实战营 模块四作业

白杨

Java在Mac里启动一个新的Terminal

IT蜗壳-Tango

IT蜗壳教学

数据即价值,华为云大数据BI解决方案助力企业实现数据高效转化

秃头也爱科技

华为云OBS对象存储,企业存储的好帮手

科技说

Atlassian FaaS 云开发平台 Forge 解析

跟YY哥学Jira

Jira Atlassian 云版 app development Forge

华为云ECS,专为您打造安全、灵活、高效的应用环境

与时俱进的时代

华为云OBS助力企业解决数据存储难题

科技说

解决企业数据存储难题:华为云OBS,企业“上云”的不二之选

路过的憨憨

用大数据服务医疗行业,华为云大数据BI,为医院智能决策提供保障

秃头也爱科技

1号店11.11:秒杀排队系统设计理念_语言 & 开发_刘霄晖_InfoQ精选文章