毕业设计外文资料翻译-程序设计语言对开发分布式系统的影响_第1页
毕业设计外文资料翻译-程序设计语言对开发分布式系统的影响_第2页
毕业设计外文资料翻译-程序设计语言对开发分布式系统的影响_第3页
毕业设计外文资料翻译-程序设计语言对开发分布式系统的影响_第4页
毕业设计外文资料翻译-程序设计语言对开发分布式系统的影响_第5页
已阅读5页,还剩22页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计外文资料翻译学院:专业班级:学生姓名:学号:指导教师:外文出处:(外文)DebasishGhosh·JustinSheehy·KrestenKrabThorup·SteveVinoski.Programminglanguageimpactonthedevelopmentofdistributedsystems[J].JInternetServAppl,2012,23-30.附件:1.外文资料翻译译文;2.外文原文指导教师评语:本翻译原文选择适合设计选题需要,翻译语句通顺,格式、字数符合学校规定,翻译结果符合中文阅读习惯,能够反映了该生的专业英语应用水平。签名:2015年10月14日外文资料翻译译文程序设计语言对开发分布式系统的影响摘要:编程语言对分布式系统的发展具有深远的影响。虽然很多中间软件和分布式系统开发代码继续利用当今主流的语言如Java和C++,但是最近一些联合起来的力量带动了人们对其他编程语言的新兴趣。这些力量的结果已经促进了编程语言的使用,例如Erlang,Scala,Haskell,还有Clojure,都允许抽象的编程,得到更高水平、更好的模块,提高开发速度,并增加了且正在开发有关系统的推理能力。这样的语言,也可用于开发嵌入式领域特定语言,在分布式系统中是意味深长而简洁的模型,包括并发固有的问题,平行度,和容错。在本文中,我们首先介绍编程语言的历史和分布式开发系统,然后探讨几种可供选择与现代系统一起使用并内置其中的语言。我们注重语言和应用程序功能、注重如何解决分配问题,并发问题,简洁的代码,可扩展性,和维护的担忧。最后,我们推测目前的替代编程语言可能对中间件和分布式系统未来的发展产生影响。关键词:分布式系统中间件ErlangScalaRPCJavaC++互通性可移植性编程语言函数式编程1.简介分布式系统和编程语言早就相互影响。因为它们与分布式系统的实现和使用特定语言分布式系统的行为都揭示了该语言优势和弱点。同样地,许多分布式系统的功能和特性有,无论是好还是坏,都被不同的编程语言的习惯用法所影响。在本文中,我们研究从过去四十年中各种分布式系统和中间件的发展来考察编程语言如何影响这些系统。然后,我们详细的分析从使用分布式系统项目的效益以及非常有用的非主流编程语言两个方面的特征和能力。最后,我们推测分布式系统和中间件的未来相对于编程语言可能是什么样。2.过程调用的影响早期的文件揭示编程语言的影响已经对分布式系统发表于1975年:RFC707[1]。它解决了分布式应用程序的需要,首先通过调用注意一个事实,即当时支持的命令语言的网络资源用于人类,而不是应用程序的交互。该RFC则提出了关注开发人员是否可以合理地编写网络应用程序,鉴于开发和使用进程间通信(IPC)设施的难度。为了解决这些问题,RFC的作者,詹姆斯E.White,提出了“过程调用模式”(PCM),以帮助开发人员构建网络应用。他的理由是,开发人员已经熟悉调用程序库编写应用程序,因此,PCM将会对网络应用程序的调用看起来就像是正常的过程调用。从怀特的PCM继尼尔森的远程过程调用(RPC)[2]。不幸的是,今天的“RPC”一词已被错误地泛型化指任何远程消息的发送,但是最初它处理的特别是程序在远程系统上的调用。透明度是关键;在调用应用程序实现语言的文本中,远程过程调用是为了看起来就像是一个普通的本地程序的调用。RPC已经对分布式系统的研究和开发显著影响,但在20世纪80年代它不是唯一的影响力。截止到那个时候,交易监控,最初发明并部署在20世纪60年代时,美国航空公司和IBM共同创建的SABRE机票预订系统,建立了中间件的价值,代码具有既不应用也不操作系统(OS),但并不是建立在提供清晰而有用且时而关键的业务之间的计算能力。计算机系统从大型机发展到小型机工作站到个人电脑。这些新系统,尤其是工作站,需要网络连接等网络技术,如令牌环系统和以太网也不断发展。同时,新的编程语言都被发明即使旧的仍然不断成熟和进步。例如,在20世纪80年代的Lisp,Pascal,C++,Smalltalk,Eiffel,Objective-C,Perl和Erlang全都不是发明就是正在接受值得注意的关注。大约在20世纪80年代初,结构化编程方法已经越来越流行,但在面向对象编程(OOP)方面的兴趣已开始上升。随着上世纪80年代的进展,研究人员和开发人员意识到,对象是一个用于跨包输出功能方便的单位分布式应用程序。这些力量一起对20世纪80年代的分布式系统研究有显著的影响,从而导致了操作系统领域,编程语言和分布式应用程序的重要发展。许多在此期间开展的学术体系是完全的顶部至底部系统-OS,编程语言,分布中间件和应用程序编程接口(API),全部概括起来,主要是因为所有这些层次都还是在紧张的研究和正在开发的对象。这里有几个显着的研究系统,包括:Argus[3],分布式编程语言和系统,旨在帮助与可靠性问题,如网络分区和节点崩溃。Eden[4],全面向对象的分布式操作系统,使用RPC。Emerald[5],分布式的基于RPC的对象语言提供本地/远程透明度,并解决诸如对象移动时新的难题。像这些系统倾向于依赖RPC,注重统一性,如在整个系统中的本地/远程透明性和强/静态类型,并使用隐藏在每个系统中自己封闭分发协议作为其基本RPC机制的一部分。随着企业计算网络在20世纪80年代的增长,厂商知道他们需要将分布式系统的研究转化为实际应用。但在那个时期他们的客户希望使用标准的编程语言,如Pascal和C。这种压力导致厂商将分布式系统研究作为自己的筹码,但通过利用标准编程语言分布特征这么做。例如,阿波罗电脑公司的网络计算系统(UCS)[6],一个RPC系统,配备了声明接口定义语言(IDL),和Sun微系统的开放式网络计算系统(VNC)[7],都分别由20世纪80年代的分布式系统研究严重影响商用分布式计算系统,但每个用C语言注重每个系统集中于RPC工作;这时候,怀特的和尼尔森的早期RPC思想和工作已如期实现,成为分布式应用程序调用公认的准则。3.分布式对象一个20世纪80年代与分布式系统的问题是,他们是封闭的孤岛。便携性这些系统之间的应用是不存在的,因为是系统的互操作性。20世纪80年代的客户和用户开始表达兴趣在标准化的API和协议的基础之上,允许应用程序的可移植性和互操作性。当上世纪90年代临近,OOP的日益普及,导致一些人将分布式对象的便携性问题作为一个答案。3.1公共对象请求代理体系结构(CORBA)1991年,OMG发布了公共对象请求代理体系结构(CORBA)规范[8],是有史以来最成功的中间件标准之一。在CORBA的中心是对象请求代理(ORB),用于控制和管理的分布式对象方法的调用的抽象实体的概念。CORBA定义的ORB接口,OMGIDL,一套共同所有CORBA对象的方法,以及一些本地的ORB本身的接口。CORBA的目标包括应用程序的可移植性,系统的互操作性,以及不同系统的集成。CORBA的方法用于可移植性映射OMGIDL的功能和ORB的接口编程语言。最初的CORBA规范包括一个映射到C语言,但很少使用它,因为C不是一个对象的语言。相反,用户希望C++。CORBA和C++共同发展,并且C++对CORBA有至关重要的影响。许多ORB实现是用C++编写,大多数初始CORBA用户在C++中编写他们的应用程序。经过了90年代的前期,一些不同的C++ORB实现者和OMG的内部合作,共同发展CORBA标准。他们用所掌握的C++的知识和经验,帮助指导CORBA度过了成长期。这意味着,虽然,CORBA标准将继续忠实于它的根源RPC,即使在当时RPC方法根本性的缺陷深受理解[9]。3.2面向对象的C语言面向对象的C语言,另一个C的派生的面向对象语言,是在C语言之上的一种动态语言带有Smalltalk的风格特点。它还提供了一个增量的类型系统,类/接口分离,动态代码加载和其他功能,允许应用程序的快速开发。面向对象的C语言发展于80年代初[10],并在操作系统NeXTSTEP[11]中普及。NeXT被苹果公司于1996年收购了;面向对象的C语言和NeXTSTEP,以及现在的iOS,直到今天仍然被广泛使用。面向对象C的动态性质使得它很容易建立在一个简单的分布式对象系统扩展核心框架的代理机制上。C语言进行了修订与注释方法的声明,如一种方法,通过复制,输入,输出等,面向对象C的运行全部采用无障碍的反射访问,因而可作为装置来控制基于对象的RPC的这些方面。鉴于这种方式来执行分布式对象,不必需要一个单独的IDL。4.Java的崛起 在90年代中期到末期,Java[12]变得非常流行。其中Java语言的一个鲜明特点是,Java平台成为了机器之间移动代码的手段,并安全地在执行代码“沙箱”,允许不受信任的代码执行安全的方式。为了允许远程执行代码,许多其他系统都是基于一种“领域特定语言”的具体行动(如SQL),但是Java允许将与编程环境的其余部分混合的容易散发的代码作为一种特有的方法。标准Java库的另一个突出特点是实现了分布式对象和远程方法调用(RMI)。像Objective-C一样,RMI定义了自己的传输层协议远程方法调用,因此没有实现跨语言互操作性的意图。RMI也基于具有代理对象代表远程可用的对象,并类似于CORBA的一种时尚,将通过单独启用RMI编译器(RMIC)来生成这些代理。后来,Java引入动态RMI,其中编译时代码生成不再需要由使用的Java接口描述远程对象和运行时间反射来控制的基本的RPC机制。4.1Java中的CORBA随着Java的增长,Java成为很多企业的首选语言,因此整合技术需要进一步的提高。几个小组制定的COBRA绑定Java作为提供与其他软件系统的互操作性和集成的装置。某些映射甚至反向映射需要Java中的CORBA合作。随着Java2企业版(J2EE)平台的发展,CORBA和因特网Inter-ORB协议(IIOP)的出现成为了要求集的一部分,还有供应商的多种实现CORBA/IIOP,包括一个新的标准,用它作为对Java的RMI的API[13]运输。可悲的是,许多IIOP实现不兼容;结果没有达到质量的总体水平使这种互操作性的需要流行普及。基于自描述数据传输(XML,JSON等)消息以来,越来越受欢迎,部分原因是透明度,可调试的,并与不断发展的API的应对增加的可能性有关。5.当前的系统今天,Java仍旧是中间件和分布式系统开发平台的首选。针对Java虚拟机(JVM),允许开发人员编写可移植的代码,这在异构环境中是非常重要。Java被认可的主要原因是比C++更简单,能够让更多的开发者有效地使用它。Java的影响的一个显着的迹象是,无论是好还是坏,今天的开发人员使用Java工件来定义远程接口和数据交换格式,然后只需在自己的集成开发环境(IDE),自动代码生成中间件基础架构下简单的按一下按钮。与过去的方法相比,例如CORBA,该系统是在IDL定义工具中生成的胶水代码。而不是“只是另一种语言”,今天的Java往往是分布式的系统架构,设计和实施的完整的基础。替代语言许多开发者在工作中将Java和C++用于分布式系统,但是,这并不意味着这种语言是完成任务的理想语言。一个经常被引用的问题是分布式系统和中间件这些语言给表达系统的功能需求定义了极为强大的代码长度。随着系统规模和特色的增长,代码大小变得能够被理解,维护和增强,如果代码长度过大,开发商能力减弱,那么谁也跟不上它的发展。这会导致系统由于延迟和错过的机会而过早的必须进行更换,要耗费巨大的成本。由于通用的语言模型在分布式系统模型中不能很好地工作,一个较好的方法是采用一种语言,其模型用来通知分布的问题,包括并发问题,部分失败,消息,以及有用的容错。因为这样的语言更适合问题域,开发人员可以使用它们来创建实现比常规语言更优雅,简洁,可读性,可维护性和可扩展的解决方案。6.1ErlangErlang是专为软件实时行为的虚拟机动态类型和垃圾收集设计的语言。尽管把它有时归类于新的另一种语言,但是它实际上大约比Java早五年出现。Erlang最初被认为是在Ericsson计算机科学实验室实验的一部分,自从找到了一种更好的方式来快速,轻松地制定明确、易于读取的程序,当然也将是非常可靠。Erlang有时被称为“并行功能语言”。它继承了并发的计算机科学遗产的基本素质,(一种由Modula和Ada通知的过程和通信模型),功能/逻辑编程(如像Haskell,ML,Miranda和Prolog的语言),并融合了高度可用、可靠的系统和快速发展的利益之间的概念。中央将Erlang的并发模型流程的想法作为原始语言。Erlang系统进程在单独的内存里同时运行,通过消息传递彼此通信。进程对应用程序是非常有益的,包括网关数据库,处理程序协议栈,并管理其他进程的跟踪消息的日志记录。一个进程与其他以相同的方式而不管那些其他进程是否在同一VM连通,不管另一个虚拟机在同一主机上,还是虚拟机在网络上的另一台主机上。单个虚拟机可以同时运行以百万计的进程,因此它是很常见的应用程序处理每个细粒度的任务,也可能同时的进行其他工作。这种架构还允许应用程序Erlang轻松地充分利用多核系统。Erlang的变量是单一分配的;一旦结合到值,它们就不能被更新。这种不变性,同时通过功能和逻辑编程模型的启发,通过允许有关分布式行为更容易推理,需要新的价值并发为重点的语言。语言广泛使用其它功能的编程(FP)惯用语法为好。其中一个例子是模式匹配,如以下的例子1:-module(factorial).-export([fac/1]).fac(0)->1;fac(N)whenN>0->Prev=fac(N-1),N*Prev.请注意,调用传真功能与负数将导致运行时错误,因为没有任何子句匹配。一个例子是不处理这种不可防御式编程的情况,Erlang鼓励这种做法。相反,枚举和捕捉可能发生各种异常,Erlang程序员采取的是“让它崩溃”的理念[14]。至关重要的原理是Erlang的监管模式,在这种系统中监事的唯一作用是某些进程与启动和监控等。如果一个进程引发运行时错误,那么它只是死亡。监管当局会看到它死亡的错误,并且可以使用预定的策略来决定是否以及如何重新启动它。Erlang在并发情况下赋予新的动力FP惯用语法的另一个例子是模式与消息原语相匹配的组合,创造选择性的接受,如在这个简单的例子中所示:receive{ok,N}->N+1;{error,_}->0end此尝试接收和处理下一个输入消息到这个过程,是一个二元组开头的原子,具体地确定正确或错误。如果在邮箱没有匹配的消息,表达式会等直到这样一个消息到达。子句的顺序很重要,所以OK消息会优先于错误信息处理。该模式可以绑定变量,所以在表达N个时将被绑定到该邮件中的第二个任期。这种技术可以用于编程并发和通信系统,更具声明易懂的风格。这些例子表明,Erlang是相当成功且不寻常的东西:通常被认为是“学术”,并将它们作为语言的设计元素在一个很实用的工业方面使用。最后一个例子是正确的尾调用,有时错误地描述为“尾调用优化”。在某些情况下这种语言特性被看作是不是真的需要程序员的FP伎俩,但Erlang尾部调用的使用显示其真正的效用。Erlang提供强大的控制流程的抽象,例如,简单地需要它们的每个状态和每个事件的行为由一个被丢弃在联网的有限状态机给定应用程序。模块化的控制流,这使一个尾调用驱动的结构,可以编程的状态机成为可能。Erlang的一个最不寻常的特征,而且是一个建设高可用性系统的核心要素,就是热码加载,没有暂停其升级、正在运行应用程序的能力。一个Erlang系统的控制流程大多数是通过尾调用来实现;运行无限尾调用循环可以简单地在到达下一个循环迭代的方法是调用热加载代码的新版本。Erlang提供的所有的这些好处可能是最令人惊讶的主流语言的开发者,以分布式系统集成商,同时保持一个非常小的,有几个简单概念的语言来学习。Erlang不只是为了高度坚固的并发系统的设计,也为了这类系统的快速发展,“美丽”的代码是一个明确的目标,这是值得记住的。除了Ericsson的广泛的成功交付产品使用的语言,许多其他公司也纷纷在其之上构建Erlang和它的标准库,高性能和极其可靠的并发系统。几个有代表性的例子是:Bluetail/Alteon/北电网络(分布式容错电子邮件系统,SSL加速器)Basho技术(分布式容错数据库系统)Facebook(Facebook的聊天后端)Klarna(电子支付系统)RabbitMQ(AMQP企业消息)动力(SS7/ISDN协议转换器)Verivue(运营商级媒体传输硬件)6.2ScalaScala是在JVM上运行的静态类型语言。Scala与Java有无缝互操作性,并允许Java库的无数次重用。在语法上,Scala是足够用简洁更小的面积打造的API,与Java相比,这是由于Scala编程模型,提供了更高的抽象水平既为核心语言的和标准库的一部分。Scala是一个函数式对象语言。它提供了一个功能强大的面向对象模型和功能特征,使开发人员能够在FP工件中一起使用类,对象和特点,如封锁,以及模式匹配和代数数据类型使用OOP构造。作为一种通用的语言,Scala提供的功能,使更富有表现力的编程模型用于分布式计算。Scala的标准库使用的语言提供了实现基于消息的异步计算所有的表现,包括Actor模型[15]的实现。在本节的其余部分中所示,分布式计算的各种型号可以利用通过语言功能和Scala标准库的结合成为可能的码表现片段。Scala的特质让我们谱写了更小的抽象逐渐演变较大的,在实施过程中鼓励代码重用。下面是标准库如何定义的抽象为一个演员的多性状的组成:traitActorextendsAbstractActorwithReplyReactorwithActorCanReplywithInputChannel[Any]withSerializable{//..所有演员与构成该组件是也可以在其他环境中重复使用的独立的抽象。这导致更好的代码重用跨系统实现。伴随着多核处理器的增殖,当他们表现出某种程度的类比时,应用通常有更好的表现。异步消息是开发人员可以扩展分布式计算模型的有效途径之一。Java有一个丰富的构建在基于线程的并发库,以及Scala提供关于这一点,实现Scala基于actor的并发模型顶库。值得注意的是这里的表达语法,Scala提供通过其定义自定义控制结构的能力。在下面的代码片段中,演员需要一个高阶函数作为参数,并实现了信息处理循环的方法:actor{varsum=0loop{receive{caseData(bytes)=>sum+=hash(bytes)caseGetSum(requester)=>requester!sum}}}在上面的代码片段,请求!总之是一个消息发送就像在Erlang中。Scala允许操作者作为方法,在这里!是对类演员(在这种情况下的请求)的方法的命名。消息发送的简略版是对一个演员实例的一个简单的方法调用(请求者!(和))。下面以一个Scala撰写API来实现一个演员接到处理器基于流水线处理使用的功能功率为例。traitGenericServerextendsActor{//..defact=loop{receive{genericHandlerandThenspecialHandler}}//..}在上面的片段中,演员的接收回路首先运行一般的处理程序,以及后续运行特殊的处理。除了所有的句法特征,并通过演员基于库的并发的支持,Scala的两个最好的功能是它非常适合开发分布式应用程序并且永恒的支持和丰富的静态类型系统。不可变对象让并发更容易,使开发人员能够更轻松地推理自己的代码并进行测试。Scala的丰富的类型系统有助于强制约束在编译的时候,从而消除了在运行时的一类错误。这使分布式应用程序更容易测试,因为有较少的测试用例去编写,管理和维护。Scala正在成为开发分布式计算框架的一个热门选择。以下部分在细节上讨论其中之一,Akka。以下是今天在工业应用中使用的一些其他流行的Scala框架。Spark[16]是集群计算框架设计主要是为了支持并行机器学习工作。Spark是基于实施分散-集中分布式算法的数据集并行循环Scala的角色模型。Finagle[17]是一个Scala库,有助于实现异步消息传递客户端和服务器在Java中,Scala,或任何JVM语言。Finagle是建立在Netty[18]之上,并提供独立协议的抽象用于开发分布式部件像流,流水线,和请求-响应分布式组件。6.2.1Akka-分布式计算的JVMAkka[19]是Scala开发在JVM上构建可扩展的事件驱动的容错系统的平台。Akka当属松散耦合组件的集合,主要基于角色模型。Akka演员是在调度员的的基础上实现的,它允许用户配置以获得最佳性能和可扩展性参数。调度员管理由阻塞队列支持线程池和实现轻量级事件驱动的主题,可扩展到数百万,甚至在商品硬件中。演员和调度员都可以声明配置,这要归功于斯Scala的表达语法。Akka提供了许多方法来构建和启动一个演员。Scala的类型系统丰富,功能强大的对象语法和高阶功能组合性使演员的定义和生命周期管理表现力非常简洁,如下所示://actordefinitionclassMyActorextendsActor{defreceive={//..}}//actorinstantiationvalactor=actorOf[MyActor]actor.start()//moreconcise-instantiate&startvalactor=actorOf[MyActor].start()//actorswithnon-defaultconstructorsvala=actorOf(newMyActor(..)).start()//implicitactorbasedexecutionspawn{//dostuff}Akka演员交互使用异步消息传递。Scala的缀操作符符号,类型推理能力和图案代数数据类型匹配基于消息处理之上,有助于建立很好的抽象(如有限状态机)。这里有几个方法可以做到异步消息发送和Akka演员://fireandforgetactor!"helloworld"//getafuturevalfuture=actor?"helloworld"//sendandreceiveeventually(actor?msg).as[String]match{caseSome(answer)=>...caseNone=>...}Akka提供了使用Erlang的路线容错平台“让它崩溃”的经营理念和器械监督层次(如Erlang开放电信平台(OTP)框架的工作[20])。监事会负责启动,停止和监视使用链接方法连接到他们的子演员。监事可以声明通过提供可插入重启策略和生命周期的监管者进行配置。面向回调基于事件的编程是因为在编程模型非线性控制流程的不是很直观。但是,这不是分隔延续[21],一个功能强大的控制流抽象,让开发者在程序中用直接的风格,即使控制反转的情况。Scala支持分隔延续作为一个编译器插件,而Akka使用它来实现对数据流并发表现的API(如Oz[22])。数据流编程是一种流行的范式和Akka使得它可以在使用Scala作为实现语言的JVM。除了已经讨论的特征,Akka也有一些,使并行和分布式计算比不太强大实现语言可以简单其它组分的提供。其中有些是可以跨多个JVM,也可以透明地分配,类似的Clojure[23]基于代理的计算和综合实施软件事务内存[24]的远程演员。即将到来的Akka2.0将有许多所有能在Scala中实现的其他的功能,如透明和自适应负载均衡,集群再平衡,以及集中配置管理。事实是Akka已经能够实现Scala提供的复杂的分布式抽象的计算,充分证明了其能力和表现。同时Akka拥有一个JavaAPI所有的功能也成为事实,说明了Scala有和Java无缝的互操作性。7.未来发展目前,我们经过多年目睹编程语言的兴趣和发展的爆炸的干旱。在主流语言社区干旱的期间,尤其是Java,同比发展得非常好。但最近几年,针对Java和C++的复杂性反弹,伴随有远见开发商的推动,目睹了他们可以从比如Scala,Clojure,和Erlang语言中获得什么。当谈到取代Java的语言时,基于JVM的替代语言有优势。Scala和Clojure中已经有这个优势,都允许用现有的Java库和框架的集成。为此,笔者Thorup开发Erjang[25],Erlang的实现在JVM上运行,允许集成与现有的Java系统,同时还能够运行常规的Erlang字节码。这种基于集成的方法,允许在即使它增强或转换为另一种语言随着时间的推移维护要求和成本允许现有的代码投资的保护。技术优势似乎属于这些替代性的语言和建立在它们之上的框架,再加上他们似乎在诸如代码的可读性,可维护性和可扩展性重要领域的优势。我们甚至开始看到小语言被在核心语言之上开发,说明了要以更明确的方式开发分布式编程的词汇;Akka本质上是一个领域特定语言[26]分布式计算的一个例子。但未来胜利的是最终成本,而不是技术优势。高性价比的网络,云和“大数据”应用,其中像PHP和Ruby,Python和特别的JavaScript语言的规范,不仅帮助在替代语言的驱动进一步的兴趣,但他们也影响了持续增长传统的中间件的开发。随着越来越多的企业部署、云和基于Web系统的使用,如亚马逊的弹性计算云(EC2),SalesF,Yammer,谷歌文档,Zendesk,和其他集成项目,传统中间件的据点服务,正在改变到网络,同时,带动了RESTWeb服务[27]和基于HTTP的整合。HTTP已经允许真正的接口/实现拆分中间件已久的追捧,从而使开发人员能够自由地选择实现语言,使他们能够以任何方式构建,他们认为最好的可用性,可扩展性方面提供了基于Web的服务,以及可靠性为他们的客户和合作伙伴。开发商选择像Scala和Erlang的语言,能够帮助他们赢得建立自己速度更快,具有更高可靠性的服务的竞争的绝佳机会。由于这些Web和云计算为基础的方法继续获得青睐,其较低的成本最终将吸引、完善即使是最保守的企业,与传统的中间件市场的混乱。面对今天的中间件面临的挑战,研究人员更充分地探讨了替代的编程语言和Web和基于云计算系统之间的交集。明天的服务,需要更好的组件抽象,提高故障转移和冗余机制,更多的可扩展的,灵活的一致性和可用性选项。像Erlang和Scala和它们相关的框架另类的编程语言,不但是在这些领域的先进研究实验足够丰富,而且由于其实用性还可以大大告诉我们什么可行,什么不可行。

2.外文原文ProgramminglanguageimpactonthedevelopmentofdistributedSystemsAbstractProgramminglanguageshavelongimpactedthedevelopmentofdistributedsystems.Whilemuchmiddle-wareanddistributedsystemscodecontinuestobedevelopedtodayusingmainstreamlanguagessuchasJavaandC++,severalforceshaverecentlycombinedtodrivearenewedinterestinotherprogramminglanguages.TheresultoftheseforceshasbeenanincreaseintheuseofprogramminglanguagessuchasErlang,Scala,Haskell,andClojurethatallowprogrammingatahigherlevelofabstractionaffordingbettermodularity,enhancedspeedofdevelopment,andaddedpowerofreasoningaboutsystemsbeingdeveloped.Suchlanguagescanalsobeusedtodevelopembeddeddomainspecificlanguagesthatcanexpressivelyandsuccinctlymodelissuesinherentindistributedsystemsincludingconcurrency,parallelism,andfaulttolerance.Inthispaper,wefirstpresentahistoryofprogramminglanguagesanddistributedsystems,andthenexploreseveralalternativelanguagesalongwithmodernsystemsbuiltusingthem.Wefocusonlanguageandapplicationfeatures,howproblemsofdistributionareaddressed,concurrencyissues,codebrevity,extensibility,andmaintenanceconcerns.Finally,wespeculateaboutthepossibleinfluencestoday’salternativeprogramminglanguagescouldhaveonthefutureofmiddlewareanddistributedsystemsdevelopment.KeywordsDistributedsystemsInteroperabilityPortabilityProgramminglanguagesErlangJavaFunctionalprogrammingScalaRPCMiddlewareC++1IntroductionDistributedsystemsandprogramminglanguageshavelonginfluencedeachother.Theactofimplementingadistributedsystemusingaparticularlanguagerevealsstrengthsandweaknessesofthatlanguageastheypertaintodistributedsystems.Likewise,thefeaturesandcapabilitiesofmanydistributedsystemshave,forbetterorworse,beeninfluencedbyidiomsofdifferentprogramminglanguages.Inthispaper,weexamineavarietyofdistributedsystemsandmiddlewaredevelopmentsfromthepastfourdecadestoexaminehowprogramminglanguagesinfluencedthosesystems.Wethendetailthefeaturesandcapabilitiesoftwohighlyusefulnonmainstreamprogramminglanguagesalongwithanalyzingthebenefitsofusingthemfordistributedsystemprojects.Finally,wesurmisewhatthefutureofdistributedsystemsandmiddlewaremightbelikewithrespecttoprogramminglanguages.2ProcedurecallinfluencesAnearlydocumentrevealingtheeffectsprogramminglanguageshavehadondistributedsystemswaspublishedin1975:RFC707[1].Itaddressedtheneedfordistributedapplicationprotocols,firstbycallingattentiontothefactthatnetworkedresourcesofthattimesupportedcommandlanguagesintendedforhumanratherthanapplicationinteraction.TheRFCthenraisedtheconcernofwhetherdeveloperscouldreasonablywritenetworkedapplications,giventhedifficultyofdevelopingandusinginterprocesscommunication(IPC)facilities.Toaddresstheseconcerns,theRFCauthor,JamesE.White,proposedthe“ProcedureCallModel”(PCM)tohelpdevelopersbuildnetworkedapplications.Hereasonedthatdeveloperswerealreadyfamiliarwithwritingapplicationsthatinvokedlibrariesofprocedures,sothePCMwouldmakecallstonetworkedapplicationslookjustlikenormalprocedurecalls.FollowingonfromWhite’sPCMwasNelson’sRemoteProcedureCall(RPC)[2].Unfortunately,todaytheterm“RPC”hasbeenincorrectlygenericizedtorefertothesendingofanyremotemessage,butoriginallyitdealtspecificallywiththetransparentinvocationofaprocedureonaremotesystem.Transparencywaskey;withinthetextofthecallingapplication’simplementationlanguage,thecalltotheremoteprocedurewasintendedtolookjustliketheinvocationofaregularlocalprocedure.RPChashadsignificantinfluenceondistributedsystemsresearchanddevelopment,butinthe1980sitwasnottheonlyinfluentialforce.Bythattime,transactionmonitors,originallyinventedanddeployedinthe1960swhenAmericanAirlinesandIBMjointlycreatedtheSABREairlinereservationsystem,hadestablishedthevalueofmiddleware,codethatwasneitherapplicationnoroperatingsystem(OS),butinsteadsatinbetweenprovidingclearlyuseful,andsometimesbusiness-critical,computingcapabilities.Computersystemswereevolvingfrommainframestominicomputerstoworkstationstopersonalcomputers.Thesenewersystems,particularlyworkstations,requirednetworkconnectivity,andsonetworkingtechnologiessuchastokenringsystemsandEthernetwerealsoevolving.Meanwhile,newprogramminglanguageswerebeinginventedevenasoldoneswerestillmaturingandadvancing.Forexample,inthe1980sLisp,Pascal,C++,Smalltalk,Eiffel,Objective-C,Perl,andErlangwerealleitherinventedorwerereceivingnotableattention.Aroundthebeginningofthe1980s,thestructuredprogrammingmethodologywasalreadypopularandbecomingmoreso,butinterestinobject-orientedprogramming(OOP)wasbeginningtorise.Asthe1980sprogressed,researchersanddevelopersrealizedthatobjectswereaconvenientunitforparcelingoutfunctionalityacrossadistributedapplication.Togethertheseforceshadsignificantinfluenceon1980sdistributedsystemsresearch,resultinginimportantdevelopmentsintheareasofoperatingsystems,programminglanguages,anddistributedapplications.Anumberofacademicsystemsdevelopedduringthisperiodwerecompletetop-to-bottomsystems—OS,programminglanguage,distributionmiddleware,andapplicationprogramminginterface(API),allrolledtogether—primarilybecausealloftheselevelswerestilltheobjectofintenseresearchanddevelopment.Therewereseveralnotableresearchsystemsoftheday,including:Argus[3],adistributedprogramminglanguageandsystemdesignedtohelpwithreliabilityissuessuchasnetworkpartitionsandnodecrashes.Eden[4],afullobject-orienteddistributedoperatingsystemthatmadeuseofRPC.Emerald[5],adistributedRPC-basedobjectlanguageprovidinglocal/remotetransparencyandaddressingnewanddifficultproblemsofthetimesuchasobjectmobility.SystemslikethesetendedtorelyonRPC,focusonuniformitysuchaslocal/remotetransparencyandstrong/statictypingacrossthewholesystem,andusetheirowncloseddistributionprotocolshiddenwithineachsystemaspartofitsunderlyingRPCmechanisms.Asbusinesscomputingnetworksgrewduringthe1980s,vendorsknewtheyneededtoconvertdistributedsystemsresearchintopracticalapplications.Buttheircustomerswantedtousestandardprogramminglanguagesofthetime,suchasPascalandC.Thispressureledvendorstoincorporatedistributedsystemsresearchintotheirownstacks,butdosobymakingdistributionfeaturesavailablethroughstandardprogramminglanguages.Forexample,ApolloComputer’sNet-workComputingSystem(NCS)[6],anRPCsystemfeaturingadeclarativeinterfacedefinitionlanguage(IDL),andSunMicrosystem’sOpenNetworkComputing(ONC)system[7],werebothcommercialdistributedcomputingsystemsheavilyinfluencedby1980sdistributedsystemsresearch,yeteachworkedwithC.NotethateachsystemfocusedonRPC;bythistime,White’sandNelson’searlyRPCideasandworkhadcometofruition,becomingtheacceptednormfordistributedapplicationinvocation.3DistributedobjectsOneoftheproblemswith1980sdistributedsystemswasthattheywereclosedsilos.Portabilityforapplicationsbetweenthesesystemswasnonexistent,aswassysteminteroperability.1980scustomersandusersstartedtoexpressinterestinstandardizedAPIsandprotocolstoallowforapplicationportabilityandinteroperability.Asthe1990sapproached,thegrowingpopularityofOOPledsometoseedistributedobjectsasananswertotheportabilityproblem.In1989,theObjectManagementGroup(OMG)formedtostandardizeanobjectmodelfordistributedapplications.3.1CORBAIn1991,theOMGpublishedtheCommonObjectRequestBrokerArchitecture(CORBA)specification[8],oneofthemostsuccessfulmiddlewarestandardsevercreated.AtthecenterofCORBAwastheconceptoftheobjectrequestbroker(ORB),anabstractentityforcontrollingandmanagingtheinvocationofdistributedobjectmethods.CORBAdefinedtheORBinterface,theOMGIDL,asetofmethodscommontoallCORBAobjects,andanumberofinterfaceslocaltotheORBitself.ThegoalsofCORBAincludedapplicationportability,systeminteroperability,andtheintegrationofdisparatesystems.TheCORBAapproachtoapplicationportabilitywastomapthefeaturesofOMGIDLandtheORBinterfacestoprogramminglanguages.TheinitialCORBAspecificationincludedamappingtotheClanguage,butfewuseditsinceCisnotanobjectlanguage.Instead,userswantedC++.CORBAandC++evolvedtogether,andC++hadcrucialimpactonCORBA.NumerousORBimplementationswerewritteninC++,andmostinitialCORBAuserswrotetheirapplicationsinC++.Throughmuchofthe1990s,anumberoftheauthorsofvariousC++ORBimplementationscooperatedwithintheOMGtoevolvetheCORBAstandard.TheirknowledgeandexperiencewithC++helpedguideCORBAthroughitsformativeyears.Thismeant,though,thattheCORBAstandardwouldcontinuetobetruetoitsRPCroots,eventhoughitwaswellunderstoodbythattimethattheRPCapproachwasfundamentallyflawed[9].3.2Objective-CObjective-C,anotherC-derivedOOPlanguage,isadynamiclanguageaddingSmalltalk-inspiredfeaturesontopofC.Italsoprovidesanincrementaltypesystem,class/interfaceseparation,dynamiccodeloading,andotherfeaturesallowingrapidapplicationdevelopment.Objective-Cwasdevelopedintheearly1980s[10],andpopularizedintheNeXTSTEPoperatingsystem[11].NeXTwasacquiredbyApplein1996;Objective-CandNeXTSTEP,nowiOS,arestillinwidespreadusetoday.ThedynamicnatureofObjective-Cmadeitquiteeasytoextendthecoreframeworkswithadistributedobjectsystembuiltonasimpleproxymechanism.Thelanguagewasamendedwithannotationsformethoddeclarationssuchasoneway,bycopy,in,out,etc.,allmadeaccessiblefromObjective-C’sruntimereflectionandthusavailableasmeanstocontroltheseaspectsofobject-basedRPC.Giventhisapproachtoimplementingdistributedobjects,therewasnoneedforaseparateIDL.4TheriseofJavaInthemidtolate1990s,Java[12]becameverypopular.OneofthedistinctivefeaturesofthelanguagewasthattheJavaplatformcamewithmeanstomovecodebetweenmachines,andsecurelyexecutecodeina“sandbox,”allowingexecutionofuntrustedcodeinasecureway.Manyothersystemsforallowingremoteexecutionofcodewerebasedona“domainspecificlanguage”forspecificactions(suchasSQL),butJavaalloweddistributingcodeinawaythatblendedmoreeasilywiththerestoftheprogrammingenvironment.AnotherprominentfeatureofthestandardJavalibrarieswasanimplementationofdistributedobjectscalledRemoteMethodInvocation(RMI).LikeObjective-C,RMIdefinesitsowntransportlevelprotocolforremotemethodcalls,andthusdidnotaimforinter-languageinteroperability.RMIisalsobasedonhavingproxyobjectsrepresentremotelyavailableobjects,andinafashionsimilartoCORBA,theseproxieswouldbegeneratedbyaseparateRMI-enabledcompiler(rmic).Later,JavaintroduceddynamicRMI,inwhichcompile-timecodegenerationwasnolongernecessaryduetotheuseofJavainterfacestodescriberemoteobjectsandruntimereflectiontocontroltheunderlyingRPCmechanism.4.1CORBAinJavaAsJavagrewtobecomethelanguageofchoiceformanyenterprises,theneedforfurtherintegrationtechnologiesrose.SeveralgroupsdevelopedCORBAbindingsforJavaasameanstoprovideinteroperabilityandintegrationwithothersoftwaresystems.Someofthemappingsevenworkedbyreverse-mappingJavatoCORBA.WiththeadventoftheJava2EnterpriseEdition(J2EE)platform,CORBAanditsInternetInter-ORBProtocol(IIOP)becamepartoftherequirementset,andamultitudeofvendorsimplementedCORBA/IIOP,includinganewstandardforusingitasatransportforJava’sRMIAPIs[13].Sadly,manyoftheseIIOPimplementationswereincompatible;theeffortdidnotreachthegenerallevelofqualityneededtomakethisinteroperabilitystorypopular.Messagingbasedonself-describingdatatransports(XML,JSON,etc.)hassincegrowninpopularityinpartbecauseofthetransparency,debuggability,andincreasedpossibilitiesforcopingwithevolvingAPIs.5CurrentsystemsToday,Javacontinuestobetheplatformofchoiceformiddlewareanddistributedsystemsdevelopment.TargetingtheJavaVirtualMachine(JVM)allowsdeveloperstowriteportablecode,whichisimportantinheterogeneousenvironments.JavaislargelyconsideredeasierthanC++,allowingmoredeveloperstouseiteffectively.OnetellingsignoftheinfluenceofJavaisthatforbetterorworse,today’sdevelopersuseJavaartifactstodefineremoteinterfacesanddatainterchangeformats,andthensimplypushabuttonintheirintegrateddevelopmentenvironment(IDE)toautomaticallycode-generatemiddlewareinfrastructure.Contrastthiswithpastapproaches,suchaswithCORBA,wherethesystemwasdefinedinIDLfromwhichtoolsgeneratedgluecode.Ratherthanbeing“justanotherlanguage,”Javatodayisoftenthecompletebasisforthedistributedsystemarchitecture,design,andimplementation.6AlternativelanguagesNumerousdevelopershavewrittenworkingdistributedsystemsinJavaandC++,butthatdoesnotmeansuchlanguagesareidealforthetask.Oneoft-citedproblemwithdistributedsystemsandmiddlewaredefinedintheselanguagesisthemonumentalsizeofthecoderequiredtoexpressthefeaturesofthesystem.Assystemsgrowinscaleandfeatures,codesizebecomescriticaltobeingabletounderstand,maintain,andenhancethem;shouldthecodegrowtoolarge,itcripplesdevelopers,whocannolongerkeepupwithit.Thiscanleadtosystemsthatwitherprematurelyandmustbereplaced,oftenatimmensecostduetodelaysandmissedopportunities.Sincegeneral-purposelanguagemodelsdonotworkwellasdistributedsystemmodels,abetterapproachistoemployalanguagewhosemodelisinformedbytheproblemsofdistribution,includingconcurrencyissues,partialfailure,messaging,andtheneedforfaulttolerance.Becausesuchlanguagesbetterfittheproblemdomain,developerscanusethemtocreatesolutionsthataremuchmoreelegant,brief,readable,maintainable,andextensiblethanwhatcanbeachievedwithgenerallanguages.6.1ErlangErlangisadynamicallytypedandgarbage-collectedlanguagewithavirtualmachinedesignedforsoftreal-timebehavior.Thoughitissometimesplacedinacategoryofnewalternativelanguages,itisactuallyabouthalfadecadeolderthanJava.ErlangwasoriginallyconceivedaspartofanexperimentintheEricssonComputerScienceLaboratorytofindabetterwaytoquicklyandeasilydevelopclear,easy-to-readprogramsthatwouldalsobehighlyrobust.Erlangissometimesreferredtoasa“concurrentfunctionallanguage.”Itinheritsfundamentalqualitiesfr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论