冰河技术
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
  • 专栏介绍

    • 我要手把手教你搭建并研发一套抗瞬时百万流量的秒杀系统
  • 研发背景

    • 第01章:从多个角度聊聊为何要学习秒杀系统
  • 目标与挑战

    • 第02章:秒杀系统的目标与挑战
    • 第03章:秒杀系统高并发大流量的应对之道
  • 用户故事

    • 第04章:秒杀系统需求与流程梳理
    • 第05章:秒杀系统技术流程梳理
  • 架构设计

    • 第06章:秒杀系统总体方案目标与架构设计
    • 第09章:秒杀系统数据模型设计
  • 环境搭建

    • 第07章:秒杀系统基础环境搭建
    • 第08章:秒杀系统研发环境搭建
    • 第10章:基于DDD快速搭建秒杀系统项目并测试
  • 用户服务设计与实现

    • 第11章:用户登录授权认证流程的设计与实现
    • 第12章:访问登录授权限制接口的流程设计与实现
  • 秒杀活动设计与实现

    • 第13章:秒杀活动业务流程与接口设计
    • 第14章:秒杀活动后端业务与接口开发
    • 第15章:秒杀活动运营端业务开发
    • 第16章:秒杀活动用户端业务开发
  • 秒杀商品设计与实现

    • 第17章:秒杀商品业务流程与接口设计
    • 第18章:秒杀商品后端业务与接口开发
    • 第19章:秒杀商品运营端业务开发
    • 第20章:秒杀商品用户端业务开发
  • 秒杀订单设计与实现

    • 第21章:秒杀订单业务流程与接口设计
    • 第22章:秒杀订单后端业务与接口开发
    • 第23章:秒杀订单用户端业务开发
    • 第24章:秒杀订单运营端业务开发
  • 经典问题重现

    • 第25章:重现刷单流量问题
    • 第26章:重现库存超卖问题
  • 极致缓存设计

    • 第27章:混合型缓存设计场景与原则
    • 第28章:混合型缓存架构设计与技术选型
    • 第29章:混合型缓存通用代码设计与实现
    • 第30章:分布式锁通用代码设计与实现
    • 第31章:混合型缓存通用模型设计与实现
  • 整合极致缓存

    • 第32章:秒杀活动列表混合型缓存设计与实现
    • 第33章:秒杀活动详情混合型缓存设计与实现
    • 第34章:秒杀商品列表混合型缓存设计与实现
    • 第35章:秒杀商品详情混合型缓存设计与实现
  • 缓存领域事件

    • 第36章:领域事件通用缓存模型设计
    • 第37章:秒杀活动监听缓存领域事件的设计与实现
    • 第38章:秒杀活动发送缓存领域事件的设计与实现
    • 第39章:秒杀商品监听缓存领域事件的设计与实现
    • 第40章:秒杀商品发送缓存领域事件的设计与实现
  • 订单领域事件

    • 第41章:秒杀订单监听领域事件的设计与实现
    • 第42章:秒杀订单发送领域事件的设计与实现
  • 库存扣减防超卖设计

    • 第43章:秒杀扣减库存设计
    • 第44章:基于数据库设计并实现库存防超卖
    • 第45章:基于分布式锁设计并实现库存防超卖
    • 第46章:基于Lua脚本设计并实现库存防超卖
  • 单体到微服务

    • 第47章:从单体到微服务重构项目
    • 第48章:重现分布式事务问题
    • 第49章:基于TCC模型解决分布式事务问题
    • 第50章:基于AT模型解决分布式事务问题
    • 第51章:基于可靠消息最终一致性模型解决分布式事务问题
  • 缓存数据一致性

    • 第52章:零侵入重构秒杀活动异步事件后置处理器
    • 第53章:零侵入重构秒杀商品异步事件后置处理器
    • 第54章:零侵入重构秒杀订单异步事件后置处理器
  • 异步化设计

    • 第55章:异步化下单流程设计
    • 第56章:异步化下单编码实现
    • 第57章:异步化扣减商品库存流程设计
    • 第58章:异步化扣减商品库存编码实现
  • 库存分库分表与分桶设计

    • 第59章:商品库存分库分表与分桶设计
    • 第60章:商品库存分库分表与分桶编码实现
    • 第61章:下单流程整合商品库存分桶
  • 订单分库分表设计

    • 第62章:订单分库分表设计
    • 第63章:订单分库分表编码实现
    • 第64章:下单流程整合订单分库分表
  • 隔离与限制策略

    • 第65章:秒杀系统流量隔离策略
    • 第66章:秒杀系统规模限制策略
  • 预约系统设计与实现(含缓存)

    • 第67章:预约系统需求梳理与架构设计
    • 第68章:预约系统数据模型设计
    • 第69章:预约系统业务流程与接口设计
    • 第70章:预约系统运营端业务与接口开发
    • 第71章:预约系统用户端业务与接口开发
    • 第72章:下单流程整合预约系统
  • 预约系统优化

    • 第73章:预约系统分库分表设计
    • 第74章:预约系统分库分表编码实现
    • 第75章:预约系统整合分库分表
  • 秒杀系统削峰策略

    • 第76章:秒杀系统削峰总体概述
    • 第77章:打散客户端流量削峰
    • 第78章:消息队列削峰
    • 第79章:限流削峰
  • 分布式流控

    • 第80章:Sentinel概述与本地搭建环境
    • 第81章:秒杀系统整合Sentinel实现流控
    • 第82章:Sentinel核心技术与配置规则(加餐)
  • 单机限流

    • 第83章:基于QPS实现单机API限流
    • 第84章:基于线程池实现单机并发数限流
  • 业务网关

    • 第85章:业务网关概述与核心架构
    • 第86章:秒杀系统整合业务网关
    • 第87章:业务网关整合Nacos配置
    • 第88章:业务网关整合Sentinel流控
    • 第89章:业务网关整合Guava流控
    • 第90章:业务网关使用自带流控
  • 流量网关

    • 第91章:流量网关环境初步搭建
    • 第92章:流量网关项目搭建
    • 第93章:流量网关实现限流
  • 服务容错

    • 第94章:服务雪崩与容错方案
    • 第95章:服务降级核心原理与落地方案
    • 第96章:热点数据问题与解决方案
    • 第97章:秒杀系统实现服务容错
  • 服务配置

    • 第98章:凌乱的服务配置与解决方案
    • 第99章:秒杀系统整合Nacos配置中心
    • 第100章:实现配置动态刷新
    • 第101章:实现配置动态共享
  • 链路追踪

    • 第102章:链路追踪核心原理与解决方案
    • 第103章:秒杀系统实现链路追踪
    • 第104章:扩展Dubbo源码实现链路追踪
    • 第105章:秒杀系统链路追踪可视化
  • 日志治理

    • 第106章:日志治理概述、原则与架构
    • 第107章:快速搭建ELK环境并导入配置
    • 第108章:秒杀系统整合日志治理
  • 防刷方案

    • 第109章:实现基于条件限流机制防刷
    • 第110章:实现基于Token编排机制防刷
    • 第111章:实现基于黑名单机制防刷
  • 风控模型

    • 第112章:黑灰产与风控基础知识介绍
    • 第113章:风控模型架构与落地方案
    • 第114章:秒杀系统风控模型设计
    • 第115章:秒杀系统风控模型实现
  • 容器化集群部署

    • 第116章:容器化集群部署架构设计
    • 第117章:容器化集群部署落地实现
    • 第118章:容灾架构设计与落地方案
  • 全链路压测

    • 第119章:全链路压测场景与核心流程
    • 第120章:全链路压测核心原则与策略
    • 第121章:全链路压测落地方案实施
  • 极致优化

    • 第122章:服务器物理机极致优化
    • 第123章:单机服务性能极致优化
    • 第124章:秒杀系统流程极致优化
  • 专栏总结

    • 结尾:秒杀系统整体专栏总结
  • 番外篇

    • 第01章:互联网大厂是如何设计和使用缓存的

《Seckill秒杀系统》第78章:消息队列削峰

作者:冰河
星球:http://m6z.cn/6aeFbs
博客:https://binghe.site
文章汇总:https://binghe.site/md/all/all.html
源码获取地址:https://t.zsxq.com/0dhvFs5oR

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:理解消息队列削峰的核心原理,重点掌握消息队列在实际项目中的削峰使用方法和注意事项,并能够将其灵活应用到自身实际项目中。

大家好,我是冰河~~

通过削峰技术,可以让流入秒杀系统的流量更加平滑,让秒杀系统在运行过程中更加稳定和可靠。总体上削峰技术可以分成有损削峰和无损削峰。其中,限流是一种有损削峰技术,而打散客户端流量使用的验证码和问答题等,以及使用消息队列削峰都是无损削峰技术。

一、前言

一提到消息队列,相信大家第一感觉就是用来做异步处理和削峰填谷的。没错,项目中引入消息队列,主要就是用来做异步处理和削峰填谷。有些消息中间件,例如RocketMQ,还会支持事务消息,可以基于事务消息,在项目中实现分布式事务。在秒杀系统中,引入消息队列中间件,一是可以基于消息队列中间件实现流量削峰,二是可以基于消息队列中间件实现分布式事务。

注意:关于分布式事务有关的内容,大家可以阅读冰河出版的《深入理解分布式事务:原理与实战》一书。

二、本章诉求

讲述消息队列削峰的核心原理,从本质上理解消息队列作为一种无损削峰技术的流程,掌握消息队列在实际项目中的削峰使用方法和注意事项,并能够将其灵活应用到自身实际项目中。

三、队列削峰核心原理

消息队列削峰技术是一种能够有效保证下游服务稳定性的无损削峰技术,它能够将超出下游服务范围的流量暂存在消息队列中,由下游服务根据自身的处理能力来决定处理流量数据的速度,这就是通过消息队列进行异步调用、流量削峰的最常见的使用方式。

例如,目前有两个微服务:服务A和服务B,流量相对正常稳定时,服务A可以通过RPC方式调用服务B的接口,当服务A调用的流量比较可控时,并且服务B能够及时处理服务A的调用请求,不会造成太大的延迟,此时是可以满足需求的。这种调用方式也是最简单直接的,其实,大部分微服务之间也是用这种方式进行交互的,如图78-1所示。


服务A通过RPC方式调用服务B时,如果服务A的流量非常高,远远大于了服务B的处理能力,此时服务B的CPU、内存可能会迅速升高,服务B的响应时间也可能会不断升高,最终导致服务B由于无法处理这么高的流量而崩溃宕机。

此时,消息队列就能够应对这种场景了。可以使用消息队列将RPC这种紧耦合的调用方式,改造成两步异步调用,服务A将数据发送到消息队列,服务B从消息队列消费数据进行处理。这样,超过服务B处理能力的流量,就可以暂时存储到消息队列中,服务B可以根据自身的处理能力来决定处理流量的速度。如图78-2所示。

查看完整文章

加入冰河技术知识星球,解锁完整技术文章与完整代码

在 GitHub 上编辑此页
上次更新: 2026/4/29 16:18
Contributors: binghe001
Prev
第77章:打散客户端流量削峰
Next
第79章:限流削峰
阅读全文
×

扫码或搜索:冰河技术
发送:290992
即可立即永久解锁本站全部文章

星球会员
跳转链接