带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(1)

简介: 带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(1)

响应式编程的复杂度和简化

image.pngimage.png作者:蒋文豪(四点) 出品:大淘宝技术

 

 

响应式系统不是今天的主题,我们要讨论更具体的话题,即响应式代码的编写会有哪些复杂度,应该如何简化。

 

什么是响应式编程

 

什么是响应式编程,它是一种编程范式?还是一种设计模式?抑或是其他?响应式系统和响应式编程有什么关系? 又比如,响应式编程它适用于什么场景?解决什么问题?

 

微软于2011年率先建设了.Net上的Rx库,以简化容易出错的异步和事件驱动编程,迈出了响应式编程的第一步,随后业界为许多编程语言提供了对应的实现。

 

.Net上的Rx库地址https://docs.microsoft.com/en-us/previous-versions/ dotnet/re - active-extensions/hh242985(v=vs.103)

 

什么是响应式,我们从一个例子开始

image.png

 

在上面的表格中,建立了单元格之间的关系:`A1 = B1 + C1`,建立关系之后A1将响应任何对于B1和C1的变化,毫无疑问,这就是一种响应式行为。

 

我觉得这个例子很棒的地方在于,它显然很简单,同时又足够深刻,首先,它充分的体现了响应式的概念,其次, 变化发生时,肯定触发了某些过程的执行,说明背后存在关系的建立和沿着关系传播的变化,再次,稍微深入一点看,B1和C1的变化可以是一系列的变化,可以很自然的引申到流的概念,最后,它有一个很高级的抽象,对使用方来说,整个过程是声明式的。

 

当然,举例子来说明一个概念的时候,本质上是用一个外延在解释一个概念的内涵,往往是会将内涵缩小的,所以我们可以尝试推广这个外延。列出这个例子的特征:

 

 

 

描述了一个单元格里的整数等于另外两个单元格里整数相加,当后者每次发生变化时,变化都会传播到第一个单元格,并进行求值。

 

关键词为整数、等于、相加、变化、每次、传播、求值。前三个关键词仅仅和例子相关,可以直接去掉。变化可以推广为数据,每次可以在逻辑上等价于流的概念,流可以有0个、1个或多个数据,传播可以推广为通信(在这个意义上,函数调用、RPC、socket、MQ都是通信),求值推广为执行一个过程。所以我们可以得出响应式编程的定  义:

 

通过声明式的通信定义,将数据流与过程组合起来,从而实现数据驱动过程的一种复合编程范式。

 

时至今日,业界对于响应式的定义仍然是不统一的,因此这是我自己的理解。响应式的基础概念是数据流,理念是过程的执行是通过响应数据来驱动的,核心是构造数据和过程的响应关系,并且能够让数据沿着关系传播驱动过程,因此响应式编程本质上是一种对通信的抽象,说它是一种编程范式,是因为它提供一种对于数据与过程组合方式的看法,说它是复合范式而不是基本范式,是因为它不像OOP或者FP一样提供的是对于数据和过程的看法,而 是以两者为基础,所以可以有对象响应式和函数响应式。

 

当我们基于响应式构建系统时,就是响应式系统,响应式系统的构建原则可以参考此处(地址:https://www.re-activeprinciples.org/patterns/communicate-facts.html),总的来说,系统会分割成一个一个的分区,分区内部对状态进行本地化,分区之间通过通信进行异步解耦,可以通过控制这个通信的过程,实现系统的弹性扩缩容和部分组件失败的回弹性。

 

响应式系统不是今天的主题,我们要讨论更具体的话题,即响应式代码的编写会有哪些复杂度,应该如何简化。

 

带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(2)https://developer.aliyun.com/article/1339638?groupCode=taobaotech

相关文章
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
存储 设计模式 监控
运用Unity Profiler定位内存泄漏并实施对象池管理优化内存使用
【7月更文第10天】在Unity游戏开发中,内存管理是至关重要的一个环节。内存泄漏不仅会导致游戏运行缓慢、卡顿,严重时甚至会引发崩溃。Unity Profiler作为一个强大的性能分析工具,能够帮助开发者深入理解应用程序的内存使用情况,从而定位并解决内存泄漏问题。同时,通过实施对象池管理策略,可以显著优化内存使用,提高游戏性能。本文将结合代码示例,详细介绍如何利用Unity Profiler定位内存泄漏,并实施对象池来优化内存使用。
1335 0
|
11月前
|
Prometheus 监控 前端开发
Grafana 安装配置教程,让你的 Prometheus 监控数据变得更美观
《Grafana安装配置教程,让你的Prometheus监控数据变得更美观》简介: Grafana是一个开源的度量分析与可视化工具,支持多种数据源(如Prometheus),提供丰富的可视化功能和警报机制。本文详细介绍了Grafana的安装、汉化方法及模板使用,帮助用户轻松创建美观、灵活的数据面板,并实现数据的协作与共享。通过Docker镜像、配置文件修改或替换前端页面等方式实现汉化,让用户更便捷地使用中文界面。此外,还提供了导入JSON格式模板的具体步骤,方便快速搭建仪表盘。
1148 2
|
SQL 存储 自然语言处理
检索服务elasticsearch全文搜索
【8月更文挑战第22天】
224 3
|
存储 Kubernetes 负载均衡
在K8S中,Kube-Proxy为什么使用ipvs,而不使用iptables?
在K8S中,Kube-Proxy为什么使用ipvs,而不使用iptables?
|
人工智能 数据可视化 Windows
【AI Agent系列】【LangGraph】3. 一行代码让你的 LangGraph 结构可视化!
【AI Agent系列】【LangGraph】3. 一行代码让你的 LangGraph 结构可视化!
1867 0
|
机器学习/深度学习 数据采集 弹性计算
Elastic Security调研
Elastic Stack 是由 Elastic公司开发的一系列产品,核心产品包括Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。
1632 0
【数据结构】链表OJ第二篇 —— 链表的中间节点 && 链表中倒数第k个节点 && 链表分割 && 链表的回文结构 && 相交链表
【数据结构】链表OJ第二篇 —— 链表的中间节点 && 链表中倒数第k个节点 && 链表分割 && 链表的回文结构 && 相交链表
195 0
【数据结构】链表OJ第二篇 —— 链表的中间节点 && 链表中倒数第k个节点 && 链表分割 && 链表的回文结构 && 相交链表
|
SQL 关系型数据库 MySQL
mysql批量插入性能优化:executeBatch如何通过rewriteBatchedStatements参数逆袭
mysql批量插入性能优化:executeBatch如何通过rewriteBatchedStatements参数逆袭
3200 0
mysql批量插入性能优化:executeBatch如何通过rewriteBatchedStatements参数逆袭