『背压』英文全称是back pressure,这是一个出自物理学的词汇,在传统的工程领域甚至医学界都有背压的概念,后来被引入到了计算机界。然而个人认为背压其实是个被大众认可的、主流的错误翻译!
back有『后背』的意思,pressure是压力。所以back pressure不知从何时开始被译作了『背压』。但其实back也有『反方向』的含义,比如go back(回去)、come back(回来)、back away(后退)。对于back pressure而言,『反向』的语义比『后背』更准确。
你看机器学习中有个概念:back propagation。此二者back语义是相同的,但它就被译作『反向传播』,并没有被翻译成背传。所以我个人感觉『反向压力』是一个不错的称呼,虽然似乎也有看到这个叫法,但真的远远不如背压 脍(误)炙(人)人(子)口(弟)了……
解释一下back pressure,看一下百科中背压的基础定义:
通常是指运动流体在密闭容器中沿其路径(譬如管路或风通路)流动时,由于受到障碍物或急转弯道的阻碍而被施加的与运动方向相反的压力。
上述定义可能还稍微抽象,再看个具体的例子。发动机有一个概念叫做排气背压,同样看一下百科的定义:
背压大,排气阻力就大,会降低发动机动力。
背压小,排气阻力就小,会增加发动机动力。
我个人总结就是:施方 向 受方 施加某种压力,然后收到了受方的反馈,从而促使施方调整施加压力的强度。
背压概念传播较广,早就从物理学和机械领域泛化,进入到了其他领域。然而不管是哪个领域,背压几乎都可以认为是和『流控』相关的。这下你或许可以听懂了。下面就拿我所熟知的计算机领域来谈一谈背压。背压并不是某种具体的技术,而是一种思想或者说策略。
计算机网络的TCP协议中有流量控制功能,核心实现就是利用『滑动窗口』,其实滑动窗口就应用了背压的策略(但也不能说滑动窗口就是背压。TCP滑动窗口更具体也更复杂)。在网络中,发送方向接收方源源不断地发送数据,是需要考虑接收方的处理能力的,否则容易导致服务雪崩,防雪崩大概就两大类。一种是接收方在处理能力超限之后直接拒绝或丢弃发送方发来的数据;另外一种就是不停地通知发送方自己的处理能力有多少,从而调控发送方的发送频率或大小。后者就是背压的思想。
通过这个描述你也可以发现,不仅仅是TCP的流量控制。对于消息队列或者其他任何生产者-消费者的场景也都可以采用背压的策略。
除了上面这些微观的例子,在宏观一点的业务场景中,背压策略也一直在使用当中,只是你或许不知道这个看似普普通通的做法有个学名叫背压而已。比如在推荐系统中控制同一个创作者的视频、图文等素材以一种被限定的频率被在用户消费。请注意这里不是说某创作者的素材以被约束的频率出在用户时间线(这个实现相对简单),而是说以被限定的频率被消费,只出现在用户的时间线,但用户没有点开观看不算消费。然而用户是否点击观看我们是无法事先得知的,只能借助日志流不停地后验反馈用户的点击观看行为,然后调整接下来创作者的素材出现在用户时间线中的频率!同理,在CPC广告(点击扣费的广告)系统中,广告只有被点击才会扣除广告主的预算,仅展示广告不扣费。此时如何匀速(或者其他限定速度)消耗广告主的预算,避免短时间内广告主预算耗尽(可能广告主希望自己的广告在不同时段都能曝光),其实现过程也大致同理。
除了『反向压力』外,back pressure也有被翻译成『反压』或者『回压』,尽管都小众,但这些都比背压要清晰准确的多。
一点拙见,可能贻笑大方了。