背压与流控

简介: 背压与流控

正文


今天在学习的过程中,突然发现背压(back-pressure)。这是什么?流控(flow control)又是什么?


实际上,背压是实现流控的一种途径,或者是方法之一,实现流控的方法有很多。下面进行一一说明:(1)背压(back-pressure:就是消费者需要多少,生产者就生产多少。这有点类似于TCP里的流量控制,接收方根据自己的接收窗口的情况来控制接收速率,并通过反向的ACK包来控制发送方的发送速率。它主要的实现的是从服务的订阅端告诉服务的提供者自己的消费的能力。(2)节流(Throttling):也就是直接丢弃用户的请求。如果服务消费者消费不过来,就要丢弃用户的一些请求。具体的如何丢弃也有一些策略,就像Java中的线程池中的拒绝策略类似。(3)打包(buffer和window)。buffer和window基本一样,只是输出格式不太一样。它们是把上游多个小包裹打成大包裹,分发到下游。我更愿称为可以进行批量的请求。比如,用户的请求到某个服务的时候,可以等待一定量的请求,然后处理这些请求,进行批量的处理,防止大量的用户请求都直接请求到后端,使后端服务不可用,造成阻塞。(4)最后一种就是排队,也就是服务提供方针对用户的请求进行排队,然后,服务提供者一一消费用户的请求服务。但是这样做势必会造成用户等待的时间增加。流控,顾名思义,就是流量控制。它的主要的目的就是实现服务提供者与服务消费者之间的关系。防止出现过多的请求,导致整体的服务无法对外提供优质的服务。实际上实现流控的并不仅仅是这些,例如Nginx里面的算法,漏斗算法、令牌算法、隔板等等技术都是可以实现的。

今天背压的这种概念,从Spring5中的WebFlux了解到。WebFlux与我们平时使用的SpringMVC是差不多的,但是它最主要的优势是采用Reactor的方式处理用户的请求,提供非阻塞的请求。同时支持函数式编程,下面的图片是具体的介绍:

21.png

19.png

同时,它也支持多种的部署方式,可以部署在不同的容器中

20.png

因为它实现的是NIO的方式,那么它就需要在Servlet3.1以上的支持NIO的容器中进行使用。这个技术还是有很多没有了解的地方,自己还要深入的了解。作者才疏学浅,如果不正确的地方,欢迎各位批评指正互相学习。

相关文章
|
12天前
|
Java 数据库连接 Maven
如何使用Sentinel实现流控和降级
通过以上步骤,你可以使用Sentinel实现应用的流量控制和降级操作,以保护系统在高流量或不稳定情况下的稳定性。欢迎关注威哥爱编程,一起学习成长。
|
4月前
|
负载均衡 算法
分布式限流:避免流控失控的关键问题
在当今高并发互联网环境下,分布式系统中的限流机制显得尤为重要。然而,分布式限流也面临着一系列挑战和问题。本文将探讨分布式限流中需要注意的关键问题,并提供相应解决方案,以确保流控策略的有效实施。
|
5月前
|
消息中间件 Java API
一文带你速通Sentinel限流规则(流控)解读
一文带你速通Sentinel限流规则(流控)解读
|
6月前
|
监控 Java 数据安全/隐私保护
sentinel流控降级与熔断
sentinel流控降级与熔断
52 0
|
监控 Sentinel 微服务
【Sentinel】流控效果与热点参数限流
【Sentinel】流控效果与热点参数限流
305 0
【Sentinel】流控效果与热点参数限流
|
监控 数据库 数据安全/隐私保护
【Sentinel】流控模式
【Sentinel】流控模式
150 0
【Sentinel】流控模式
|
Java 开发者 Sentinel
流控规则-流控模式|学习笔记
快速学习流控规则-流控模式
182 0
流控规则-流控模式|学习笔记
|
Java 测试技术 开发者
流控规则-流控效果|学习笔记
快速学习流控规则-流控效果
156 0
流控规则-流控效果|学习笔记
|
存储 算法 C++
Sentinel 和常用流控算法
Sentinel 和常用流控算法
Sentinel 和常用流控算法
|
存储 算法 Sentinel
Sentienl 流控效果之匀速排队与预热实现原理与实战建议
Sentienl 流控效果之匀速排队与预热实现原理与实战建议
Sentienl 流控效果之匀速排队与预热实现原理与实战建议