当前位置:首页>热门 > 正文

世界微速讯:Spring 响应式编程,真香!!!

  • 2023-01-18 01:35:07来源:程序员客栈
一、前言

响应式编程是啥?


(资料图片仅供参考)

为啥要有响应式编程?

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

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响应式编程

焦点快报!联盛化学(301212.SZ)2022年度净利润预增86.4%-112.38%

格隆汇1月17日丨联盛化学(301212 SZ)公布,预计2022年度归属于上市公司股东的净利润1 65亿元-1 88亿元,同比增长86 40%-112 38%

当前热议!伟时电子:公司产品应用到汽车后视镜系统中

同花顺(300033)金融研究中心1月17日讯,有投资者向伟时电子(605218)提问,请公司的产品有汽车电子后视镜产品或应用于后视镜的产品及其系统

【环球热闻】美“星链”系统已部分交付乌克兰军队

据塔斯社报道,乌克兰数字化转型部长费多罗夫当地时间16日表示,几十个“星链”(Starlink)卫星通信终端和80多架无人机已被移交给位于巴赫穆特

头条:华能水电董秘回复:主要是由于公司部分电站竣工决算调整固定资产账面价值

华能水电(600025)01月17日在投资者关系平台上答复了投资者关心的问题。

热消息:1月16日基金净值:工银成长精选混合A最新净值0.7701,涨1.3%

1月16日,工银成长精选混合A最新单位净值为0 7701元,累计净值为0 7701元,较前一交易日上涨1 3%。历史数据显示该基金近1个月上涨5 59%,近3个

环球速看:23广东南粤银行CD003今日发布发行公告

23广东南粤银行CD003发布发行公告

百事通!武汉都市圈九市住房公积金实现“打通用”

武汉都市圈九市住房公积金实现“打通用”2023年01月16日13:51工人日报

世界播报:王杨:黄金趋势牛市,早盘1815干多!

黄金趋势牛市开启,趋势为王,点位致胜,早盘1815支撑位置继续干多看涨!顺势多!当前的黄金毫无疑问的是趋势上涨行情,每一次回调后都继续上

环球今日讯!日本核污水排海计划遭多方痛批

参考消息网1月15日报道据德国《法兰克福汇报》网站1月13日报道,12年前,福岛第一核电站三个反应堆的堆芯熔毁,让日本和

环球今热点:寒潮、暴雪双预警齐发 多地遭遇雨雪大风天气

寒潮、暴雪双预警齐发多地遭遇雨雪大风天气---这两天,寒潮天气持续影响我国多地,并带来雨雪大风天气,北方部分地区降温超过20℃。而随着冷空

世界微动态丨中国东方红一号寿命仅28天,为何遨游太空52年,还未坠入大气层?

在现在的发展过程当中,有一些领域是绝对不可以忽视,正是由于这样的原因,也需要做更多的推进。时间上的发展会有更多技术上

环球通讯!东四小年庙会燃起胡同烟火气

值得一提的是,庙会当天,借着浓浓的年味儿,东四街道对辖区12支社区优秀团队进行颁奖表彰,感谢他们过去一年对街道、社区工作的支持。摄影 张

热资讯!康辰药业: 康辰药业股东集中竞价减持股份结果公告

康辰药业:康辰药业股东集中竞价减持股份结果公告

今日最新![快讯]煜邦电力:股东及董监高集中竞价减持股份计划

CFi CN讯:?大股东及董监高持股的基本情况截至本公告披露之日,北京煜邦电力技术股份有限公司(以下简称“公司”或“煜邦电力”)股东红塔...

环球今日讯!虚假账户骗了投行巨头?券商究竟有多少有效户?

券业行家,事实说话。欢迎留言,如果认同,请传播正能量。在继坊间热议“外资私募董事长被电信诈骗千万”之后;又有媒体报道称,投行巨头“...

头条:又有两名“70后”银行高管履新,“金融副省长”增至16名

中国建设银行资料图来源:中新经纬摄在出任建行副行长期间,张敏主要分管金融科技、渠道运营等条线。2022年3月,在建行2021年业绩发布会上,张

全球热消息:锂电正极材料供应商湖南裕能(301358.SZ)拟首次公开发行1.89亿股 客户集中度较高

智通财经APP讯,湖南裕能(301358 SZ)披露招股意向书,该公司拟首次公开发行1 89亿股,占发行后总股本25%;发行后总股本为7 57亿股。本次发行初始

天天即时看!《黑暗荣耀》男二出轨了吗 女二老公不孕不育无生育能力?

《黑暗荣耀》男二知道真相了。女主为了报复女二故意接近男二,因为男二是女二的丈夫,在相处中,女主对男二说出了女二的真实面目。

【天天新要闻】最平淡的感情句子(精选314句)

最平淡的感情句子精选75句1 这个世界上,爱情以很多种方式存在着,或热烈、或平淡、或浪漫、或悲情。有那么一种人,一边骂着你,一边为你撑伞

天天热点!官方:加快补齐县级地区生活垃圾焚烧处理设施短板弱项

长江经济带、黄河流域、生活垃圾分类重点城市、“无废城市”建设地区以及其他地区具备条件的县级地区,应建尽建生活垃圾焚烧处理设施。在经...

全球观察:人民币中间价上调76点报6.7680!美联储2月加息25BP概率为76.3%

1月12日,人民币中间价报6 7680,上调76点,上一交易日中间价报6 7756,在岸人民币上一交易日收报6 7775。美联储2月加息25BP的概率为76 3

最资讯丨YOLOv8来啦 | 详细解读YOLOv8的改进模块!YOLOv5官方出品YOLOv8,必卷!

点击下方名片关注【集智书童】,后台回复【YOLOv8】获取YOLOv8源码以及书童亲自绘制的YOLOv8结构图原图。回顾一下YOLOv5,不然没机会了这里粗略回

要闻:2023自贡灯会除夕免费吗?

部分人群可以免费,但是大部分人群任然是收费的。2023年灯会将在大年三十(1月21日)开放,票价为99元!比春节期间(1月22日至2月5日,成人票

世界热点!2023年北京欢乐谷春节门票多少钱?附购票入口

➤2023年北京欢乐谷春节门票多少钱?☞全价票:299元注:身高超过1 5米的成人☞青少年优惠票:260元注:身高超过1 5米,且年龄小于18周岁(不含18周岁

世界百事通!泰国2023年公司债销售额预计超过1万亿泰铢。

泰国2023年公司债销售额预计超过1万亿泰铢

快看:苹果App Store增速放缓:2022年创收700亿至850亿美元

新浪科技讯北京时间1月11日早间消息,据报道,每年一月,苹果都会披露自2008年以来为AppStore开发者创造的收入,这项数据也可以帮助分析师和苹

全球快看:雷神众测漏洞周报2023.1.3-2023.1.8

以下内容,均摘自于互联网,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,雷神众测以及文章作者

全球微动态丨鞑靼女孩,俄罗斯男人眼中的标准

如果你问俄罗斯男人最想找哪个民族的女人做老婆,他们基本不会选择斯拉夫女性,他们会告诉你传统的鞑靼女孩是他们的最爱。每个国家都有自己的

焦点日报:合肥庐江县白湖镇卫生院发热门诊联系方式

合肥庐江县白湖镇卫生院发热门诊联系方式:地址:白湖镇裴岗社区电话:13965680951纳入门诊救治保障的定点医疗机构范围新冠感染门诊救治取消定

猜您喜欢

    Copyright ©  2015-2022 纵横服装网版权所有  备案号:浙ICP备2022016517号-12   联系邮箱:51 46 76 11 3 @qq.com