acm-header
登录

ACM通信

实践

网络应用程序是交互式的


网络应用程序是交互式的,插图

图片来源:Andrij Borys Associates / Shutterstock

回到顶部

移动设备的普及和它们之间的互联互通创造了新的应用机会。这些新的应用程序不再局限于单个系统空间,而是分布在多个系统空间中。应用程序从单系统间隔、基于主机的系统向多系统间隔解决方案的转变,正受到囿于旧的顺序计算模型中的软件工具集的阻碍。

本文将此新需求定义为网络应用程序。它讨论了当前基于计算的编程如何不是正确的模型,并建议应用程序开发必须从基于计算前提的软件转移到通信或交互前提。本文以一个简单的基于CRUD(创建、读取、更新、删除)的应用程序作为结尾,该应用程序通过交互开发来阐明这一点,列出了其中的挑战,并解释了这样一个系统如何不以算法为中心,而是通过交互来工作。

想象一下未来的医患相遇,病人拥有个人电子医疗记录(EMR)设备,通过近场通信(NFC)波或将EMR设备扫描到容器中的物理扫描,将其识别到医生的办公室。EMR设备与医生的办公室系统对话,提供所有必要的信息。处方可以直接送到药房,同时给EMR一个同步点。因此,当病人去药房时,药物会及时送到。

这是一个网络时代,需要新的软件开发方法。局限于单一系统空间的以主机为中心的编程将不足以满足这个新数字时代的多系统空间需求。

回到顶部

什么是基于网络的应用?

应用程序有两种类型:独立的和联网的。29诸如pc上的字处理、大型机上的多用户编程或使用简单对象访问协议(SOAP)或对象请求代理(ORB)的分布式计算等应用程序都是独立的。独立应用程序提供单一的机器视图9通过拥有单一入口点(也就是说,调用程序将控制权移交给应用程序,并在应用程序完成后收回控制权)。应用程序通过执行与主例程并行运行的I/O例程从环境中访问数据。机器里的程序计数器控制程序。独立应用程序运行在计算机(虚拟或真实)之上。

在示例EMR应用程序中,注意程序员没有将应用程序视为一个分层程序,而是将其视为跨设备网络的不同人员之间的交互。与独立的应用程序不同,当不同的代理通过它们的操作彼此交互时,网络应用程序就会前进。这些操作接受来自网络上代理的应用程序状态更改,并影响网络上其他代理上的应用程序状态更改。基于网络的应用程序运行在网络基础设施之上。

回到顶部

网络应用不是计算

现代数字时代要求人和设备协同行动,以创造整体的商业体验。所有这些位于不同系统空间上的不同计算代理应该相互通信。简单地说,他们应该相互询问和告知以创建整个解决方案。这种数字时代的事件编排是同时发生的,因此是一个并行的问题。

编程由顺序操作符(如Java)或赋值操作符分隔的语句组成。这些操作符将表达式的值分配到内存位置,并指示编译器移动到下一条指令。该语言的这两个基本结构使得编程非常有序。在具有顺序约束的并发世界中编程对程序员来说是一个巨大的挑战。

通常,有两个主要部分使程序工作。一个是对程序的控制,另一个是当控制向前移动时传输的数据。控件是程序运行的光标。在顺序编程中,控件从上到下移动。改变程序控制的唯一方法是使用go-to语句;例外报表;和迭代/循环语句。编程包括准备数据,以便处理器处理信息。软件的创造性部分是通过操纵程序控制来建立的。操纵层次程序来表示所有类型的模型是很难实现的,因此会导致错误。

在顺序程序中,程序控制假定向前移动。该语言本身没有任何工具来处理跨系统空间的处理。如果部分执行位于另一个系统空间中,那么如何处理控制问题?该语言如何有足够的概念来处理多系统空间计算的不同问题,例如(a)转移控制;(b)处理延迟;(c)处理异常?一段代码如何告诉位于不同系统空间的另一段代码它已成功地继续执行或已抛出异常?这些语言都不支持这些问题。它们假设存在一个系统空间,并且处理器中的控制将向前移动到下一个步骤。

数字时代的解决方案必须协调人和设备作为点对点的协作系统。从顺序程序创建这样的协作系统是一个巨大的挑战。是否有更好的方法可以更直接地表达这些并发系统,从而使数字解决方案更容易?为此,需要取消程序的基本默认顺序控制。默认的顺序控件使得表达并发问题更加困难,因为程序员必须操作顺序控件来创建并发性。

最大的问题之一是跨系统空间共享状态。在当前的编程范式中,使用函数和变量检查状态。这些仅在语言的约束范围内可用,不会在操作语言之外公开。为了克服这个问题,语言本身应该具有共享状态(包括程序控制和数据)的功能,以便客户机可以检查它。

在某些情况下,应用程序知道数据的位置,但不确定所有数据何时到达。这使得当前程序的确定性性质不适合。数字时代数据的这种不确定性导致当前编程无法解决数字时代的问题。虽然基本编程没有处理非确定性系统的方法,但现在可以通过遵循一种称为反应式编程的新编程范式来实现。3.8

一旦程序的状态和控制被共享,是否有可能确保只有授权的人才能访问这两个关键元素?目前的编程语言没有隐藏信息的概念。理想情况下,编程语言应该具有共享状态的功能,并有选择地提供对状态的受控访问。

能够跨系统空间工作的网络应用程序需要一种新的方法来看待计算问题。而不是让计算思想(程序、功能等)作为基础,它应该是沟通对于一个好的网络应用程序编程范型来说是基本的思想。

回到顶部

计算是交流

考虑两个算术表达式:Y=X+A和A=B+C。随着现在使用的顺序程序,它们被按顺序写成{A=B+C;Y = X +}。程序按顺序操作以得到答案。如果它们被写成{Y=X+A;A=B+C},程序将继续运行,但答案将是错误的(即,一个错误)。有办法消除这种异常吗?

想象一下有点不同的情况。在相同的计算中,表达式同时运行,并在共享A时合并。也就是说,组合由两个代理组成,A=B+C和Y=X+A,它们同时操作(图1).算术表达式的右边是a水槽的值和表达式的左边是一个信息源。在A=B+C的情况下,B和C是汇,A是源。当B和C到达并引发A时,A=B+C被解析。与此同时,Y=X+A正在等待X和A。假设X已经到达,当第一次计算引发A时,第二次计算会自动消耗它来引发答案Y。

f1.jpg
图1。计算是沟通。

注意,在本例中,代理是并发运行的,但是因为第二个代理正在等待A,所以A是由第一个代理引发的。这两个计算是并行的。这两个代理是组合的,但是它们暴露了组合操作(即,它们接受C、B和X并产生Y)。这消除了顺序语言中无序编码引起的错误倾向。

整个计算是并行运行的,并根据值的到达来驱动自己。计算不再是关于算法,而是关于两个活动计算代理之间的值通信。数据流通过命名这两个变量来完成。


数字时代的解决方案必须协调人和设备作为点对点的协作系统。从顺序程序创建这样的协作系统是一个巨大的挑战。


因此,要将Y流到另一个代理,所要做的就是将AgentCombinator与将要消耗Y的算术代理结合起来的信息,另一个代表接收的信息。

使计算并行解决了计算的速度,消除了当计算编码顺序混乱时的错误问题,并使计算网络化和不确定性。显然,计算更好地表达为通信。

回到顶部

网络应用就是通信

与独立的应用程序不同,网络应用程序没有单一的机器视图。网络应用程序是一群同时运行的机器,也称为代理。这些代理驻留在单个或多个系统空间中,协调他们的工作以创建体验。每个代理可以在一个实例中充当客户机,在另一个实例中充当服务器。

无论是独立的还是联网的,一致的应用程序都具有某些显著的特性。

应用程序控制。它是设置程序节奏的应用程序控件。一旦从操作系统(通过main ()如果是服务,程序员可以通过应用所使用的语言提供的不同控制语句来管理程序控制。程序完成后,控制权被移交给操作系统或服务启动程序。

软件的魔力是通过控制这些指令如何根据语言规则组织来实现的。为了说明问题,考虑一下C语言。4给程序员的唯一控制元素是函数语句、赋值语句和循环语句。程序员使用这些构造来构建应用程序流(图2).

f2.jpg
图2。“你好,世界”应用程序。

C语言中的独立应用程序一旦接收到控制,该程序就会通过运行函数来进行输入/输出(图3).在执行I/O语句时,程序被阻塞。这正在变成一个多系统间隔的世界,期望状态可以被另一个程序观察到。程序及其语言应该具有在运行时动态共享数据的符号和概念,而不需要额外的工程。

f3.jpg
图3。"Hello, World"应用程序作为函数。

独立的应用程序控件有两个元素:控件的向前和返回移动,以及在这些移动期间的数据传输。在当前的编程模型中,由于处理器的状态机(及其当前的程序计数器)的限制,控制和数据的向前和返回移动是同步的(也就是说,调用者停止,直到调用控制被交还给调用者)。

现在快进到本文开头提到的未来的医患相遇。在这种情况下,不同的设备(也称为代理)相互通信以推动进程前进。它不是一个单主机系统,而是一组相互通信的分布式设备的集合,形成一个完整的自我。在这个新世界里,没有陈述或任务,只有一系列的互动或同步点。你如何表达这个没有单一控制点的新世界?在这个没有传统意义上明显的程序控制的新世界中,你如何表现?

为了使这成为可能,让我们研究相同的独立应用程序,并尝试通过将其作为网络应用程序交付来实现相同的控制流。要使示例应用程序联网,需要以下三个组件调用者,主要,打印作为三家独立代理商(图4).连接这些代理允许它们在网络设置中提供相同的打印功能。调用代理通过发送关于主操作的数据并等待启动计算rtnMain行动。的主要代理由两个独立的代理组成,其中一个监听主要动作,另一个在听rtnPrint.对象的第一个组件代理主要行动把打印.与此同时,一个打印代理监听打印在屏幕上打印后,打开rtnPrint.另一个主代理响应rtnPrint并将在rtnMain.请注意,每个代理都独立运行,但由不同的操作或同步点进行协调。作为rtnMain在打印完成后才触发,其功能与第一个C程序相同。不同之处在于如何通过自主代理的协调来实现功能:CallerAgent, MainAgent,PrintAgent.这些代理还可以跨多个系统空间工作。

f4.jpg
图4。“Hello, World”应用程序作为通信。

将应用程序控制从计算转移到通信,可以使应用程序跨多个系统空间一致地工作。

延迟。如前所述,以前是独立应用程序的简单C程序现在被表示为网络应用程序,方法是将其从计算前提转移到通信前提。同步点如主要,rtnMain、打印,rtnPrint把这些代理人协调起来,形成一个连贯的整体。这些协调元素可以位于单个系统空间中,也可以跨多个系统空间。如果这些同步点位于地址空间之间,那么这就引入了一个新的约束:网络延迟。

这就确定了整个应用程序的速度。在典型的网络应用程序中,当应用程序不使用网络时,延迟会减少。通过引入缓存,减少了网络使用量,从而提高了整个应用程序的速度。

范围。信息隐藏是计算机系统的一个重要特性。编程语言应该很好地支持这一点。为了说明这一点,面向对象编程允许程序员将信息的可见性定义为私有或公共的。当为私有时,信息仅对对象可见。如果变量声明为public,则该信息对整个程序都是可见的。这些声明是用于编译器控制信息可见性的指令。运行时信息可见性必须由程序员在设计和构造期间完成。将这类信息隐藏在内存中对于独立的应用程序是可以的,但是对于网络应用程序,该语言还应该支持跨网络的作用域。这是如何实现的?

在网络应用程序中,状态转换被公开为同步点。此外,信息通过同步点传输。客户端可以通过与这些同步点交互来影响应用程序。在图5,服务器有两个同步点:pa1,这是隐藏的,所以它不能被客户端观察到,和,它是开放的,可以被所有客户端观察。在此配置中,仅client1是意识到pa1因此,服务器只能受client1.在面向对象的原则方面,pa1是私人的,是公共的。该原则用于控制跨网络的信息可见性。通过对公众隐藏操作,然后有选择地将同步名称提供给不同的代理来控制作用域。每个客户端和服务器都可以跨多个地址空间存在,从而在网络上创建受控制的信息安全。

f5.jpg
图5。作为通信范围。

网络应用程序带来了新的挑战,如多系统空间、延迟、间歇性网络可用性和安全性。将应用程序视为通信而不是功能可以克服这些挑战。

回到顶部

通信系统数学

网络应用程序应该使用以通信为基础的工具集和语言进行开发。基于计算的软件有很好的理论基础,例如-微积分,整个编程的概念都建立在它的基础上。基于-演算的应用程序在执行时关闭了整个世界,而网络应用程序,根据其本质,在网络上有许多相互交互的代理。应用程序本质上的这种差异要求为构建网络应用程序的工具集和语言建立新的基础。

微积分,67通信和移动系统的理论,是一个Petri网的代数表示。微积分的重点是定义在网络上操作的两个代理之间的通信。它还可以定义网络上代理的配置在交互时如何变化。-calculus的这一特性——为独立操作的多个代理之间的交互建模的能力——使其成为为网络应用程序构建工具集和语言的理想数学基础。

微积分通过以下方法实现:(a)将代理行为表示为动作;(b)配置不同的代理作为初始启动配置;(c)表示这些代理人之间的共享过渡;以及(d)在状态转换发生时改变代理网络的配置。可以观察到-calculus代理的动作。用x表示的动作是接收信息的可能性。由x是潜在的信息来源。这些补充操作的反应将流程和数据从源移动到目的地。

图6这摘自米尔纳的88页通信和移动系统:pi -微积分。6这些术语是同时适用的。并行操作由运算符“|”识别。序列操作用“。”表示。不同的作用是x和u,作用x通过u,作用u通过v。

f6.jpg
图6。初始处理配置。

微积分引擎进行交互(也就是说,它查看具有相同名称的动作并执行反应)。当反应发生时,值从一项传递到另一项。在x和x之间发生反应的情况下,它将通过x传递z。随着反应的进行,第二项变为惰性,由一个没有作用的项表示。则,如图所示图7,将u替换为z,得到最终的构型过程状态P1。注意不同的术语节点是如何折叠以创建最终状态的。

f7.jpg
图7。最后的过程配置。

通过设计一种基于-微积分(例如交互)的语言,并在反应引擎上运行它,可以将编程从计算转移到以通信网络为中心的编程。

回到顶部

你好,世界应用程序作为交互

网络应用程序的最佳处理方式是基于通信。与网络应用程序中计算的函数模型(具有将数据从一个变量移动到另一个变量的函数)不同,数据的移动是通过通信完成的。如同在物理学中一样,电流的流动是由电势来定义的。类似地,网络应用程序是通过设置通信电位来定义的,然后连接在一起创建火花,以确保信息流从源到汇。

构建网络应用程序的第一步是定义火花发生时的流。要定义此操作,然后定义哪些元素流经该操作。一旦动作被定义,那么这个动作的两个电位就通过创建+ ve而且.的+ ve信息的来源(比如?x,在微积分中),和(就像微积分中的x)是信息的接收器。告诉设置+ ve信息来源,和设置水槽的信息。

Hello, World网络应用程序有两个代理,它们同时操作以交付功能。MainAgent由两个动作的两个序列组成。当这个代理被激活时,它就激活了主要而且rtnPrint同时:

MainAgent组成(
序列(问(主要);
告诉(打印);序列(
问(rtnPrint);
告诉(rtnMain)]

第二个代理是PrintAgent

PrintAgent序列(
问(打印);告诉(rtnPrint)]

Hello, World应用程序由这两个同时操作的代理组成。它被定义为

HelloWorldApplication
组成[MainAgent;
PrintAgent]

图8显示与每个操作交互时打开的不同操作。首先,所有的代理都变得活跃起来rtnPrint,主要而且打印都暴露在端().的主要动作将被公开,因此可以从用户界面与之交互。当主要它被激活了吗打印告诉端(+ ve).相同的名称,打印,现在在两个+ ve而且双方,为火花制造了条件。接下来,相互作用继续发生打印开放rtnPrint告诉端(+ ve).这导致了与rtnPrint,导致下一组交互。相互作用的轨迹见图8

f8.jpg
图8。交互跟踪。

这些操作表示为REST uri(统一资源标识符),因此可以通过网络与它们进行交互。网络编程非常简单,只需将代理引入配置中,以促进这些交互。

回到顶部

一个简单的CRUD应用程序作为交互

MasterKube软件技术5在构建时考虑到了这个网络应用程序。MasterKube软件范式用于构建一个简单的CRUD应用程序。

定义的行动。第一步是定义将向外部系统公开的所有操作。任何理解MasterKube XML响应的客户端UI都可以观察到这些信息。在这种情况下,有行动添加、编辑视图,删除,如图9

f9.jpg
图9。行动的定义。

定义的行为。代理提供应用程序的动态部分。代理AddContactAgent下面的代码中显示了Add操作,当与该操作交互时,将创建一个新的代理。的AddContactAgent显示了添加UI。在与添加行动,它创造了联系,AddContactAgent重复显示相同的动作(参见图10).

f10.jpg
图10。代理的定义。

当有互动的时候编辑,它显示了所有的元素编辑行动。这些都是需要输入的。当系统接受这些值时,EditContactAgent是重复的。重复相同的代理可以选择编辑,删除,视图再次操作,从而显示出持久的行为。

删除行动的选择行动是空的。由于没有观察,没有互动删除没有留下进一步的观察,因此,该联系被认为已删除。

所有这些操作都公开为REST url,可以被任何设备解释。

回到顶部

结论

设备的小型化和这些设备在高速无线网络上的大量互联正在完全改变商业运作的方式。这些变化(又称数字化)将深刻改变企业的运营方式。软件是这个数字世界的核心,但软件工具集和语言是为基于主机的时代构思的。已经困扰软件实践的问题(例如高缺陷、较差的软件生产力、信息脆弱性和较差的软件项目成功率)将在这样的方法中变得更加深刻。是时候让软件变得更简单、更安全、更可靠了。

将软件从计算基础转移到通信基础,将确保数字化的承诺和好处得到更广泛的分享。

ACM队列的q戳相关文章
queue.acm.org

数据中心组网导览
丹尼斯·阿布斯和鲍勃·费尔德曼
http://queue.acm.org/detail.cfm?id=2208919

你对网络性能一无所知
凯文·福尔和史蒂夫·麦卡恩
http://queue.acm.org/detail.cfm?id=1066069

电视台的新角色
Taf Anthias和Krishna Sankar
http://queue.acm.org/detail.cfm?id=1142069

回到顶部

参考文献

1.编程能从冯·诺依曼风格中解放出来吗?函数式程序及其代数。Commun。ACM 21, 8(1978年8月),613641;http://dl.acm.org/citation.cfm?doid=359576.359579

2.架构风格和基于网络的软件架构设计。2000年,加州大学欧文分校博士学位论文;https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

3.期货和承诺。Boost c++库;http://theboostcpplibraries.com/boost.thread-futures-and-promises

4.克尼根,B,里奇,D.M.C编程语言。普伦蒂斯霍尔,1978年。

5.MasterKube软件开发手册。2014

6.米尔纳,R。通信和移动系统:pi -微积分。剑桥大学出版社,1999。

7.《互动元素》。Commun。ACM 361(1993年1月),7889;http://dl.acm.org/citation.cfm?id=1283948

8.ReactiveX;http://reactivex.io/intro.html

9.Tanenbaum, a.s., van Renesse, R.分布式操作系统。ACM计算调查17, 4(1985), 419470。

回到顶部

作者

安东尼Alappattantony.alappatt@masterkube.com)是MasterKube的创始人,其目标是提供开创性的软件技术和服务,服务于新的数字时代。


版权归作者所有。授权ACM出版权利。
请求发布的权限permissions@acm.org

数字图书馆是由计算机协会出版的。版权所有©2018 ACM, Inc.


没有发现记录

Baidu
map