架构问题--削峰填谷
削峰填谷
瞬时集中突发性的流量在系统中是很常见的问题,在系统的架构中需要针对相关的业务场景做良好的设计;不仅维护系统的稳定,还能很好的解决业务问题,提高并发性能。削峰填谷是在应对突发性流量的时候最常用的设计思想。
问题分析:体现在应用的处理请求的能力是有限的,但是请求的数量不是均衡的,通常具有瞬时性,时段性;什么意思呢,就是在某个时间端,请求的流量会突增,甚至超过系统所能处理的请求,之后可能又突降,系统空闲资源多;就形成了基于系统负载能力上下的流量高峰低谷。显然这会造成系统的不稳定,甚至系统的雪崩,所以在系统架构设计的时候需要考虑这点。
案例:秒杀业务,上游业务发起下单请求,下游业务执行秒杀业务(库存检查,库存冻结,余额冻结,生成订单等等),下游业务处理的逻辑是相当负载的,并发能力是有限的,如果上游服务不做限流策略,瞬时可能把下游服务压垮,甚至造成雪崩,服务不可用。
策略:通常我们会在网关层做流量的限制,就是通常说的限流;同时会部署更多的下游服务实例,来分担流量压力,就是通常说的负载均衡;但这是不够的,在实际业务场景中我们很可能没有足够的服务器资源,或者说为了某个场景使用大量服务器成本太高,因为多数时候是闲置的(当然我们可以购买流量服务器,在不使用的时候回收,但这不是我们这边讨论的问题,这边更多的是基于,系统架构设计方面来做削峰填谷);所以我们需要在上游服务和下游服务之间设计一种能够缓解突刺流量的方案;让高峰流量填充低谷空闲资源,达到系统的合理利用和稳固。通常我们会使用MQ来做削峰填谷。
使用MQ:合理利用MQ的推(push,服务器主动推送给客户端)和拉(pull,客户端主动拉取) 的模式;在kafka中使用的pull模式;RabbitMq使用的是(push和pull);很清晰,Push模式下,下游服务是无法控制消息的,只能被动的接收,很可能处理不过来,但是又无法控制消息来的速率;所以可以采用主动拉取的模式,根据服务本身的处理能力,做流量控制。
秒杀案例回溯:在秒杀问题中,并发的请求是瞬时的通常时几分钟或者几十秒;但是数据库的写的并发是有限的;如果大量的请求直接穿透数据库,很可能使系统崩溃;这个时候我们可以使用消息中间件(MQ)将请求的流量异步到MQ中,然后下游服务异步去消费消息。这样在下游服务能够根据自身的并发处理能力,控制消费消息的速度,使得数据库的真实写请求控制在能力之内;在使用MQ的过程中推荐使用pull的模式,主动去拉取消消息消费。注意:在这个过程要注意,要时刻监控消息队列的消息堆积,超过一定量的时候,增加消息处理机(就是上面讲到的水平扩容增加服务实例),之所以能够允许消息的短暂堆积,是因为从业务场景上用户对短暂的延时是可以容忍的。进一步分析,可以把下游业务执行秒杀业务(库存检查,库存冻结,余额冻结,生成订单,积分,优化券服务等等)继续通过消息中间解耦,提高核心业务入库的能力,提高并发。
小结
- 在解决高并发下的削峰填谷,首先要做好容量的分析(这个是很复杂的,这边不展开来讲),下面这张图展示了容量分析的方法和过程。
- 使用MQ做异步消息解耦,使用主动拉取的模式来处理,限制流量做到削峰填谷
架构问题--削峰填谷相关推荐
- 高可用服务 AHAS 在消息队列 MQ 削峰填谷场景下的应用...
在消息队列中,当消费者去消费消息的时候,无论是通过 pull 的方式还是 push 的方式,都可能会出现大批量的消息突刺.如果此时要处理所有消息,很可能会导致系统负载过高,影响稳定性.但其实可能后面几 ...
- 充电站储能削峰填谷方案设计测算报告
1.背景 近年来,为推进我国储能技术朝着商业化应用发展,国家出台了多项政策.从现有政策解读可知,虽然国家鼓励在用户侧建设分布式储能系统,但暂未出台针对用户侧电池储能的充放电标杆电价.容量补贴细则.充放 ...
- 面向削峰填谷的电动汽车多目标优化调度策略——附代码
目录 摘要: 背景介绍: 考虑V2G的电动汽车充放电模型(无非凸约束) 基于负荷实时变化的分时电价模型 充放电优化调度目标函数 (1)综合负荷成本以及电动汽车电池退化损耗成本 (2)综合负荷峰谷差和波 ...
- 高并发系统设计:消息队列的三大作用:削峰填谷、异步处理、模块解耦
削去秒杀场景下的峰值写流量 而在秒杀场景下,高并发的写请求并不是持续的,也不是经常发生的,而只有在秒杀活动开始后的几秒或者十几秒时间内才会存在.为了应对这十几秒的瞬间写高峰,将秒杀请求暂存在消息队列中 ...
- 面向削峰填谷的电动汽车多目标优化调度策略 代码主要实现了考虑电动汽车参与削峰填谷的场景下,电动汽车充放电策略的优化,是一个多目标优化
MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略 关键词:电动汽车 削峰填谷 多目标 充放电优化 仿真平台:MATLAB YALMIP+CPLEX 主要内容:代码主要实现了考虑电动汽车参与削 ...
- 负荷需求响应模型matlab 通过分时电价方式下的负荷需求响应模型得到负荷响应前后变化情况,可以看到明显呈现削峰填谷的作用
负荷需求响应模型matlab 通过分时电价方式下的负荷需求响应模型得到负荷响应前后变化情况,可以看到明显呈现削峰填谷的作用 YID:6148641310561088爱熬夜的程序猿
- 考虑储能削峰填谷的含DG配电网可靠性评估
考虑储能削峰填谷的含DG配电网可靠性评估. 1.基于序贯蒙特卡洛的配电网可靠性评估: 2.基于序贯蒙特卡洛的含DG配电网可靠性评估: 3.基于区间迭代法优化储能出力进行削峰填谷: 4.基于上述内容进一 ...
- Java曲线之削峰填谷,Sentinel匀速模式(削峰填谷)
一.什么是削峰填谷: 某瞬时来了大流量的请求, 而如果此时要处理所有请求,很可能会导致系统负载过高,影响稳定性.但其实可能后面几秒之内都没有消息投递,若直接把多余的消息丢掉则没有充分利用系统处理消息的 ...
- 数据中心水蓄冷削峰填谷的经济性分析
摘要 结合国内三大城市的全年气象参数及大型数据中心常用的空调系统,分析数据中心在常用工况下,采用水蓄冷进行削峰填谷的经济性,并指出了大型数据中心采用削峰填谷措施具有良好的经济性. 关键词 :削峰填谷 ...
- 设计一个秒杀系统之削峰填谷
为什么需要削峰? 如果你看过秒杀系统的流量监控图的话,你会发现它是一条直线,就在秒杀开始那一秒是一条很 直很直的线,这是因为秒杀请求在时间上高度集中于某一特定的时间点.这样一来,就会导致一 个特别高的 ...
最新文章
- 一些算法入门应该明白的东西
- Android 快捷方式的创建与查询 快捷方式问题大全 获取快捷方式在Launcher数据库中的信息 Failed to find provider info for com.android.la
- LeetCode Binary Tree Preorder Traversal(二叉树的前序遍历)
- java 定义一组常量用什么最好_Java语言中定义常量注意事项解析
- 一个完整的Windows程序框架
- mysql查询数据库日期_mysql如何查询日期与时间
- php txtsql 说明,PHP学习笔记(2)txtSQL文档错误
- 基于OpencCV的彩色图像的分离与合并
- 数据分析应用统计学之分散性与变异性的测量【极差、四分位差、偏态系数、峰态系数、统计指标】
- JavaScript正则表达式使用详解
- lvs keepalive配置Jenkins2高可用
- python numpy安装失败_【Python】pip安装numpy安装到一半失败解决办法
- 微信小程序实现仿美团外卖饿了么左右联动页面
- 【PLC编程】西门子工艺对象 – 连续控制器CONT_C的使用
- 10 本最值得阅读的网络安全书籍推荐
- 【Elixir】 bcrypt_elixir 在 windows 中的 Compile 错误
- 线程池的shutdown()与shutdownNow()方法的区别
- Ae 效果快速参考:表达式控制
- PerfDog性能测试工具调研报告
- vb.net 教程 20-3 控制Ie浏览器 4
热门文章
- nrf52832 comp for sdk 15.2.0
- c语言cmp函数含义,【C艹】关于sort用法之重构cmp(comp)函数的笔记
- Cylons工业机器人_机器人的是什么意思
- 5月27日股市趋势追踪策略分析
- 网络编程之基础与接口函数
- 【CF487E】Tourists-圆方树+multiset+树链剖分
- LaTeX 参考文献的处理
- php家长帮助家长方法,《正面管教》家长认证课堂招募|教你如何赢得孩子,而不是赢了孩子!...
- 论文阅读笔记(11):Adaptive Self-Paced Deep Clustering with Data Augmentation,用数据增强的自适应Self-Paced深度聚类
- 台式电脑怎么改计算机名,台式电脑局域网设置方法