天天看点

Reactive Programming 响应式编程

Scala Reactive Programming 响应式编程

Functional Reactive Programming (FRP), we will first understand the meaning of Reactive and Reactive programming

in this section.

什么是响应?

反应意味着及时对变化作出反应或及时响应变化。

在这里,在Reactive World中,我们可以将变化表示为事件。因此,我们还可以将Reactive定义为及时响应事件。此更改可能发生在数据或数据元素上。

每当我们的系统发生变化时,系统应立即对这些变化做出及时的反应。在当前世界中,用户期望快速且及时地响应来自应用程序(网站,Web应用程序,移动应用程序等)的响应。如果系统或应用程序没有及时响应用户(或客户),用户将寻找其他选项,我们的应用程序将失去其用户。

什么是反应式编程?

与命令式编程(IP)或(面向对象编程)OOP不同,我们根据行或语句的顺序编写代码,在反应式编程(RP)中,我们根据事件编写代码或程序。

简单来说,RP意味着使用事件编写程序,或RP意味着编写定义如何对事件做出反应的程序。 正如我们所讨论的,事件是程序或应用程序状态的变化。 因此我们也可以如下定义RP:反应式编程是一种传播变化的编程范式。

让我们讨论一个重要且经常使用的RP示例(几乎所有书籍或教程都使用相同的场景)。 考虑以下电子表格应用程序的示例:观察A3单元格具有公式= A1 A2,即A3是单元格A1和A2的值的总和。最初,A3的值为0.当我们更改单元格A1或A2或两者的值时,电子表格会更新A3的值:

什么是数据流或流?

在反应式编程中,我们编写程序来处理一系列事件。例如,在电子表格中,我们可以按顺序观察以下事件:

Reactive Programming 响应式编程

1。用户在单元格A1中输入值1。当用户将数据输入到单元格A1中时,单元格A3中的值更新为1。

2. 用户在单元格A2中输入值2。当用户将数据输入到单元格A2时,A3被更新为3。

在Reactive World中,随时间发生的这一系列事件称为流,事件流或数据流。下图显示了事件序列如何形成事件流。它还显示了发布服务器如何将事件发送到事件流以及订阅服务器如何从该事件流接收事件:流或数据流是按时排序的一系列正在进行的事件。

在RP中,发布者将事件发送到Stream,订阅者从Stream中使用这些事件。

为了对事件做出反应,我们应该监控它们。在RP中,监视事件的过程称为侦听事件或订阅事件。

我们还可以使用此数据流定义RP:RP是使用异步数据流进行编程的编程范例。

事件流=一系列事件

RP与Reactive系统与Reactive架构的对比

反应系统是一组反应性相互通信的组件。通过将这些单独的组件合二为一,我们可以形成一个现代的分布式系统。我们可以通过遵循一系列架构设计原则来开发Reactive系统。

反应系统组件作为单个系统工作,它们及时对变化做出反应。

反应系统或反应应用程序具有以下功能:

响应能力:他们及时对用户做出反应

弹性:它们对负载做出反应 Elasticity: They react to load

恢复性:他们对失败做出反应Resilience: They react to failures

消息驱动:它们对事件或消息做出反应

反应式架构是一种设计反应式系统的技术或过程。

我们可以使用许多技术开发反应系统。但是,RP或FRP是构建Reactive系统的最佳工具。

Reactive系统的核心原则是使用消息驱动方法开发其组件,而RP则是使用事件编写程序,这意味着它遵循事件驱动方法。

正如我们所说,反应系统是一组组件。我们在组件级别使用RP,这意味着我们使用RP开发每个组件。

我们在系统级使用Reactive系统。

事件驱动与MessageDriven。

RP的核心原则是事件驱动方法,而Reactive系统的核心原则是消息驱动方法。

RP仅在组件级别提供优势,因为事件是在本地发出和处理的。 它们无法在分布式系统中跨网络工作。

反应系统为我们提供了系统级的好处,因为消息在分布式系统中通过网络进行处理和通信。

我们无法通过RP获得全部好处; 我们应该使用RP和Reactive系统的组合。

在具有RP的反应系统中,生成的事件在引擎盖下表示为消息,并将它们作为消息处理。

RP反应系统的优点

当我们使用RP作为编程范例来开发Reactive系统的组件时,我们将获得更多的好处。 RP和Reactive系统的组合为我们带来以下好处:

自我修复:根据Reactive Streams规范,RP应该

支持弹性。这意味着我们可以在一个中编写Reactive系统

他们有一些技术可以从失败中恢复的方式

继续努力回应客户。这被称为

自愈。客户不会知道这一点,他们永远不会看到

那些失败。

高度可用的系统:根据Reactive Streams规范,

RP应支持弹性(向上/向下扩展和向外扩展/向内扩展)。这个

意味着我们可以以始终可用的方式编写反应系统。他们支持100%的正常运行时间。

高度可扩展,可支持重载。

松耦合。

有效利用系统资源(包括硬件和软件)。

提供更好的响应能力。

提供实时行为或数据流。

易于执行分布式数据处理。

支持位置透明度。

低延迟。

更好的性能。

易于维护。

不需要使用匿名回调(所以没有更多的回调地狱)。

易于解决和处理故障。

容易理由失败。

我们还应该了解迫使我们开发和使用Reactive系统的事情:

物联网(物联网)

云环境或服务

大数据系统

实时快速数据流

移动架构

异构系统之间的通信

多核硬件架构

在这里,Reactive系统意味着Reactive Web Applications,

反应性应用程序和反应式微服务。在我看来,所有人都有相同的含义。