削峰填谷,你只知道消息队列?

article/2025/9/15 21:02:46

https://baijiahao.baidu.com/s?id=1707302054121107350&wfr=spider&for=pc

概述

今天想和大家聊聊削峰填谷,最近 B 站发生的机房断电事件,和A站的服务雪崩,让我们对高可用关注了起来,之前梳理了高可用三剑客 限流,熔断和降级,今天想继续聊聊削峰填谷,也为后面的高性能篇 做一下铺垫, 想回顾一下之前相关内容的童鞋,可以查看一下,下面文章,欢迎点赞,收藏,关注三连,感谢!

高可用系列文章:

削峰和填谷

技术源于生活

削峰填谷(Peak cut)是调整用电负荷的一种措施。 根据不同用户的用电规律,合理地、有计划地安排和组织各类用户的用电时间。 以降低负荷高峰,填补负荷低谷。减小电网负荷峰谷差,使发电、用电趋于平衡。

在我们理解的削峰填谷的流量趋势图,如下图所示,在流量高峰阶段削去高峰流量,在流量下降时,填补这部分流量,使流量趋向平衡。

简单概述一下,削峰 和 填谷

  • 削峰:为保证服务可用,剔除部分流量。 --业务有损

  • 填谷:在服务能力盈余的情况下,提供补偿操作。--业务补偿

削峰

通过削去流量尖刺,让请求流量趋向平稳,以保障服务的稳定性。

  • 客户端削峰

  • 服务端削峰

上面有提到,削峰是业务有损的行为,削掉的这部分流量,可能在电商系统中,致使我们丢失这个用户。

1、客户端削峰

在后端的思维里面,削峰动作更多是服务端同学的工作和思考。但是在整体系统的设计中,客户端的削峰也是必不可少的。通过客户端的削峰,可以削减服务端的压力,从而保障系统的可用性。

1.1、资源动静分离

这个方案比较简单,或者说目前基本都采用的方式。通过将静态资源与服务端隔离,在活动开始前,将资源预热到CDN,减轻服务端的压力。客户端与服务端的交互,只有动态数据的交互。

1.2、请求削峰

1)、设置两次请求最小有效时间间隔

设置两次请求之间的时间间隔为 t, 在每次请求间隔内的请求,都会被忽略掉,不向服务的发起请求,假设 t 秒内,每个用户只会触发一次有效请求,对应的 qps 为 1/t,如果用户量为 Q, 那么最大的 qps 为 Q / t。

2)、公平性策略

每个用户一次活动周期内有效请求概率是P,比如概率0.2,也就是5次中1次请求机会,或者10次中2次请求机会。根据随机算法+插值算法生成请求序列:

根据上述方式就可以得到公平性策略,粒度可以自由把控

2、服务端削峰

2.1、限流削峰

在之前的限流相关文章中有介绍到,服务端限流主要有

  • 网关限流

  • 容器限流

  • 服务器限流

在服务器限流中, 主要介绍了,使用Sentinel 来做流量控制,通过下面的流量图可以看到,流量控制在了 2 qps ,峰值流量通过快速失败的方式返回。那么,对于这部分被拒绝的流量,我们从业务角度来看的话,是有损的。

2.2、MQ削峰

在消息队列的架构中,有 pull 和 push 两种消息同步的方式,我们可以通过下游系统 订单系统 主动拉取pull 的方式,来保障下游服务的流量稳定。

那么,我们是否可以脱了了限流,只通过 MQ 的方式,来达到削峰呢?答案是:不能!

假设秒杀系统的 流量是 :10000 qps,订单系统的消费能力只有 100qps。活动时间如果持续比较长,会产生消息堆积过多。一方面会对消息中间件造成压力,另一方面,消息的有效性也没办法保障。

因此在这个链路图中,实际场景会是这样子:

流量先经过 Sentinel等限流中间件的调平后,由秒杀系统提交 MQ 任务。

填谷

从上面的削峰策略可以看到,大部分的削峰 都是业务有损的,从客户端发起请求限流 ,到服务端的中间件限流。对于这部分的请求,都是直接丢弃的。而在 MQ削峰 的场景下,我们可以通过将请求缓存 的方式,减缓流量压力,有下游服务来控制请求压力,从而达到削峰的效果。

脱离了削峰,就不存在填谷了

在 MQ削峰 的场景中,我们主要保障的是 订单系统 的流量稳定性, 如果 秒杀系统的消息流量为 100tps,订单系统的处理能力为 200tps,那么,对于下游系统来说,就不存在峰值流量了!

如有其他场景,可以交流纠正

填谷补偿

在峰值流量阶段,出现部分流量无法得到马上的处理,通过峰值流量过去后,在消费能力盈余的情况下,对之前的请求做补偿操作,使整体流量趋向于平稳。

比如在上述链路图中,秒杀活动持续了 1分钟,

  • 产生请求为:60 * 100 = 6000 个请求。

  • 消费时间为:6000 / 50 = 120 秒。

在用户可接受的范围内(1分钟的等待),获取自己的秒杀下单结果。同时对订单系统的负载做好保护。

消息队列的风险

相对于其他的削峰方案,看起来MQ削峰方案是最优的,那为什么我们在 流控方案上,还是更加注重限流方案上。而不是统一使用 MQ削峰呢?

每个方案都存在利弊,引入 MQ,能为我们解决 削峰,异步和解耦等问题。但是,在引入MQ中间件的同时,也会为我们带来以下的问题:

  • 中间件可用性:MQ队列不可用,会导致整个链路不可用,严重会造成雪崩

  • 消息可靠性:消息发送,消费需要得到保障

  • 消息堆积:消息生产过快,导致MQ中间件压力过大

  • 消息重复:消费幂等能力支撑

  • 消息顺序:部分场景要求消费按照顺序执行


http://chatgpt.dhexx.cn/article/FSE6hkJK.shtml

相关文章

21.面向削峰填谷的电动汽车多目标优化调度策略

说明书 MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略 关键词:电动汽车 削峰填谷 多目标 充放电优化 参考文档:店主自己整理的说明文档,公式、约束、数据齐全,可联系我查看 仿真平台:MATLAB YA…

MQ,究竟如何做到削峰填谷?

MQ,很多的应用场景,是消息的订阅发布,是系统上下游的解耦,MQ的还有一个典型应用场景是缓冲流量,削峰填谷,本文将简单介绍下,MQ要怎么实现缓冲流量,削峰填谷。 站点与服务上下游之间&…

MQ实战-削峰填谷

对于突然到来的大量请求,您可以配置流控规则,以稳定的速度逐步处理这些请求,起到“削峰填谷”的效果,从而避免流量突刺造成系统负载过高。 1、场景 请求的到来,往往是没有规律的。 例如,某应用的处理能力…

MQ,如何做到削峰填谷

问:为什么会有本文? 答:上一篇文章《到底什么时候该使用MQ?》引起了广泛的讨论,有朋友回复说,MQ的还有一个典型应用场景是缓冲流量,削峰填谷,本文将简单介绍下,MQ要实现…

MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略

MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略 关键词:电动汽车 削峰填谷 多目标 充放电优化 参考文档:自己整理的说明文档,公式、约束、数据齐全 仿真平台:MATLAB YALMIPCPLEX 优势:代码注释详实&…

数据中心水蓄冷削峰填谷的经济性分析

摘要 结合国内三大城市的全年气象参数及大型数据中心常用的空调系统,分析数据中心在常用工况下,采用水蓄冷进行削峰填谷的经济性,并指出了大型数据中心采用削峰填谷措施具有良好的经济性。 关键词 :削峰填谷 ;数据中心…

01-初探MQ-MQ的三大使用场景:应用解耦、异步提速、削峰填谷

初探MQ 什么是MQ 关于MQ的概念,想必都不陌生,MQ是 Message Queue(消息队列) 的缩写,所以他首先是一个队列,有先进先出的特性,其次是一个存放消息的队列。常用在分布式系统中进行通信。 为什么…

设计一个秒杀系统之削峰填谷

为什么需要削峰? 如果你看过秒杀系统的流量监控图的话,你会发现它是一条直线,就在秒杀开始那一秒是一条很 直很直的线,这是因为秒杀请求在时间上高度集中于某一特定的时间点。这样一来,就会导致一 个特别高的流量峰值…

电力系统的削峰填谷

削峰填谷(Peak cut)是调整用电负荷的一种措施。根据不同用户的用电规律,合理地、有计划地安排和组织各类用户的用电时间。以降低负荷高峰,填补负荷低谷。减小电网负荷峰谷差,使发电、用电趋于平衡。 因电厂是全天候持续…

t分布概率密度函数的推导

推导过程整理自https://www.bilibili.com/video/BV1s54y1S7Ji。 文章目录 预备知识 Γ \Gamma Γ函数(伽马函数)标准正态分布卡方分布 推导目标引理:连续型随机变量商的分布推导过程先计算 W Y / n W\sqrt{Y/n} WY/n ​的概率密度函数 p W (…

求概率密度函数方法之单调性定理

例题: 适用条件:随机变量Y关于X是单调的,也就是说随机变量Y与X存在一一映射的关系。 解法好处:计算量小,步骤简单(1,将变量替换,然后带入原式。2,改变积分对象&#xf…

概率密度估计方法-核密度估计和高斯混合分布

1、概率密度估计方法 概率密度估计方法用于估计一组数据集的概率密度分布,分为参数估计方法和非参数估计方法。 参数估计方法 假定样本集符合某一概率分布,然后根据样本集拟合该分布中的参数,例如:似然估计,混合高斯等…

概率密度函数及其在信号方面的简单理解(上)概率密度函数

概率密度函数及其在信号方面的简单理解(上)概率密度函数 上篇 概率密度函数 1 离散随机变量与连续型随机变量2 离散随机变量的分布函数 2.1 概率函数2.2 概率分布2.3 概率分布函数(累积分布函数!) 3 连续型随机变量的概…

概率密度函数估计

概率密度函数估计 前导知识:【非参数估计—直方图法、Kn近邻估计法、Parzen窗法】 1. 最大似然估计 导包: import numpy as np from numpy.linalg import cholesky import matplotlib.pyplot as plt import random # 用于随机抽样设置随机样本数&…

python实现概率密度匹配法

Python实现系列: Python实现贝叶斯优化算法 python实现t-SNE降维 Python实现12种降维算法 Python实现11 种特征选择策略 Python实现10种聚类算法 Python实现8种相似度度量 python实现反距离权重插值(IDW) Python实现12种概率分布 python实现快速傅里叶变换 python实…

威布尔概率密度分布

目录 相同的平均风速,如果概率密度分布不同,风机的发电量也会完全不同。 威布尔分布是泊松三类分布的特殊形式。概率密度函数 f ( v ) f(v) f(v)为风速 v ( v ≥ 0 ) v(v≥0) v(v≥0)出现的概率,形式如下: f ( v ) k a ( v a ) …

java正态分布的概率密度函数_正态分布概率密度函数

http://www.360doc.com/content/17/0306/13/32342759_634411464.shtml什么是正态分布 正态概率分布是连续型随机变量概率分布中最重要的形式,它在实践中有着广泛的应用。在生活中有许多现象的分布都服从正态分布,如人的身高、体重、智商分数;某种产品的尺寸和质量;降雨量;…

绘制概率密度图

1、内容简介 略 443可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 clc close all clear miu 0.5; delta 0.5; r 0.1:0.1:10; p1 1/sqrt(2*pi)/miu./r.*exp(-(log(r)-miu).^2/2/delta^2); delta 1; p2 1/sqrt(2*pi)/miu./r.*exp(-(log(r)-miu).^2/2/delta^2); fig…

概率密度函数曲线及绘制

目录 前言概率密度函数曲线几类经典的概率密度函数两种绘制密度曲线的方法参考文献 前言 很多数据科学家在做回归模型评估的时候,不仅会去计算模型拟合优度R2,平均绝对误差还会去看测试集的每个样本偏差的分布情况,这个时候就需要用到概率密…

概率密度图

1、 导入库 import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns2、 概率密度图–kdeplot的应用 第一个参数:要绘制的图像数据 第二个参数:shade 是否填充颜色# 获得数据 dataSet pd.read_c…