反向压力!

一个有趣的编程小知识

大家好,我是鱼皮,今天分享一个实用的编程小知识 —— 反向压力。

在介绍反向压力前,我们先聊聊什么是压力?

什么是压力?

我是一个打工人,日常工作就是听产品经理的话,写代码做需求。

正常打工

正常情况下,我每天能写 500 行代码,一周能做完 1 个需求就不错了。

但如果某天,领导突然发话了:对手公司已经荣华富贵了,我们也得抓紧,发财发财发财!

于是产品经理收到了更多来自领导的需求,也就给我安排了更多的需求。但我毕竟能力有限,每天只能写那么几行代码,因此只能每天加班苦不堪言,整个人处于超负荷状态,感受到了 压力

有压力了

那把这个场景类比到程序系统中,就是服务调用方对服务提供者的压力,或者说是请求方对处理方的压力。每个服务单位时间的处理能力是有限的,一旦请求量过大,服务的压力就会逐渐增大(可能是内存等资源不断被占用),严重时会导致服务停机。

服务调用

也可以把整个过程理解为泳池蓄水吧,进水管比排水管的水量更大,那泳池一会儿就水满溢出了。

了解什么是压力后,反向压力就很简单了。

什么是反向压力?

先接着做个比喻,假如领导和产品经理要给我增加过多的工作量,那我干嘛要傻傻的默默忍受呢?不是还有其他选择么?

跟上级们反映一下,工作量太多实在欺人太甚的话,直接甩下一句话:劳资不干了!

当然,对于领导来说,可能也会给你两种结果:

倾听你的反馈,动态调整你的工作量,先让你做高优先级的需求,其他的排到后面慢慢做爱干不干,不干滚蛋!显然第一种情况比较好对吧。这便是反向压力(Back Pressure),又叫 背压

类比到程序系统中,就是根据服务处理方的处理能力和状态动态地调整调用方的请求频率。

可以是处理方 主动通知 调用方:哦我压力太大了、活干不完了!然后调用方可以减少请求频率。

也可以是调用方 被动监测 处理方:看见员工开始摸鱼了,肯定是工作不饱和!然后调用方可以逐渐增大请求频率。

反向压力

反向压力的好处

反向压力实际上是 流量控制 的一种解决方案,可以使得调用方和处理方的能力相匹配,从而保护系统的各节点处于持续的正常工作状态。

如果不使用反向压力,只能人为去评估系统中各个节点能承受的压力,再给每个服务调用者的调用频率加一个 固定 的限制。限制设小了,就很容易产生资源浪费;限制设大了,服务又可能承受不住,导致挂掉或被剔除。

而且最致命的是,系统中的节点变化是不可控的,可能现在的系统状态很稳定,但如果突然多了个服务调用方,就又增加了服务提供者的压力。而这种压力没有被感知到,才是最恐怖的!

新服务调用方

因此,如今动态流控、甚至是智能流控也被应用的越来越广泛。

反向压力的应用

有流量控制的需求,就会有反向压力的身影。

我是从一本 实时流式计算 的书籍中第一次真正了解到反向压力的概念,这也是它应用最广泛的领域,像几个流处理框架 Flink、Spark Streaming、Storm 中,都有相应的反向压力实现。

反向压力的概念也被广泛应用于 反应式编程(Reactive Programming)中,比如 Spring WebFlux、RxJava 框架等,可以实现异步非阻塞、低延迟、高吞吐量的处理系统。

此外,反向压力的思想也很实用,比如 TCP 网络协议的流量和拥塞控制中,实际是由发送方和接收方共同确认数据包滑动窗口的大小,从而控制传输包的速率。

TCP 协议数据包传输

因此,反向压力还是很值得学习的!

至于它如何实现,还是有很大学问的,不同框架的实现方式也不同,大家可以自行了解。(等我学好了再分享哈哈)

以上就是本期分享,也欢迎阅读 我自学进入腾讯的编程学习和求职经历,不再迷茫!

指路:https://t.1yb.co/w66s

我是鱼皮,学到的话还请 点赞 支持,这是我持续更新的最大动力!

原文地址:https://www.toutiao.com/article/7002082879043928583/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340