响应式(Reactive)介绍

2022-12-07 0 552

Reactive是两个空载的词。 您可能早已采用浏览器搜寻过积极响应式以了解它的文章内容。 假如你没有,不必害怕——你早已为自己省却了许多疑惑。 有许多积极响应式的东西:积极响应式掌控系统、积极响应式程式设计、积极响应式扩充、积极响应式输入输出。 每晚都有捷伊出现。 大部份那些 “reactives” 是否都具有完全相同的积极响应性? 它不同吗?

那些是他们将在责任编辑中回答的问题。 他们将看一下积极响应式环境,以辨识并协助您认知 reactive 的各种并不完全相同、它的涵义、与之有关的基本概念以及它之间的关系。 不必过多揣测,大部份那些 “reactives” 都是有关的。

他们所言的积极响应式是甚么原意?

让他们Cubzac。 暂忘记应用软件和 IT,采用老式的方式。 假如他们在剑桥字典中找寻 reactive,他们会发现以下表述:

reactive (属格)

表现出与抑制的化学变化。 1.1 对情形作出化学变化,而不是缔造或掌控它。 1.2 有化学化学变化的偏激。 1.3(生物学)表明对某一抗体的免疫化学变化。 1.4 (病症或病症)由对某人的化学变化引起的。 1.5(力学)与加性有关。

在那些表述中,有两个在他们的语句中是有关的。 第二个表述,表明对抑制的化学变化,是指这种化学变化。 积极响应式意味著对抑制作出化学变化,不论它是甚么。 子表述 1.1 说,消极化学变化也是直面不幸和倍受掌控的情形。 您将在系列产品的该文中看见云原生植物插件和一般的网络通讯面临大量间地。 虽然这些表述很有原意,但它并不适用于于应用软件。 但是他们可以将那些表述考虑其中,为应用软件建立两个捷伊表述:

1.6(应用软件)对抑制作出化学变化的插件,例如使用者该事件、允诺和机械故障。

然而,正像您将在本系列产品该文中看见的那样,今天的积极响应式胜过了这一点。 积极响应式是一种根据该事件和南支设计、实现和逻辑推理掌控系统的方式。 Reactive 是关于构筑积极响应式可扩充性弹性的插件。 积极响应式还涉及通过有效管理资源和通信来利用资源。 换句话说:积极响应式是关于设计和构筑更好的网络通讯——更健壮、更高效。 他们称它为积极响应式掌控系统

积极响应式应用软件并不新鲜

他们刚刚给出的表述(1.6)并不是开创性的。 相反,你可能会觉得有些似曾相识,不是吗? 应用软件的本质不是对使用者输入和操作掌控系统信号作出化学变化吗? 当您敲击键盘时,应用软件的行为如何? 它会作出化学变化。 那么,假如 Reactive 只是普通应用软件,为甚么会有这么多关于 Reactive 的书籍、演讲和辩论呢?

积极响应式并不新鲜。 它实际上早已挺老了。 他们可以追溯到 50 年代计算机出现之后的化学变化式应用软件背后的想法的基础。 DYSEAC 是第一代计算机(1954 年投入采用),早已采用硬件中断作为优化,消除了轮询循环中的等待时间。 这台计算机是最早采用积极响应式和该事件驱动架构的掌控系统之一!

对该事件作出化学变化意味著是该事件驱动的。 该事件驱动应用软件接收和产生该事件。 接收到的该事件决定了程序的流程。 该事件驱动的两个基本方面是异步性:您不知道何时将接收该事件。 这正是上一节的表述 1.1。 您无法计划何时接收该事件,无法掌控您将获得哪些该事件,并且您需要准备好处理它。 这就是积极响应式的本质:异步

积极响应式景观

从这种异步和该事件驱动的思想出发,出现了许多形式的Reactive。 积极响应式景观广阔而拥挤。 图 1 描述了这种情形的汇总以及主要积极响应事物之间的关系。

响应式(Reactive)介绍

图 1

但不要忘记他们的目标:构筑更好的网络通讯——积极响应式掌控系统。 其他 “reactives” 在这里协助他们实现那些掌控系统。

积极响应式的原因,特别是积极响应式掌控系统,来自网络通讯。 2013 年,网络通讯专家编写了《The Reactive Manifesto》的第一版,并介绍了积极响应式掌控系统的基本概念。

您可以在不应用积极响应式原则的情形下构筑网络通讯。 Reactive 提供了两个蓝图,以确保在构筑和开发掌控系统时不会忽略任何重大的已知问题。 另一方面,您可以将那些原则应用于非网络通讯。

响应式掌控系统首先是积极响应式的。 即使在负载下或面临机械故障时,它也必须及时处理允诺。 为了实现这种积极响应,宣言建议采用异步输入输出作为在构成掌控系统的组件之间进行通信的主要方式。 您将在后续该文看见这种通信方式如何实现可扩充性和弹性,这是可靠网络通讯的两个基本属性。 本书的目的是向您展示如何采用 Quarkus 构筑这样的积极响应式掌控系统。 因此,构筑积极响应式掌控系统是他们的主要目标。

将异步输入输出注入网络通讯的核心并非没有后果。 您的插件需要采用异步代码和非阻塞 I/O,这是操作掌控系统提供的将 I/O 交互排入队列而无需主动等待完成的能力。 (后面将在介绍非阻塞 I/O)。 后者对于提高资源利用率至关重要,例如 CPU 和内存,这是 Reactive 的另两个重要方面。 今天,许多工具包和框架,例如 Quarkus、Eclipse Vert.x、Micronaut、Helidon 和 Netty,都出于这个原因采用非阻塞 I/O:用有限的资源做更多的事情。

然而,拥有两个利用非阻塞 I/O 的运行时还不足以成为积极响应式。 您还需要编写包含非阻塞 I/O 机制的异步代码。 否则,资源利用的好处就会消失。 编写异步代码是一种范式转变。 来自传统的(命令式),do x; do y;,你现在将把你的代码改造成 on event(e) do x; on event(f) do y;。 换句话说,要具有积极响应式,您的掌控系统不仅是该事件驱动的架构,而且您的代码也将成为该事件驱动的。 实现此类代码的最直接的方式之一是回调:您注册在收到该事件时调用的函数。 与 futures、promise 和 coroutines 一样,其他大部份方式都基于回调并提供更高级别的 API。

注意

您可能想知道为甚么电子表格会出现。 电子表格是积极响应式的。 当您在单元格中编写公式并更改公式读取的值(在另两个单元格中)时,此公式的结果将更新。 单元格对值(该事件)的更新作出化学变化,结果(积极响应)是捷伊结果。 是的,您的经理可能是比您更好的积极响应式开发人员! 但别害怕,这本书会改变这一点。

系列产品该文中提到的积极响应式程式设计也是一种编写异步代码的方式。 它采用数据南支构筑您的代码。 您观察那些流中传输的数据并对其作出化学变化。 积极响应式程式设计提供了强大的抽象和 API 来塑造该事件驱动的代码。

但是采用数据流会带来两个问题。 假如你有两个快速的生产者直接连接到两个慢的消费者,你可能会淹没消费者。 正像您将看见的,他们可以在两者之间缓冲或采用消息代理,但想象一下在没有它的情形下淹没消费者。 这与 Reactive 所提倡的积极响应能力和反脆弱性理念背道而驰。 为了协助他们解决这个某一问题,Reactive Streams 提出了一种异步且非阻塞的背压协议,其中消费者向生产者发出其可用性信号。 可以想象,这可能并不适用于于大部份地方,因为某些数据源不能放慢速度。

在过去的几年里,Reactive Streams 的受欢迎程度有所增加。 例如,RSocket 是一种基于 Reactive Streams 的网络协议。 R2DBC 建议采用 Reactive Streams 进行异步数据库访问。 此外,RxJava、Project Reactor 和 SmallRye Mutiny 采用化学变化式南支处理背压。 最后,Vert.x 允许将 Vert.x 背压模型映射到 Reactive Streams。

他们对积极响应式环境的快速浏览到此结束。 正像他们所言,它挤满了许多术语和许多工具。 但永远不要忽视 Reactive 的总体目标:构筑更好的网络通讯。

为甚么积极响应式架构如此适合云原生植物插件?

云——公共的、私有的或混合的——早已把 Reactive 放在了聚光灯下。 云是两个网络通讯。 当您在云上运行插件时,该插件面临着高度的不确定性。 插件的配置可能很慢,也可能很快,甚至失败。 由于网络机械故障或分区,通信中断很常见。 您可能会遇到配额限制、资源短缺和硬件机械故障。 您正在采用的某些服务有时可能不可用或移至其他位置。

虽然云为基础设施层提供了出色的设施,但它只覆盖了一半。 后半部分是你的申请。 它需要被设计成网络通讯的一部分。 它需要了解成为这样两个掌控系统的一部分所面临的挑战。

他们在本系列产品该文中介绍的积极响应式原则有助于接受网络通讯和云插件固有的不确定性和挑战。 它不会隐藏它——相反,它会拥抱它。

随着微服务和 serverless 计算成为突出的架构风格,积极响应式原则变得更加重要。 它可以协助确保您在坚实的基础上设计掌控系统。

积极响应式不是灵丹妙药

与大部份事物一样,Reactive 有利有弊。 它不是魔法武器。 没有解决方案适用于于任何地方。

还记得 2010 年代后期的微服务吗? 它很快变得非常流行,许多组织在它可能不适合的领域实现了它。 这通常以一组问题换另一组问题。 就像微服务架构一样,积极响应式架构也有非常适合的领域。 它适用于于分布式和云插件,但在更单一和以计算为中心的掌控系统上可能是灾难性的。 假如您的掌控系统依赖于远程通信、该事件处理或高效率,那么 Reactive 将会很有原意。 假如你的掌控系统主要采用进程内交互,每晚只处理几个允诺,或者是计算密集型的,那么 Reactive 只会带来复杂性。

采用 Reactive,您将该事件的基本概念置于掌控系统的核心。 如果您习惯于构筑插件的传统同步和命令式方式,那么变得积极响应式的路径可能会很陡峭。 变得异步的需求破坏了大多数传统框架。 他们正在远离众所周知的远程过程调用 (RPC) 和 HTTP 端点。 所以,有了这个免责声明,是时候开始他们的旅程了!

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务