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后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。
推荐文章
- 湖北首家宝马新能源展厅BMW i 武汉摩尔城店超然启幕正式开业|快看
- 环球热文:洗牙粉百科_洗牙粉的功效和作用
- 歧视非英语乘客 国泰三空姐被炒
- 大马大师赛男单看点:国羽3将出击,陆光祖最难,李诗沣占上风?
- 【环球播资讯】辽篮关键续约!韩德君签2年老将合同,工资最多排第4,比付豪还少
- 环球热点!武汉未来之光物业服务有限公司(关于武汉未来之光物业服务有限公司介绍)
- 联想 x 英特尔智慧交通主题论坛:以 5G+AI 算力赋能智慧交通
- 新一轮降雨大幕明日揭开 北方气温开启“过山车”模式
- 动态:建筑倒塌损毁、人员被困……上海消防举行地震救援演练
- 今日热门!香港运输及物流局局长:已要求国泰航空管理层立刻改善服务
- 【环球热闻】优化环境,让消费更放心(经济聚焦·挖掘消费潜力①)
- 热门看点:俄罗斯境内遭袭 谁干的?
- 世界今热点:百度上搜不出爱奇艺?百度称已修复bug,爱奇艺:无瓜
- 天天微动态丨侠僧探案传奇之大兴赌坊在线观看_侠僧探案传奇之大兴赌坊
- *ST凯撒:控股股东被动新增平仓,第一大股东变更为海航旅游
- 实时:铸造“湾区光谷”!中山举办首届大珩光电产业论坛
- 环球快资讯丨Model Y搭载刀片电池 比亚迪特斯拉一时瑜亮
- 全球新动态:恩施电子卷宗深度运用
- 三里乡黄鳝养殖产量占全省八成以上
- 什么是真正的中国美学?来《美的殿堂》看看!
- 服刑期间信用卡逾期怎么办 服刑期间信用卡逾期怎么办农行 环球新视野
- 瑞声科技2022年上半年拥有人应占溢利3.5亿元,同比下降62%
- 拓宽“钱”路新担当 全新华菱M7牵引车创“盈”短途货运市场
- 追着花儿看新疆丨新疆洛浦:戈壁滩不再荒凉 有光就有动能
- 【时快讯】夏季谨防儿童溺水!熟记“四知”与“六不要”
- 天天短讯!在妙山村,瞥见未来乡村美妙模样|高质量发展调研行·浙江站
- 环球观速讯丨又一昔日巨头退出法网!英雄迟暮,36岁老将全力备战温网
- 尚荣医疗:5月11日召开业绩说明会,投资者参与
- 现场画面|我国珠峰科考登顶队员更改路线冲击顶峰
- 【焦点热闻】暮光之城5上映时间表_暮光之城5上映时间
- 今日讯!新华时评|认识、适应、引领我国人口发展新常态
- 哈姆:感谢我的队员们 他们本赛季全情投入并一直支持我的工作
- 山科智能:5月22日融资买入205.82万元,融资融券余额2166.78万元
- 野生大熊猫首次现身周至保护区108国道东侧|天天报道
- 抢先布局健康声学赛道 天键股份启动创业板招股_天天微速讯
- 世界新动态:世龙实业5月23日快速反弹
- 金属的通性物理性质(金属的通性)
- 2023河北邯郸高三三模政治
- 美术艺考考什么文化课 美术艺考都考什么
- 【天天快播报】“事故视频快处”系统今起上线 郑州市区发生轻微交通事故 可用“交管12123”APP快速处置
- 焦点快播:越南三宝吃的指哪三宝(越南特产中的白虎活络膏、越南牛角梳)
- 足球10号位是哪个位置 足球10号
- 热火26分大胜凯尔特人3-0!巴特勒16分划水,热火全民皆兵|世界新消息
- 即时看!东莞市气象台发布暴雨黄色预警【III级/较重】【2023-05-22】
- 专访:美国以零和思维对待贸易秩序损害他国利益——访韩国京畿大学教授金周焕
- 当前看点!完善产能布局 鹏辉能源(300438.SZ)拟约130亿元新建年产36GWh储能电池项目
- 世界看点:庞大集团濒临退市,连续多日股价跌停
- 实质性程序包括哪些具体程序(实质性程序包括哪些简介介绍)
- 百度交出搜索引擎王座 全球实时
- 天天热讯:抖音极速版如何打开抖音相册 抖音相册开启方法介绍
- 快看点丨建新股份:公司全资子公司建新瑞祥化学科技公司不涉及生物制药相关技术
- 万物皆可爱!看生物王国里的欢乐派对
- 张家港市乐余镇齐心村:海棠先锋强根系 点滴微举暖民心
- 世界快播:2023中考志愿如何录取规则 怎么填报志愿
X 关闭
最新资讯
- 焦点快播:江西:20.9亿资助学生上学!
- 邵阳液压拟收购威克斯液压78%股权
- “勇士”潜千米 深海探遗珍 热议
- 每日热点:变蛋是晾干还是晒干?
- 央视都看好的《后浪》,被观众要求停播下架,为什么骂声一片? 每日快报
- 中国技术交易所将与天津滨海—中关村科技园合作建设技术市场 天天资讯
- 【世界新要闻】彩金闹天宫金币价格今天多少一克(2023年05月22日)
- 趣睡科技股东户数连续3期下降 筹码集中以来股价累计下跌14.64% 全球焦点
- 以太网连接上不能上网怎么办_以太网连接是什么意思 焦点关注
- 2023父亲节发红包祝福语说什么
- 大连中远海运重工开建“智能研究与实训两用船”-热闻
- 山东:预计今年迎峰度夏期间入鲁外电将达3000万千瓦 全球报道
- 四月份的心情说说_四月份的心情说说有什么
- 注意!6月1日起,北京市政府信息公开大厅搬至新址
- 田其云中国海洋大学_田华 中国海洋大学讲师 最新快讯
- 监管严打促市值管理回归本源 实控人等“伪市值管理”被重罚 天天微资讯
- 蜡烛的气味和软硬 蜡烛的气味_天天报资讯
- 世界微资讯!职业高中能考哪些大学本科_职业高中能考哪些大学
- usb键盘无法识别设备怎么办 usb键盘无法识别
- 许怎么组词_许的组词
- 福建三明一辆7座小车冲出绿道坠河,3人已获救,4人正全力搜救中_全球报道
- 【时快讯】上海星璨整形医院医生以及擅长项目推荐
- 金斯瑞生物科技(01548.HK):传奇生物与投资者订立认购协议
- 体验运动快乐!2023年共筑中国梦广场舞展演举行_全球新消息
- 说案|“好心”的游戏代练?当心是没安好心!
- 今日最新!【短讯】SNEC前瞻|超3000家企业、30万光伏人将赴SNEC大会 “黑科技”、展会亮点抢先看!
- 贵州2地入选首批全国社会治安防控体系建设示范城市-天天观焦点
- “3种旧东西,再穷也不留”,家里若是有,赶紧清理出去,别忘了_热门看点
- 当前报道:马龙:我们都相信自己能做些伟大的事情 信仰的力量非常强大
- 【天天新视野】匆的拼音和组词_匆组词精选
- 榴莲树几年结果如何管理_榴莲树几年结果
- 主发起行增持村镇银行频现 今热点
- 甘肃省新能源产业招商推介会在成都举办
- 当前速递!仪征:“集中培训”提升土壤污染重点监管单位环境管理效能
- 环球热推荐:*ST凯撒收年报问询函:为何连续三年大额亏损?是否利用减值计提不当调节利润?
- 流产后能吃西瓜吗_孕妇能不能吃西瓜
- 添丁进口打一字_添丁 天天看点
- 世界观点:日本千叶县东南近海发生4.2级地震
- 木耳怎么保存才能长久 木耳的保存方法_当前短讯
- 洗洁精去油污原理得到的是什么发生什么变化_洗洁精去油污原理
- 天天快资讯丨《速度与激情10》北美首日率低于上集 全球前两日票房6900万美元
- 环球快消息!枋钟路下穿隧道通过验收 具备通行条件
- 山西发布第2号总河长令 六方面打造幸福河湖
- 千里之外有爱的陪伴和“家”的温暖
- 牛肉山药汤做法王刚?|世界观焦点
- 华峰超纤董秘回复:公司5月和4月生产经营正常
- 武汉大学东湖分校电子信息工程学院|观焦点
- 可以用矿泉水冲奶粉吗?冲奶粉的水温多少度合适?
- 【世界快播报】周末北方多地降温剧烈 湖南湖北等地暴雨如注
- 天天看热讯:2023年湖南省湘潭市成人高考在哪里报名?
X 关闭