还在纠结秒杀?看看 MQ 轻松搞定秒杀场景

开足码力,码动人生,本文首发公众号【 Craig无忌 】,关注这个一言不合就开车的的代码界老司机

本文 GitHub上已经收录 https://github.com/BeKingCoding/JavaKing , 一线大厂面试核心知识点、我的联系方式和技术交流群,欢迎Star和完善

前言

相信即使你是第一次听说消息中间件的概念,通过上一篇文章《十分钟入门消息中间件》的介绍,现在应该知道什么是 MQ ,为什么要使用 MQ 了。

我们先简单回顾一下,订单系统是整个电商交易平台的核心,在它与内部模块、外部第三方系统打交道的过程中,需要完成很多额外的步骤:

  • 为用户积分

  • 发放红包卡券

  • 库存扣减

  • 通知物流系统

  • 发送短信通知

在这里插入图片描述

在引入 MQ 后,我们可以让订单系统仅仅完成最核心的功能,然后将发送消息到 MQ。比如需要进行减库存,就发送一个消息到库存消息队列中,然后库存系统从这个 MQ 里获取消息再进行处理就可以,把这些很耗时的步骤慢慢执行,从而也实现了系统之间的解耦。

但 MQ 还有一个更加强大的功能:缓冲流量,削峰填谷,诸如双11这样的大促活动,瞬时间涌入的大量下单请求有可能直接压垮服务器,导致整个系统的瘫痪,通过使用 MQ 我们可以更好地解决流量突刺的问题。

本文就以秒杀场景为基础,看完后会有更清晰的认识。本文将会从以下几个方面来讲述相关知识,相信大家耐心看了之后肯定有收获,码字不易,别忘了「在看」,「转发」哦。

  • 经典的秒杀场景

  • 流量洪峰带来的难点

  • 使用 MQ 削峰填谷

  • 升级整体架构

正文

01 经典的秒杀场景

秒杀场景一般出现在类电商的 APP 中,双十一、618 这种打折大促已经屡见不鲜,各种节日都能成为剁手的理由。

就连饥饿营销也被各大公司玩的越来越6,像我自己喜欢球鞋,喜欢买AJ和椰子,有过抢鞋经历的同学一定知道有多痛苦,尤其是每次的结果都是这张图。

在这里插入图片描述

每年的双 11 活动在零点之后会开启一个特别大的折扣优惠,比如前五分钟下单买五件可以享受三折优惠。

全中国无数的男生女生,在双 11 之前几天就会在购物车精挑细选大量的商品,零点一到,疯狂点击下单。

每个接口对应的业务复杂度不同,有的接口一个请求可能要执行五六次数据库操作。即使我们用高配置的 16 核 32G 以及 SSD 固态硬盘的机器,当流量洪峰到来时,CPU、磁盘、IO 等负载都会瞬间飙升,一段时间后,系统是无论如何扛不住持续到达的请求。

在这里插入图片描述

02 流量洪峰带来的难点

经典的秒杀场景主要有两个特点:

(1)秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增;

(2)秒杀一般是访问请求量远远大于库存数量,只有少部分用户能够秒杀成功。

随之而来,对我们的系统就带来一系列要求:

(1)短时间内并发量激增,对系统负载压力大,容易造成崩溃;

(2)真正能秒杀成功的还是少数,天然的读多写少场景,如何对流量进行分配;

(3)分布式的环境下,如何做到一致性的处理;

(4)竞争资源有限,如何做到精准的控制,准时准点,不能多买,不能少卖,不能重复买。

而在这么多难点中,我们首要任务就是去解决并发量激增的问题,如果到达的请求太多直接压垮了服务器,那其他的功能根本无从谈起。

03 使用 MQ 削峰填谷

MQ 除了可以使用异步的方式实现系统间的解耦,更可以在双 11 这样的秒杀活动中,通过削峰填谷的方式,处理瞬时间涌入的大量请求。

在这里插入图片描述

什么是削峰填谷?

削峰填谷本身是电力行业的概念,电力企业通过必要的技术和管理手段,降低电网的高峰负荷,提高低谷负荷,平滑负荷曲线,提高负荷率,保证电网的稳定运行。

假设一个应用,它能够每秒处理 1000 个请求。如果在第一秒接收到 2000 个请求,而接下来的两秒都没有请求到达。

在这里插入图片描述

整个应用必然面临两个问题:

(1)在第一秒被 2000 个请求直接压垮;

(2)假设第一秒没有被压垮,它在这一秒时间内只能处理 1000 请求,第二第三秒却完全空闲,浪费了系统资源。

所以,我们可以通过 MQ 把请求突刺均摊到一段时间内,让系统负载保持在请求处理水位之内,同时尽可能地处理更多请求,从而起到“削峰填谷”的效果。

红色的部分是超出系统处理能力的部分,可以把红色的那部分消息平摊到后面空闲时去处理,这样既可以保证系统负载处在一个稳定的水位,又可以尽可能地处理更多消息。通过配置流控规则,可以达到消息匀速处理的效果。

04 升级系统架构

随着使用应用的用户越来越多,系统面临的压力也会越来越大,无论是并发量还是数据量,你会发现整个系统各个模块都需要进行优化。

一个高并发、大数据量的系统架构,需要不断的迭代和进化,涉及到大量的技术方案、架构重构。

针对秒杀的场景,上游发起高并发的下单操作,由于下游处理能力有限,两端速度不匹配。此时我们引入 MQ 可以对流量进行缓冲,并实现削峰填谷。

在这里插入图片描述

上游速度很快,每秒发起五万个请求也没关系,它只管往 MQ 中发。下游系统虽然每秒只能处理 1000 个请求,但它完全可以 follow 自己的节奏,每隔一段时间,主动拉取若干条信息,实施限流的效果,保护自身。

而在这个过程中,只需要引入 MQ 组件,对上下游的业务代码并不用有太多的修改。

在接下来的文章我会更加详细介绍,使用现在主流的消息中间件 RocketMQ 进行实现,敬请期待~

文末福利

小伙伴可以后台回复关键字进入对应的秋招/内推/面试群,我给大家整理了各大公司的内推通道、简历模板还有历年的笔试题,大家要好好准备哦。还可以帮助大家免费修改简历、模拟面试哦~

关注公众号「Craig无忌」

创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

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

推荐阅读更多精彩内容