1.秒杀系统架构设计的总体概述

原文连接:https://www.toutiao.com/i6709609676213862923

秒杀页面

1.什么是秒杀

秒杀就是同一时刻有大量的请求争抢购买同一商品并完成交易的过程,就是大量的并发读和并发写。

2.秒杀系统需要解决哪些问题

秒杀其实主要解决两个问题:一个是并发读,一个是并发写。

并发读的核心优化思路:减少用户到服务端来读取数据,或者让他们读取更少的数据。

并发写的核心优化思路:在数据库层面独立出来一个库,并做特殊的处理。

另外我们还要针对秒杀系统做一些意料之外的情况设计兜底方案,以防最坏情况发生导致系统不可用。

3.秒杀系统的整体架构

秒杀的整体架构可以概括为“高可用”、“数据一致性”、“高性能”这三个点。

高可用:整个系统架构要满足高可用,这是最基本的前提。流量在预期之内时系统肯定要稳定,流量超出预期也能正常提供服务,基本前提是你要保证秒杀商品能顺利的被卖出去。

数据一致性:整个系统架构要满足数据一致性,这是其次的要求。就是你秒杀商品设置了多少,卖出去的就一定不能超出这个数量,否则就会给平台造成损失。

高性能:整个系统架构要满足高性能,这个属于带光环的要求。不光要在服务端做极致的性能优化,整个请求链路上也要做协同优化,每个地方优化一点,系统整体的性能就提高了一个档次,否则如何支撑那么大的并发量。我们将从设计数据的动静分离、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这几个点重点介绍。

4.秒杀系统整体架构原则

如果你是架构师,如何构建一个超大流量并发读写、高性能、高可用的系统,需要考虑以下5个因素

数据尽量少

请求数尽量少

请求路径尽量短

服务依赖尽量少

不要有单点服务

4.1 数据尽量少:数据尽量少不仅包含用户的请求数据尽量少,还包含服务端返回给用户的数据尽量少 ,以及服务依赖的数据尽量少,如数据库。  因为大家都知道数据要想在网络传输,需要进行编解码、压缩、序列化与反序列化等等处理,这些都是需要消耗cpu资源的,减少数据的传输,可以降低cpu的消耗,将cpu资源用在刀刃上,例如秒杀页面可以去除一些装饰效果。

4.2 请求数尽量少:用户页面请求(不只是页面请求,还有服务端请求依赖的服务)返回数据后还需要进行必要的页面渲染,比如css、图片等,每建立一个请求/断开一个请求,都要经过诸如三次握手/四次挥手的过程,这些都会加大资源的消耗和时耗。最常用的解决方式是将多个相关联的请求合并,服务端再做解析,同时返回多个请求的信息。

当然也不是请求量最少就是最好的,比如将所有请求封装成单次请求,那单次请求返回的数据就比较庞杂了,单次请求性能肯定会受到影响。

4.3 请求路径尽量短:路径是指用户发出请求到返回数据的整个过程中,所经过的中间节点,每经过一个节点就会产生一个链接,如socket链接。

当一个节点的可用性为99.9%的话,假如需要经过5个节点,那么99.9%的5次方就是99.5%,增加了调用的不确定性,减少了系统的可用性。缩短请求路径不仅可以增加可用性,还可以提高系统性能,因为调用的服务资源相对少了。实现缩短访问路径的一种方式是将多个强依赖的应用合并部署在一起,将远程调用变为JVM内部的方法调用。

4.4 依赖要尽量少:这里的依赖指的是服务强依赖。

比如秒杀系统展示页面,这个页面需要强依赖商品信息、用户信息,而优惠券、秒杀成功列表不是必要的信息,这些弱依赖不是必要的情况下可以省略。要实现减少依赖,可以通过给系统分级,比如由强到弱依次分为0级系统、1级系统、2级系统,0级系统强依赖的系统也是最重要的系统。0级系统要减少对1级系统的强依赖,在极端情况下可以将1级系统降级,防止0级系统被1级系统拖垮。例如支付系统是0级,而优惠券系统是1级,在极端情况下可以将优惠券系统降级,让支付系统可以正常提供服务。

4.5 不要有单点:系统中的单点是系统架构的一大忌。

应用系统如何避免单点,关键是实现服务的无状态化(serverless),这样就可以对服务节点进行动态的扩容。

而存储系统很难实现无状态化,因为数据要存储在磁盘上和机器绑定,这种情况下一般是通过冗余多个备份的方式来解决单点问题。

5.不同场景下的架构

5.1 秒杀初期

优化改造手段:如果你要快速搭建一个秒杀系统,只需要在你的商品购买页增加一个定时上架功能,仅在活动时间内才能让用户点击购买按钮,当商品库存卖完了活动也就结束了。

来看下下面某网站的秒杀页面:


5.2 请求量达到1w~10w的秒杀系统

优化改造手段:

将秒杀系统独立成一个单独的系统,以集群的方式做系统部署,可以独立的针对该系统做优化。

引入缓存,将热点数据放入缓存,如库存、用户抢购行为等。

引入秒杀答题,防止秒杀器之类的抢单机器,而且也可以将请求分散。


10w请求架构

5.3 请求量达到100w的秒杀系统

优化改造手段:

对秒杀页面进行彻底的动静分离,静态数据走cdn,秒杀详情页作为cdn的回源地址,不需要刷新整个秒杀页面,只需要向服务端请求很少的动态数据。

服务端对秒杀商品、库存提前进行本地缓存,不需要再去调用依赖的服务系统,甚至有时候不需要去分布式缓存系统查询数据,这样即减少了系统远程调用,又可以减少对分布式缓存系统的访问压力。

对热点数据库进行独立部署,可以将库存热点独立成一个单独的数据库。

引入限流保护机制,防止超出预期的流量压垮系统。


百万请求架构

可以看出,系统面对读写压力越来越大,定制的优化手段越来越多,系统越来越不通用,比如加入了本地缓存,而本地缓存收到单机内存的限制,商品数量不能太多。所以,想要极致的性能,就会损失系统的通用性、易用性、低成本等等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354