背压与流控

简介: 背压与流控

正文


今天在学习的过程中,突然发现背压(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的容器中进行使用。这个技术还是有很多没有了解的地方,自己还要深入的了解。作者才疏学浅,如果不正确的地方,欢迎各位批评指正互相学习。

相关文章
|
消息中间件 缓存 监控
系统稳定性建设实践总结
2020年,注定是个不平凡的一年。疫情的蔓延打乱了大家既定的原有的计划,同时也催生了一些在线业务办理能力的应用诉求,作为技术同学,需要在短时间内快速支持建设系统能力并保障其运行系统稳定性。恰逢年终月份,正好梳理总结下自己的系统稳定性建设经验和思考。
系统稳定性建设实践总结
|
3月前
|
Arthas 人工智能 Java
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
Arthas Agent 是基于阿里开源Java诊断工具Arthas的AI智能助手,支持自然语言提问,自动匹配排障技能、生成安全可控命令、循证推进并输出结构化报告,大幅降低线上问题定位门槛。
1937 64
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
|
Shell Android开发
Android10.0(Q) 默认应用设置(电话、短信、浏览器、主屏幕应用)
Android10.0(Q) 默认应用设置(电话、短信、浏览器、主屏幕应用)
1684 0
|
11月前
|
机器学习/深度学习 人工智能 安全
正式发布!一文总览《中国人工智能应用发展报告(2025)》
阿里云研究院联合央视频等机构发布《中国人工智能应用发展报告(2025)》,全面分析人工智能技术趋势与产业应用,涵盖六大技术创新、五类落地场景、四力评估体系及百个创业案例,提出“五位一体”发展建议,推动AI成为新质生产力的核心引擎。
6916 0
|
人工智能 安全 Java
spring boot 权限管理的几种方式
Spring Boot 提供多种权限管理方式,包括基于角色的访问控制(RBAC)、基于属性的访问控制(ABAC)和基于访问控制列表(ACL)。RBAC 通过角色简化权限管理;ABAC 根据用户、资源和环境属性实现细粒度控制;ACL 则为每个资源定义访问控制列表。文中以 Spring Security 为例,详细展示了每种方法的配置与实现步骤,帮助开发者根据项目需求选择合适的权限管理方案。示例涵盖依赖添加、类配置及注解使用等关键环节。
2331 0
|
9月前
|
人工智能
黑森林开源Flux.1 Krea Dev!魔搭AIGC专区Day1支持,提供生图与训练定制
FLUX模型又又又更新了! 黑森林联合Krea发布了文生图模型Flux.1 Krea Dev,这是目前最好的开源文生图模型。 魔搭社区第一时间上线Flux.1 Krea Dev,快来AIGC专区抢先体验图片
812 11
|
Java Linux Android开发
Android系统的启动流程
Android系统的启动流程
434 1
|
消息中间件 RocketMQ
RocketMQ - 消费者Rebalance机制
RocketMQ - 消费者Rebalance机制
593 0
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
|
安全 API Windows
CreateMutex用法
CreateMutex用法