当前位置: 首页>行业 >

Spring 响应式编程,真香!!!_焦点

来源: 程序员客栈 | 时间: 2023-01-16 13:01:06 |

一、前言

响应式编程是啥?


(资料图)

为啥要有响应式编程?

响应式流的核心机制是什么?

Spring 响应式编程能解决我们平时开发的什么痛点?

Spring 响应式编程有哪些应用场景?

Spring 响应式编程未来的趋势如何?

开篇六连问,等咱们熟悉完再来真香也不迟,我们废话少说,直接来畅游 Spring 响应式编程的世界。

二、响应式编程是啥?

在计算中,响应式编程或反应式编程(Reactive programming)是一种面向数据串流和变化传播的声明式编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。

有点抽象?没有关系,老周这就来说道说道。核心的一点响应式编程是声明式编程范式,对命令式编程进行替代的一个范例,这种替代的存在是因为响应式编程解决了命令式编程的限制。大多数开发者都是命令式编程起步的,你写的代码就是一行接一行的指令,按照它们的顺序一次一条地出现。一个任务被执行,程序就需要等到它执行完了,才能执行下一个任务。每一步,数据都需要完全获取到了才能被处理,因此它需要作为一个整体来处理。

命令式编程有个最大的弊端是:当正在执行的任务被阻塞了,特别是一个 IO 任务,例如将数据写入到数据库或从远程服务器获取数据,那么调用该任务的线程将无法做任何事情,直到任务完成。说白了,阻塞的线程就是一种浪费,在如今的环境,线程的资源是那么的宝贵。

相反,响应式编程是函数式和声明式的。响应式编程涉及描述通过该数据流的 pipeline 或 stream,而不是描述的一组按顺序执行的步骤。响应式流处理数据时只要数据是可用的就进行处理,而不是需要将数据作为一个整体进行提供。

三、为啥要有响应式编程?

我们上面也说了命令式编程会线程阻塞,而响应式编程是声明式编程范式的,是对命令式编程进行替代的一个范例。

对于命令式编程的同步阻塞,其实业界是有一些处理方案的,比如在 Java 中,为了实现异步非阻塞,一般会采用回调和 Future 这两种机制,但这两种机制都存在一定局限性。

3.1 回调机制

我们来看下面这个图:

服务 B 的 methodB() 方法调用服务 A 的 methodA() 方法,然后服务 A 的 methodA() 方法执行完毕后,再主动调用服务 B 的 callback() 方法。

回调体现的是一种双向的调用方式,实现了服务 A 和服务 B 之间的解耦。在这个 callback 回调方法中,回调的执行是由任务的结果来触发的,所以我们就可以异步来执行某项任务,从而使得调用链路不发生任何的阻塞。

回调的最大问题是复杂性,一旦在执行流程中包含了多层的异步执行和回调,那么就会形成一种嵌套结构,给代码的开发和调试带来很大的挑战。所以回调很难大规模地组合起来使用,因为很快就会导致代码难以理解和维护,从而造成所谓的“回调地狱”问题。之前公司就遇到代码“回调地狱”问题,十几层的回调,后面的人进来维护估计会吐。

3.2 Future 机制

我们再来看看 Future 这种机制,有一个需要处理的任务,然后把这个任务提交到 Future,Future 就会在一定时间内完成这个任务,而在这段时间内我们可以去做其他事情。下面我们来看看来自 Doug Lea 大神在 Java 中的 Future 接口设计:

我们可以看到,大神在上面的设计来达到一定的异步执行效果。但从本质上讲,Future 以及由 Future 所衍生出来的 CompletableFuture 等各种优化方案就是一种多线程技术。多线程假设一些线程可以共享一个 CPU,而 CPU 时间能在多个线程之间共享,这一点就引入了“上下文切换”的概念。

如果想要恢复线程,就需要涉及加载和保存寄存器等一系列计算密集型的操作。因此,大量线程之间的相互协作同样会导致资源利用效率低下。

3.3 响应式编程实现方法3.3.1 数据流与响应式

数据流就是数据像水流一样源源不断的输入过来,而系统的响应能力就体现在对这些数据流的即时响应过程上。我们可以不采用传统的同步调用方式来处理数据,而是由处于数据库上游的各层组件自动来执行事件,从web到service再到dao层,这个过程就像水流一样,整个数据传递链路都应该是采用事件驱动的方式来进行运作的,这个过程都应该是异步非阻塞的,这就是响应式编程的核心特点。

相较传统开发所普遍采用的“拉”模式,在响应式编程下,基于事件的触发和订阅机制,这就形成了一种类似“推”的工作方式。说白了,就类似现在的 Kafka 等消息引擎,大部分都采用事件驱动的 pub/sub 模式的架构。这种模式的最大优势是生成事件和消费事件的过程是异步执行的,意味着资源之间的竞争关系较少,故服务器的响应能力也就越高。

3.3.2 响应式宣言

响应式宣言是一份构建现代云扩展架构的处方。这个框架主要使用消息驱动的方法来构建系统,在形式上可以达到弹性和韧性,最后可以产生响应性的价值。所谓弹性和韧性,通俗来说就像是橡皮筋,弹性是指橡皮筋可以拉长,而韧性指在拉长后可以缩回原样。

响应性: :只要有可能,系统就会及时地做出响应。即时响应是可用性和实用性的基石,而更加重要的是,即时响应意味着可以快速地检测到问题并且有效地对其进行处理。即时响应的系统专注于提供快速而一致的响应时间,确立可靠的反馈上限,以提供一致的服务质量。这种一致的行为转而将简化错误处理、建立最终用户的信任并促使用户与系统作进一步的互动。

韧性:系统在出现失败时依然保持即时响应性。这不仅适用于高可用的、任务关键型系统——任何不具备回弹性的系统都将会在发生失败之后丢失即时响应性。回弹性是通过复制、遏制、隔离以及委托来实现的。失败的扩散被遏制在了每个组件内部,与其他组件相互隔离,从而确保系统某部分的失败不会危及整个系统,并能独立恢复。每个组件的恢复都被委托给了另一个(外部的)组件,此外,在必要时可以通过复制来保证高可用性。(因此)组件的客户端不再承担组件失败的处理。

弹性:系统在不断变化的工作负载之下依然保持即时响应性。反应式系统可以对输入(负载)的速率变化做出反应,比如通过增加或者减少被分配用于服务这些输入(负载)的资源。这意味着设计上并没有争用点和中央瓶颈,得以进行组件的分片或者复制,并在它们之间分布输入(负载)。通过提供相关的实时性能指标,反应式系统能支持预测式以及反应式的伸缩算法。这些系统可以在常规的硬件以及软件平台上实现成本高效的弹性。

消息驱动:反应式系统依赖异步的消息传递,从而确保了松耦合、隔离、位置透明的组件之间有着明确边界。这一边界还提供了将失败作为消息委托出去的手段。使用显式的消息传递,可以通过在系统中塑造并监视消息流队列,并在必要时应用回压,从而实现负载管理、 弹性以及流量控制。使用位置透明的消息传递作为通信的手段, 得跨集群或者在单个主机中使用相同的结构成分和语义来管理失败成为了可能。非阻塞的通信使得接收者可以只在活动时才消耗资源,从而减少系统开销。

问题:消息驱动与上面提到的事件驱动有啥区别呢?

响应式宣言指出了两者的区别:“消息驱动”中消息数据被送往明确的目的地址,有固定导向;“事件驱动”是事件向达到某个给定状态的组件发出的信号,没有固定导向,只有被观察的数据。

在一个消息驱动系统中,可寻址的接收者等待消息的到来然后响应消息,否则保持休眠状态,消息驱动系统专注于可寻址的接收者。响应式系统更加关注分布式系统的通信和协作以达到解耦、异步的特性,满足系统的弹性和容错性,所以响应式系统更倾向于使用消息驱动模式。

在一个事件驱动系统中,通知的监听者被绑定到消息源上。这样当消息被发出时,它就会被调用,所以,响应式编程更倾向于事件驱动。

下一篇老周会来说下响应式流的核心机制是什么?敬请期待~


欢迎大家关注我的公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。

关键词: 事件驱动 异步执行 消息传递

 

热文推荐

Spring 响应式编程,真香!!!_焦点

一、前言响应式编程是啥?为啥要有响应式编程?响应式流的核心机制是什么?Spring响应式编程能解决我们平时开发的什么痛点?Spring响应式编程

2023-01-16

世界速讯:消费电子ODM厂商亿道信息(001314.SZ)拟首次公开发行3511.15万股

智通财经APP讯,亿道信息(001314 SZ)披露招股意向书,该公司拟首次公开发行3511 15万股,为本次发行后公司股份总数的25%;发行后总股本为1 40

2023-01-16

为什么很多企业数字化转型,都被“牛鞭效应”给拖垮了?

作者|Mr K编辑|Emma来源|技术领导力(ID:jishulingdaoli)前几天,跟一

2023-01-15

北京文化志愿者“送福到家”走进北京站 全球观焦点

北京文化志愿者“送福到家”走进北京站

2023-01-15

朋友圈新年祝福 适合祝福新年的句子 全球即时看

愿你,百事都如意顺遂,得到的都是惊喜。2023,愿时光能缓,愿故人不散,愿独闯的你不孤单。今夕和往常一样,我又陪了你一年。2023年,愿新年

2023-01-14

全球速看:东威科技01月13日获沪股通增持8.97万股

01月13日,东威科技获沪股通增持8 97万股,最新持股量为97 89万股,占公司A股总股本的0 67%。

2023-01-14

当前消息!讲好品牌故事.助推企业发展

2023年1月7日,由中国企业报、中国企业网、《中国企业报》集团与北京各省市驻京机构商务协会联合多家组织机构共同举办的2022消费者喜爱的“中

2023-01-13

环球最资讯丨佛山办理港澳通行证团队旅游签要居住证吗?

佛山办理港澳通行证团队旅游签要居住证吗?答:本省居民不要居住证,外省户籍居民需要居住证。具体申请材料如下:1、本省居民:①本省户籍居民

2023-01-13

全球即时:北京公租房可以落户口吗?

➤北京公租房可以落户口吗?答:不可以,北京落户相关事宜请咨询相关派出所。➤北京公共租赁住房和廉租住房的申请家庭成员包括哪些?公共租赁

2023-01-13

打新必读:江瀚新材申购

【新股申购】江瀚新材(行情603281,诊股):申购代码732281,发行价格35 59元 股,发行市盈率14 80倍,申购上限2 6万股。公司主营功能性有机

2023-01-13

三峡新材:1200T/D光伏玻璃生产线通过听证 尚未实施

三峡新材:1200T D光伏玻璃生产线通过听证尚未实施有投资者在投资者互动平台提问:既然贵公司生产的平板玻璃价格下滑,严重亏损,为什么不生产

2023-01-12

环球今日报丨2023年福州三坊七巷春节游玩路线推荐

林觉民·冰心故居—严复故居—二梅书屋—小黄楼—水榭戏台—叶氏民居林觉民·冰心故居位于杨桥路17号的林觉民·冰心故居就是三坊七巷游的第一

2023-01-12

2022广州积分入户基础分相同怎么排名?

基础分值相同时,按照在广州市缴纳社会医疗保险时长排名。广州积分入户大致流程①获得核定积分。申请人必须在“广州市来穗人员积分制服务管理

2023-01-12

2023南京秦淮灯会点灯仪式时间(附布展范围)-环球看点

2023南京秦淮灯会点灯仪式将于2023年1月14日(腊月二十三)举办,具体点灯时间后续将持续更新。第37届秦淮灯会主要在夫子庙景区、老门东景区等

2023-01-12

天天热点!让夫妻共同财产申报制度发挥更大效用

新修订的妇女权益保障法已于2023年1月1日起实施,近段时间以来,湖南、北京、上海、天津、吉林、江苏和江西等十余个省市都发出了当地首份《夫

2023-01-12

焦点热讯:一体化压铸板块1月11日跌2.17%,今飞凯达领跌,主力资金净流出2.21亿元

1月11日一体化压铸板块较上一交易日下跌2 17%,今飞凯达(002863)领跌。当日上证指数报收于3161 84,下跌0 24%。深证成指报收于11439 4

2023-01-12

热消息:博人一直喊花火姐姐,巳月得知真实情况后,不该是小姨妈吗?

日向一族是木叶村的大家族,拥有着血继界限白眼,雏田和火花都是宗家的人,而且是关系很好的姐妹,小时候的日足对于她们都很严格,希望雏田能

2023-01-11

香港国际金融论坛中国证券金紫荆奖揭晓:同仁堂科技公司获评“最具投资价值上市公司”_每日动态

同仁堂科技再获上市公司殊荣。2022年12月20日,在第十二届香港国际金融论坛暨中国证券金紫荆奖颁奖典礼上。北京同仁堂科技发展股份有限公司(

2023-01-11

有意思小周刊(2023.01.09):一文详解|影响成长的关键思考-天天实时

「有意思小周刊」是我利用零碎时间,梳理记录一周的日常阅读与思考内容。目的是为以后更好构建自己知识体系,也为了将这些内容分享给你。▌一

2023-01-11

全球球精选!2023广东公务员考试报名截止时间是几点?

2023广东省考报名截止时间报名截止时间为1月16日16:002023年广东省考时间表网上报名开始:1月10日9时网上报名截止:1月16日16时缴费截止:1月1

2023-01-11

资讯

冲刺“运动科技第一股”!Keep递表再次申请港交所主板

2022年9月6日,Keep递表港交所主板,冲刺运动科技第一股,高盛和中金公司为联席保荐人。这是继2022年2月25日递表失效后的再次申请。招股书

2022-09-16     
北京推出14条秋游文化线路

金秋时节,北京市文化和旅游局以赏银杏品文化为主题,推出14条“叶落的季节——漫步北京赏银杏品文化主题线路”,邀市民和游客以步行、骑行

2021-10-27     
基因编辑发力,培育高质量人源化供体猪

此次人体试验,仅仅验证了基因编辑猪克服异种器官移植的超急性排斥反应,还需解决延迟性排斥反应、消耗性血栓等问题。但通过这次试验,能更

2021-10-27     
中国经济高质量发展步伐稳健 长期向好基本面未变

在全球疫情走势和经济走势趋于复杂的背景下,中国经济巨轮将驶向何方,举世关注。2020年10月26日至29日,党的十九届五中全会在京举行,明确

2021-10-27     
南美解放者杯决赛允许近4.5万观众入场

南美洲足联主席多明格斯25日与今年解放者杯决赛对阵的两支俱乐部负责人会晤,宣布决赛现场观众人数增加到球场容量的75%,即近4 5万人。今年

2021-10-27     
22年从警生涯 面对荣誉他说:不要给我报功 给最辛苦的

9月24日,时任安徽省安庆市公安局迎江分局刑警大队大要案中队中队长周磊因在工作中激烈搏斗引发心源性猝死,倒在了工作岗位上,经医院抢救

2021-10-27