【天天新要闻】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年南宁过年可以放烟花吗
- 双飞股份1月13日盘中涨幅达5%
- 【全球聚看点】业绩下降却股价翻番,黑芝麻收关注函,要求核查是否涉嫌内幕交易
- 珠海长隆学生证照片可以吗
- 华光环能(600475)1月12日主力资金净卖出327.13万元|播报
- 全球聚焦:国产C919客机获1035架订单 , ARJ21国产客机亦被订690架
- 河北石家庄:灯笼高挂大集火 书市飘香观影热-天天观察
- 环球快消息!正味集团(02147.HK)公开发售股份获大幅超额认购18.28倍 发售价定为每股0.68港元
- 环球资讯:中水渔业2022年预计净利800万-1200万同比扭亏为盈鱼货市场价格走高
- 小麻袋网贷逾期多长时间上征信 环球快播
- 描写植物的句子出处(精选398句)
- 南华期货:油价小幅波动 天天看点
- 当前消息!企业产能恢复到季节性峰值状态 万人大食堂“烟火气”回来了
- 这类食品,卖爆了!今年年夜饭“C位”或是它? 焦点热闻
- 南京新百董事长翟凌云荣获最佳上市公司董事长奖项_环球观察
- 当前速讯:醉驾案底什么时候可以撤销案底
- 闪电钱包逾期35年延迟还款影响征信吗
- vivo S,又见爆款-天天快报
- 环球快看点丨英媒称英国考虑向乌克兰提供主战坦克
- 茂化实华(000637.SZ):目前没有生产茂金属聚丙烯、也没有生产POE,没有对北京海洋馆做过2023年实现净利润1.6亿元的预计
- “七一勋章”获得者孙景坤逝世 享年98岁-全球快资讯
- 当前播报:玻尿酸注射完后要注意什么?
- 青海新冠治疗医保政策:中藏医疗机构院内制剂延续临时支付政策-环球简讯
- 可惜错过
- 【新视野】沪指五连阳,赛道股大涨,1月6日投基复盘。
- 光明日报大健康版:轻断食有学问 环球报道
- 国际锐评|美国作为头号毒株流行国,居然贼喊捉贼!_速递
- 为偏远山区电网数字化转型装上强劲引擎|焦点速读
- 息县召开2023年“美好生活在息县 欢乐新春”系列活动工作推进会
- 央行:截至1月5日,北京市贺岁币兑换数量为189.76万枚_头条
- 2023年8月健康运最好的星座 身体强健无烦恼|全球快报
- 城建发展:1月5日融券卖出金额64.74万元,占当日流出金额的0.43%_看点
- 金银首饰有辐射,戴了会致癌?3种首饰尽量别戴_环球今热点
- 网贷逾期26万现在还不起到底有多严重
- 甘蔗肉是什么?_世界资讯
- 中央气象台:我国近海将有6~8级风-环球最资讯
- 环球观焦点:23恒丰银行CD001今日发布发行公告
- 今热点:兰州黄河董秘回复:关于您提出的问题,请参阅公司已披露的定期报告中的相关内容
- 2022年最佳健康科普作品(图文类):营养膳食图-当前通讯
- 专家:免疫功能正常人群再感染XBB风险小
- 员工换人申请范文(推荐27篇)
- 【评测】高性能轻薄大屏,小米 Redmi G Pro 锐龙版上手体验!
- 天纺标(871753)1月3日游资资金净卖出4.79万元
- 金鹰重工:与实控人、关联方签署3.95亿元8项重大销售合同|关注
- 恒生指数开盘跌1.07% 恒生科技指数跌1.15%
- 时讯:一图读懂!老年感染者就医全流程指南
- 上坤地产2023年到期13.5%优先票据已退市 未偿还本息1.6亿美元 天天亮点
- Nacos 支持Oracle数据库持久化插件使用
- 当前消息!蜂蜜柚子茶用红柚还是白柚?
- 全球滚动:古驰毛拖怎样清洗?
- 合同不履行诉讼时效还有多久
- 焦点播报:华泰证券(06886.HK):周易出任董事会职工代表董事
- 智明达(688636):成都智明达股东集中竞价减持股份结果-每日速递
- 声光电科年报审计机构大信及会计师被上交所监管警示
- 天天资讯:浦东新区第四针新冠疫苗接种点一览表
- 博时阿尔法回报混合型证券投资基金开放日常申购、 赎回、转换、定期定额投资业务的公告
- 华仁药业(300110.SZ):聘任洪亮为执行总裁
- 教育部等十三部门:不得将非学科类校外培训结果与大中小学招生入学挂钩|滚动
- 当前视讯!常德武陵区:推动清廉政府建设 助力城市高质量发展
- 北京君正12月28日获深股通增持22.61万股 环球关注
- 中泰化学(002092.SZ):托克逊能化引入战略投资者农银投资实施市场化债转股 环球视讯
- 机器学习数据不满足同分布,怎么整? 每日快播
- 犀牛看市1227:两市超2900只个股上涨 珠宝首饰板块走高
- 全球观点:V观财报|狂秀“财技”!模塑科技及董事长等拟被罚360万
- 全球快报:前11月城镇新增就业1145万人 完成全年目标任务
- 悦康药业:融资净买入279.68万元,融资余额9930万元(12-27)
- 世界速看:宋仲基新女友身份被扒,曾是英国情色片演员,颜值不输宋慧乔
- 【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等)
- 环球视点!万亿GDP城市出手,全面取消限购!多个热点城市购房政策大幅松绑
- 头条焦点:十大优质国内正规MT4交易平台排名榜(2023最新版)
- 亦庄国投荣获“2022年中国国资投资机构50强”
- 热门:红色旅游发展指数排名:河南居首湖南仅居第六
- 东北制药:公司部分产品目前在东东宝、天猫、京东等平台均有销售_新视野
- 云闪贷逾期2个月会上征信记录吗_热闻
- 硫磺国产量持续提升 价格拐点或在明年四月|年终盘点
- 天天观焦点:中国“边城”珲春对外经贸合作突破不断
- 本周盘点(12.19-12.23):曲江文旅周跌5.70%,主力资金合计净流出6767.53万元
- 海力风电:12月22日融券卖出金额158.21万元,占当日流出金额的1.32%_即时看
- 今日热讯:四川申报《哪吒之魔童降世》获得中国文化艺术政府奖最佳动漫作品奖
- 焦点精选!中兴商业:截至2022年12月20日,公司股东户数约为2.0万户
- 世界观速讯丨优信巴士逾期18年
- 波卡周报|31 项公投在 OpenGov 系统上提出,Bifrost 与 Astar & Shiden 开通 HRMP 通道! 今日讯
- 每日视讯:圣诺生物: 第三届监事会第二十一次会议决议公告
- 今热点:宁德时代12月6日获深股通净买入3.18亿
- 黄山提升政府采购透明度 助力实体经济持续健康稳定发展
- 1-2月黄山新签“双招双引”项目103个 总投资额139.7亿元
- 池州海关共签发RCEP原产地证书22份 签证金额92.7万美元
- 宿州泗县深入推进文旅融合发展 擦亮城市品牌
- 河北工业生产平稳开局 固定资产投资较快增长
- 昆明西山区深入实施人才强区战略 建立健全招商招才引资并轨新模式
- 2月唐山新建商品住宅销售价格与上月持平 同比下降0.8%
- 去年河北电子信息产业实现主营业务收入2367.7亿元 同比增长22.4%
- 绥化望奎以工业化思维为引领 推动肉类加工制造产业腾飞
- 绥化市监局推出多项举措 大力促进有机产品产业发展
- 半路出家无心插柳 杭州西湖区“菌菇宝宝”变废为宝
- 温州鹿城区藤桥主打藤桥熏鸡 近两年销售额年均增长20%以上
- 1-2月安徽限额以上消费品零售额1030.4亿元 同比增长10.4%
- 2021年合肥市茶园面积13.6万亩 产值176350万元
广告
广告
- 长治襄垣县增收11517万元 提前15天实现首季“开门红”
- 黑龙江讷河新增1例确诊4例无症状 病例详情公布
- 浙江宁波余姚奉化宁海三地开展核酸检测 结果均为阴性
- 浙江湖州南浔三处棋牌室经营者被行拘
- 那年今日 | 一张漫画涨知识之12月13日
- 在宁波乘火车跨省出行须持48小时内核酸阴性证明
- 浙江温州一地发现核酸弱阳性?复采复检结果均为阴性
- 浙江三门发现一名密接者:二次核酸检测结果均为阴性
- 贱卖的发电机 新买的制茶机——安徽水电供区改革两周年回访见闻
- 浙江杭州新增1例新冠肺炎确诊病例 为集中隔离人员
- 2022年研考在即,学硕缩招,专硕时代真的来了?
- 探访杭州核酸检测点:排队高峰多在夜间 医院24小时运转
- 浙江发挥零售药店“哨点”作用 织就疫情防控监测网
- 哈尔滨市本轮疫情首批1名确诊患者出院
- 宁波镇海第三轮全员核酸检测574181人 结果均为阴性
- 陕西新增本土确诊病例1例、境外输入无症状感染者2例
- 齐齐哈尔讷河一地调整为中风险地区
- 浙江新增新冠肺炎确诊病例75例 其中本土74例
- 内蒙古新增本土确诊病例5例 均在呼伦贝尔满洲里市
- 黑龙江无新增确诊病例 新增本土核酸检测初筛阳性人员5例