Spring 响应式编程,真香!!!
响应式编程是啥?
(资料图片仅供参考)
为啥要有响应式编程?
响应式流的核心机制是什么?
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 响应式编程,真香!!!
- 大幅减产?一则消息引发双粕联袂大涨,粕强油弱能维持多久?-焦点播报
- 北京科学中心数百项公益活动打造“科技寒假”
- 焦点简讯:文旅部:国家级文化生态保护区建议名单公示
- 2023兔年30克银币价格(2023年01月12日)
- 今日热搜:东吴证券:给予派能科技买入评级,目标价位542.7元
- 国家电网董事长:2023年电网投资将超5200亿元 再创历史新高|天天时讯
- Windows 11 内核新调试器「GitHub 热点速览 v.23.01」 世界快看点
- 深圳市投资基金同业公会发布《公募基金销售业务合规手册》 世界百事通
- 最强“春节档”强势来袭?已有7部影片角逐
- 焦点热议:南方浩恒稳健优选6个月持有混合(FOF)正式发行
- 新余市融媒体中心揭牌|世界关注
- 首席信息官在2023年可能让首席执行官感到失望的5种情况
- 每日讯息!白石山玻璃栈道多少钱
- 天天热文:致敬警察节|2022年郑州郑东新区警察调解纠纷4.7万起 平均3.5分钟接报1起警情
- 捷信超贷逾期未还怎么办
- 非法经营期货多少时间能判刑 焦点
- 珠江航务管理局多措并举保障船民顺利返乡过年_世界时快讯
- 九龙证券|酿酒、旅游等板块集体拉升,众信旅游等走高 速看料
- 微速讯:美媒 中国游客成为全球奢侈品牌的热点
- 开训!东部战区,数架歼-20出击-环球报道
- 留给威马的时间不多了
- 环球热门:贾跃亭再登“老赖榜”!被多家创投申请限制消费,未履行总金额超87亿
- 老板私下给员工鉴定工伤赔偿协议怎么写?
- 春节自驾返乡要注意什么
- 【天天播资讯】笑神姜涛恋情公布一个月,女友泪洒直播间,疑似在为分手做打算
- 2023年春运北京地区铁路预计发送旅客993.4万人
- 机构:春节假期长线旅游订单占比达七成|环球热议
- 有钱花借款逾期34年多久上征信 世界观天下
- 天天快资讯:美国众议院议长选举第十轮投票仍未果
- 快易花网贷逾期会怎样?
- 美联新材(300586)新增【固态电池】概念
- 网格员快速反应,成功消除火灾隐患|速读
- 麦格理:首予中升控股跑赢大市评级 目标价81.6港元 天天短讯
- 【快播报】浙江:明起15种药品临时纳入医保
- 蒙脱石散、诺氟沙星、免疫球蛋白……需要家中常备吗,专家来解答-全球观速讯
- 金地集团涨6.10%,天风证券二个月前给出“买入”评级_当前动态
- 焦点速讯:港媒:香港珠海深化航空产业合作
- 江苏92号汽油价格调整最新消息|今日热议
- 公安机关去年侦办跨境赌博案件3.7万余起
- 陈涉世家的翻译及原文 文言文陈涉世家的翻译及原文 每日观察
- 昆药集团(600422):增补部分董事、监事|每日观察
- 市场监管总局:五地试点委托经营者集中审查开局良好
- 全球热头条丨日元对美元汇率一度升破129.8日元
- 2023内地入境澳门最新防疫措施
- 路虎卫士纯电动汽车将于2025年推出:续航483公里-全球热门
- 扎克伯格捧着华裔老婆孕肚新年亮相!妻子挺着三胎孕肚,确实显老 环球今亮点
- 天天信息:e点贷网贷逾期2000拖欠多久会上征信系统
- 奋楫新征程丨新闻特写:巅峰使命 青春的攀登
- Nacos 支持Oracle数据库持久化插件使用
- 贵州送变电公司荣登贵州企业“双百强”和“成长之星”榜单
- 天天头条:感染新冠病毒,久咳不止怎么办?专家解答来了
- 大盘全年下跌15% 创业板跌幅近30%
- 波司登要“割”消费者?羽绒服售价过万引争议 世界热消息
- 天天热议:天士力董秘回复:根据公司2021年半年度报告,芪参益气滴丸增加心衰适应症II期临床试验在稳步推进当中
- 将饮茶|全球快讯
- 焦点简讯:国防部:美方如有意全面恢复对话交流 必须拿出诚意和行动
- 当前最新:ST广珠: 广东明珠集团股份有限公司关于收到股权转让款的进展公告
- 焦点快报!胜宏科技董秘回复:公司生产经营情况正常,产能利用率约80%
- 富士智能:拟冲刺创业板IPO上市 预计投入募资4.93亿元_天天实时
- 中际旭创: 关于使用部分自有资金进行现金管理的进展公告|天天热资讯
- 【全球时快讯】加快推进联合训练场地建设
- 福州永泰免费核酸检测到什么时候 环球视点
- 网贷8000没钱还会有什么影响?
- 世界焦点!牛肉烫火锅要煮多久才能吃 关于牛肉烫火锅要煮多久
- 张纪中新冠病情加重,头发凌乱赤膊卧床,引起网友热议
- 今亮点!科安达: 第五届董事会2022年第六次会议决议公告
- 世界信息:共享WIFI项目解析 天天乐享WIFI 靠谱创业项目、资方青睐!
- 青春不过几场世界杯 环球最新
- 12月26日基金净值:太平丰润一年定开债发起式最新净值0.956,涨0.59% 全球独家
- 世界简讯:国网英大: 国网英大第八届董事会第四次会议决议公告
- 环球速讯:恒瑞医药董秘回复:如有相关信息,公司将严格按照《上海证券交易所股票上市规则》及行业指引等相关规定进行公告
- 著名舞蹈家赵青因新冠病逝,儿子发文痛悼母亲,曝去世经过与死因
- 邻里互助传递抗疫暖流|全球即时看
- 天天关注:巴黎市区发生枪击事件 多人死伤
- 新消息丨嘉鱼县发出倡议:给农村老人端一碗姜汤,送一粒药,打一次加强针
- 保密协议一般会有几份
- 明阳智能董秘回复:公司应付账款的增长主要为公司营收规模扩张所致|当前报道
- 接棒三菱、丰田,又一公司因安全带隐患召回汽车
- 天天视点!*ST科林(002499)12月22日主力资金净卖出3.98万元
- 天康生物(002100)12月21日主力资金净买入561.61万元 当前视讯
- 小期贷逾期四年延迟还款会上征信吗 世界最资讯
- 恒玄科技(688608)12月20日主力资金净卖出140.99万元 每日视点
- 全球速讯:Free Arch: 将 IdentityServer 部署到 Okteto
- 通达股份董秘回复:子公司成都航飞主要从事航空零部件精密加工及装配业务,医疗器械产品占营收比例较低_全球今日讯
- 白猫贷分期逾期15个月会产生什么后果
- 热点聚焦:嗨袋网贷18万逾期有起诉的风险吗
- 环球快资讯丨赛托生物:公司没有生产布洛芬的原材料
- 逾期38年会影响征信吗|全球动态
- 金开新能: 第十届董事会第三十四次会议决议公告-环球实时
- 英媒:西班牙启动“减少工作时间”试点项目
- 即时焦点:如何给13岁的子女交抚养费
- 山东黄金: 独立非执行董事关于公司第六届董事会第三十二次会议相关事项的事前独立意见|看点
- 面食爱好者的福音来了!苏泊尔和面机349元带回家 全球视点
- 世界短讯!哪些是债权人呢查了相关资料也看不明白
- 深桑达A: 2022年第五次临时股东大会决议公告|天天热文
- 小鲨易贷逾期了三天还不了怎么办?|天天通讯
- 12月14日基金净值:景顺长城成长领航混合最新净值1.1528,涨0.17%
- 南召四棵树乡:乡村振兴最前线 第一书记展担当-每日资讯
- 异动快报:同庆楼(605108)12月14日9点47分触及涨停板
X 关闭
行业规章
X 关闭