11

常见分布式应用系统设计图解(十):电商秒杀系统

 3 years ago
source link: https://www.raychase.net/6434
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

常见分布式应用系统设计图解(十):电商秒杀系统

这篇是关于电商平台秒杀系统的。

首先,我觉得 “秒杀” 是一个中国色彩浓重的词,这样的概念在西方电商系统中也有,但只有在中国,本来业务量就已经如此之巨大了,还将其如此发扬开来。因此顶尖的秒杀高并发场景,还真是基本上只有在中国的电商平台系统中,才能见得到。

其次,我觉得对于系统设计的学习,电商秒杀系统这样的极致,即便再精彩,还是应当放在第二位的。扎扎实实地把常规的高并发系统设计做好,才是最重要的。因为无论秒杀系统使用怎样的特殊技巧和手段,高并发分布式系统才是一个秒杀系统工作的根基。

有了以上说明,现在再来谈论电商秒杀系统。电商秒杀系统,它首先是一个电商系统,因此一个大型的电商系统一般要至少包括这样几个功能:

  • 商品入购物车

因此,对于上面这张图,先从电商系统的角度来看。为了实现电商系统的基本功能,应该具备这样几个服务:

  • Product Service,包含产品元信息。
  • User Service,包含用户信息。
  • Storage Service,包含产品库存信息。
  • Payment Service,提供专门的支付服务。
  • Order Service,订单服务。
  • 当然还有一些没有列出来,比如搜索、陈列产品的服务等等。

流程上面:

  • 下面实线部分就是订购流程的主体,其中的多数内容,无论是不是秒杀,都是一样的。
  • 用户进行选择订购支付,订单下成功以后,会去库存里面暂时锁住货物记录,给用户时间支付,用户支付成功以后,会修改订单状态,订单系统就会相应地修改库存该货物的状态。
  • 如果超过一定时限没有支付成功,订单系统会异步修改库存状态,把该货物的状态改回 “可订购”,并关闭当前订单。

有了基本的电商系统角度对组件和流程的认知,再来看秒杀的角度。

  • 上面虚线的部分,就是秒杀活动前准备的部分。管理员会创建秒杀活动记录,这些秒杀货物会单独标记和存放,以避免被普通订购业务所涉及。在活动开始前秒杀服务器会加载相应的数据到内存中,这部分下面会提到。
  • 对于为了秒杀而进行的系统设计与优化,首先,最重要的一条,是要做到系统隔离。秒杀系统要尽可能地不要影响到主要业务,因此这里面的 web 服务,要单独使用为秒杀服务配备的服务器。
  • 其次,要尽可能地把请求拦截在流程的前部,并平滑请求量。
    • 比如,秒杀链接生成的时候,用户的请求可以不用全部放进来,对于流量特别大的情况,让大部分用户的请求从用户就近节点的 CDN 走,告知用户秒杀结束。只有少部分用户的请求放到中心节点来。
    • 比如,对于秒杀页面的加载,静态资源要尽可能在动静分离的前提下,地使用页面缓存和从 CDN 去获取,以减缓对主系统的压力。
    • 再比如,通过点击后按钮置灰、验证码、答题、token 等方式减少和延缓用户请求,也过滤掉那些脚本请求。
    • 最后,也是最重要的,是系统一定要具备成熟的流控机制,丢弃无法处理的请求。
  • 再次,系统要尽可能地减少请求处理的时间,从而增大吞吐量。
    • 比如,在 Web Server 上要引入缓存,将秒杀商品的信息加载到内存中。每台机器都分配一定量的可秒杀商品,这些商品页全部加载到内存中。秒杀防重也在内存中做。
    • 考虑下单的过程可能是一个系统开销较大的过程,可以将下单的请求放到队列中维护,Order Service 会异步处理。这些异步处理的过程,对于一致性要求高的部分,可以使用单独的锁服务来保证。

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》


Recommend

  • 35

    “ Top K 系统 ” 是非常常见的一种子系统,基本上,就是从全量巨大的统计数据中,筛选出数值最大的 K 个来并按序展示。这样的筛选可以是全时间内的,也可以是最近某一段时间内的;可以是全分类的,也可以是某个特定分类的。 具体...

  • 25

    输入提示系统,指的就是 “typeahead”,比如 Google 搜索,输入一个单词的前几个字母,后面最常用的几个搜索词会被联想出来。有时,它也需要具备一定程度的字符拼写错误自动更正能力。

  • 15

    常见分布式应用系统设计图解(五):Proximity 系统 今天是介绍 Proximity 系统,我不知道怎么翻译恰当,就保留英文原文。虽说词义上说的只是 “相似度”,但多数说的是 “地理” 上的相似度。因此,这一类系统多为基于地理上的邻近程度来提...

  • 14

    常见分布式应用系统设计图解(四):输入建议系统 输入建议系统,指的就是 “typeahead”,比如 Google 搜索,输入一个单词的前几个字母,后面最常用的几个搜索词会被联想出来。有时,它也需要具备一定程度的字符拼写错误自动更正能力。

  • 16

    常见分布式应用系统设计图解(二):Feed 流系统 今天记录 Feed 流系统的设计学习笔记,Feed 流常见系统包括 Twitter、微博、Instagram 和抖音等等,它们的特点是,每个用户都是内容创作者,每个用户也都是内容消费者,每个用户看到的内容都是不...

  • 8

    常见分布式应用系统设计图解(一):即时消息系统 在自己学习各种各样软件系统,特别是分布式系统的过程中,我做了一些笔记,有许多常见的、经典的系统,是非常值得学习和总结的。它们数量不算多,但具有典型意义,可能这样的系统也就十几个。

  • 9

    这篇讲的是证券交易系统,这类系统包含的内容很多,但是我们还是把目光放在核心的交易部分,比如说股票交易。在某个可交易时间,如果卖家 A 要以至少 y 的价格卖掉股票 x,卖家 B 愿以至多 y 的价格买入股票 x,那么这个交易就可以发生。

  • 8

    短网址系统可能是最常见的分布式系统设计问题之一了,本身从业务需求上说,读远多过写,而且数据结构确定且简单,数据量小,还易于使用缓存,因此本身难度在分布式系统的问题里面算是比较低的。另外,这个系统本身 “分布式” 的特性也比较...

  • 7

    常见分布式应用系统设计图解(十四):日志系统 典型的互联网应用的日志系统,从功能需求上看主要包括收集,存储和分析,以及展示这样三个部分,因此整个系统我觉得也可以按此思路大致可以分为三个部分: ...

  • 5

    常见分布式应用系统设计图解(十五):支付系统 支付(Payment)系统可以很复杂,比如可以和银行打交道,和信用卡系统打交道。如果我们考虑用户在一家电商买东西,...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK