架构问题--削峰填谷

article/2025/9/15 15:15:16

削峰填谷

瞬时集中突发性的流量在系统中是很常见的问题,在系统的架构中需要针对相关的业务场景做良好的设计;不仅维护系统的稳定,还能很好的解决业务问题,提高并发性能。削峰填谷是在应对突发性流量的时候最常用的设计思想。

问题分析:体现在应用的处理请求的能力是有限的,但是请求的数量不是均衡的,通常具有瞬时性,时段性;什么意思呢,就是在某个时间端,请求的流量会突增,甚至超过系统所能处理的请求,之后可能又突降,系统空闲资源多;就形成了基于系统负载能力上下的流量高峰低谷。显然这会造成系统的不稳定,甚至系统的雪崩,所以在系统架构设计的时候需要考虑这点。

案例:​秒杀业务,上游业务发起下单请求,下游业务执行秒杀业务(库存检查,库存冻结,余额冻结,生成订单等等),下游业务处理的逻辑是相当负载的,并发能力是有限的,如果上游服务不做限流策略,瞬时可能把下游服务压垮,甚至造成雪崩,服务不可用。

策略:​通常我们会在网关层做流量的限制,就是通常说的限流;同时会部署更多的下游服务实例,来分担流量压力,就是通常说的负载均衡;但这是不够的,在实际业务场景中我们很可能没有足够的服务器资源,或者说为了某个场景使用大量服务器成本太高,因为多数时候是闲置的(当然我们可以购买流量服务器,在不使用的时候回收,但这不是我们这边讨论的问题,这边更多的是基于,系统架构设计方面来做削峰填谷);所以我们需要在上游服务和下游服务之间设计一种能够缓解突刺流量的方案;让高峰流量填充低谷空闲资源,达到系统的合理利用和稳固。通常我们会使用MQ来做削峰填谷。

使用MQ:​合理利用MQ的推(push,服务器主动推送给客户端)和拉(pull,客户端主动拉取) 的模式;在kafka中使用的pull模式;RabbitMq使用的是(push和pull);很清晰,Push模式下,下游服务是无法控制消息的,只能被动的接收,很可能处理不过来,但是又无法控制消息来的速率;所以可以采用主动拉取的模式,根据服务本身的处理能力,做流量控制。

秒杀案例回溯在秒杀问题中,并发的请求是瞬时的通常时几分钟或者几十秒;但是数据库的写的并发是有限的;如果大量的请求直接穿透数据库,很可能使系统崩溃;这个时候我们可以使用消息中间件(MQ)将请求的流量异步到MQ中,然后下游服务异步去消费消息。这样在下游服务能够根据自身的并发处理能力,控制消费消息的速度,使得数据库的真实写请求控制在能力之内;在使用MQ的过程中推荐使用pull的模式,主动去拉取消消息消费。注意:在这个过程要注意,要时刻监控消息队列的消息堆积,超过一定量的时候,增加消息处理机(就是上面讲到的水平扩容增加服务实例),之所以能够允许消息的短暂堆积,是因为从业务场景上用户对短暂的延时是可以容忍的。​进一步分析,可以把下游业务执行秒杀业务(库存检查,库存冻结,余额冻结,生成订单,积分,优化券服务等等)继续通过消息中间解耦,提高核心业务入库的能力,提高并发。

小结

  • 在解决高并发下的削峰填谷,首先要做好容量的分析(这个是很复杂的,这边不展开来讲),下面这张图展示了容量分析的方法和过程。
  • image.png
  • ​​​使用MQ做异步消息解耦,使用主动拉取的模式来处理,限制流量做到削峰填谷

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

相关文章

PMP知识点2

根据PMBOK和参考书籍自己总结的一些不熟悉知识点,当做笔记放这复习。 1. 估算方法对比 方法说明使用情景类比估算历史估算无详细信息,或者有类似项目,要少钱,要快参数估算数学模型有数据三点估算三角/贝塔分布更精确自下而上估算…

高并发系统设计:消息队列的三大作用:削峰填谷、异步处理、模块解耦

削去秒杀场景下的峰值写流量 而在秒杀场景下,高并发的写请求并不是持续的,也不是经常发生的,而只有在秒杀活动开始后的几秒或者十几秒时间内才会存在。为了应对这十几秒的瞬间写高峰,将秒杀请求暂存在消息队列中,然后…

Java曲线之削峰填谷,科学网—Lorenz曲线之削峰填谷 - 李宁的博文

我给黄小邪同学的置顶博文《中科院研究生入学考试的Lorenz曲线》(http://blog.sciencenet.cn/home.php?modspace&uid480705&doblog&id706263) 留言说:“建议模拟一个李小文老师所假设的双峰分布(其实可以做N峰分布,N大于等于2),…

并发编程之削峰填谷

背景 在系统的某个阶段,并发访问数(流量)会急剧膨胀,在瞬时时间内(1秒或数秒),达到一个临界点,许多系统往往在这个阶段奔溃而失去响应,比如商家促销活动进行秒杀,或618,双11等等。系统在其他时间业务压力往…

基于SAC在citylearn模块实现电力需求曲线的削峰填谷———调参记录2

参考几篇DRL调参技巧总结 https://zhuanlan.zhihu.com/p/345353294 https://zhuanlan.zhihu.com/p/434495366 1 增大batch size,减小样本误差 减小辅助reward,使其不影响最终reward,并使其正负均衡 辅助reward属于在每个step均出现&#xf…

电动汽车,削峰填谷

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

《面试补习》--来聊聊削峰填谷!

概述 今天想和大家聊聊削峰填谷,最近 B 站发生的机房断电事件,和A站的服务雪崩,让我们对高可用关注了起来,之前梳理了高可用三剑客 限流,熔断和降级,今天想继续聊聊削峰填谷,也为后面的高性能篇 做一下铺垫…

电动汽车有序充电参与电网负荷削峰填谷

电动汽车有序充电参与电网负荷削峰填谷。 ID:24400645773662896

考虑储能削峰填谷的含DG配电网可靠性评估

考虑储能削峰填谷的含DG配电网可靠性评估。 1、基于序贯蒙特卡洛的配电网可靠性评估; 2、基于序贯蒙特卡洛的含DG配电网可靠性评估; 3、基于区间迭代法优化储能出力进行削峰填谷; 4、基于上述内容进一步考虑配电网可靠性。 (MATLA…

进度模型方法论,利用“削峰填谷”进行资源优化

对进度模型中的活动进行调整,从而使资源使用情况满足资源限制要求,这种技术就是资源平滑。如下图所示。 资源平滑不会改变项目关键路径,完工日期也不会延迟。 利用此方法,我们可以采用一种削峰填谷的方式对进度网络进行资源优化。如下图为某项目在一段时间内的资源使用曲…

利用RabbitMQ实现消息投递削峰填谷

目录 异步和同步如何选择 异步线程 同步收发消息 一、导入依赖库 二、创建RabbitMQ配置类 三、创建消息任务类 异步和同步如何选择 依靠多线程,Java代码可以同步执行也可以异步执行 RabbitMQ提供了同步和异步两种收发消息模式 我们采用 Java异步线程 MQ同步…

【2023A题】电采暖负荷参与电力系统功率调节的技术经济分析(思路、代码)

目录 💥1 概述 📚2 Matlab代码实现 🎉3 参考文献 🌈4 运行结果 💥1 概述 建设以新能源为主体的新型电力系统是应对全球气候变化挑战的重要举措。高比例新能源接入导致电力系统调节能力稀缺,亟需开发新的调…

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

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

【电动车】基于削峰填谷的电动汽车多目标优化调度策略研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

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

目录 摘要: 背景介绍: 考虑V2G的电动汽车充放电模型(无非凸约束) 基于负荷实时变化的分时电价模型 充放电优化调度目标函数 (1)综合负荷成本以及电动汽车电池退化损耗成本 (2&#xff09…

充电站储能削峰填谷方案设计测算报告

1、背景 近年来,为推进我国储能技术朝着商业化应用发展,国家出台了多项政策。从现有政策解读可知,虽然国家鼓励在用户侧建设分布式储能系统,但暂未出台针对用户侧电池储能的充放电标杆电价、容量补贴细则、充放电补贴细则、用户容…

MQ如何快速实现流量削峰填谷

问:站点与服务,服务与服务上下游之间,一般如何通讯? 答:有两种常见的方式 一种是“直接调用”,通过RPC框架,上游直接调用下游。 在某些业务场景之下(具体哪些业务场景,见…

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

https://baijiahao.baidu.com/s?id1707302054121107350&wfrspider&forpc 概述 今天想和大家聊聊削峰填谷,最近 B 站发生的机房断电事件,和A站的服务雪崩,让我们对高可用关注了起来,之前梳理了高可用三剑客 限流&#xff…

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

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

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

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