英语原文共 15 页,剩余内容已隐藏,支付完成后下载完整资料
摘要
诸如收集/分散输入/输出、下载系统扩展的代码、消息批处理、移动代理和延迟调用断开连接操作等知名技术有哪些共同之处?尽管技术相当不同,但它们都共享一个共同的设计(可能还有实现)作为它们的基石:批处理设计模式。
上面提到的所有技术都是为跨多个域(例如,网络中的多个进程或多个节点)运行的应用程序而设计的。在这些技术中,多个操作捆绑在一起,然后发送到不同的域,在那里执行它们。在某些情况下,目标是减少域跨越的次数。在其他情况下,它允许动态服务器扩展。
在本文中,我们介绍了批处理模式,讨论了应该和不应该使用该模式的情况,并确定了实例化该模式的8类现有技术。
1介绍
诸如代码下载、消息批处理、收集/分散和移动代理等应用程序都遵循客户机-服务器交互模型。仔细观察就会发现,它们都将一组操作分组,并将它们提交给服务器执行。提交操作的目的是减少域交叉和/或允许动态服务器扩展。例如,代码下载到操作系统内核是
部分由西班牙CICYT grant # TIC-98-1032-C03-03支持。
dagger; 部分由西班牙研究委员会CICYT资助项目# TIC-98-1032-C03-01和马德里地区研究委员会资助项目CAM-07T/0012/1998提供。
bdfa法比奥Kon部分由CAPES, Brazil, proc.# 1405/95-2支持。
sect; 系统研究小组由国家科学基金会(NSF 98- 70736)资助。
1
旨在节省域穿越,同时允许系统扩展。消息批处理和移动代理的目的是避免跨域。
考虑一个使用如图1所示文件服务器的程序。在典型的客户机-服务器交互中,客户机向服务器发送命令(读、写),等待应答,然后继续。
cat(File aFile, File otherFile) { while (aFile.read(buf))
write(otherFile.write(buf)); }
图1:Cat代码
假设读和写是由同一个服务器处理的,并且跨域调用(即从客户机到服务器的调用)比在服务器内部进行的调用要重得多。然后,将整个while循环发送到文件服务器执行会更加有效。
如果客户机将代码发送到服务器执行,那么一个调用就足够了,而不是有多个跨域调用(图2.a)(图2.b)。为此,扩展文件服务器以允许执行不同客户端提交的程序是很方便的。
read(f1,buf) ack(buf) write(f2,buf) ack()
hellip;write(f2, buf) ack ()
execute (cat (f1、f2))
ack ()
(a) (b)
图2:对应于读写服务和cat服务的交互
2问题
跨域数据流量和跨域调用延迟都对多域应用程序的效率有显著影响。跨域调用和跨域数据传输也发生在集中式环境中。例如,几乎每个操作系统在用户空间和内核空间之间都有一个域边界(进入和离开内核都需要跨越域)。一个应用程序使用
2
多个进程的每两个进程之间都有一个域边界。此外,在分布式系统中,网络的行为就像一个域边界。
在许多情况下,不必要的数据传输只是因为控制操作的对象驻留在远离数据源和/或数据接收器的地方。这正是上一节文件复制示例中所发生的情况:执行复制的客户机对象和文件服务器对象位于不同的域中。因此,数据到达客户机只是为了返回到服务器。
3解决方案
通过批处理单独的方法调用,即将它们转换为单个的跨域调用,可以避免不必要的数据复制,并减少跨域调用的数量。
客户端可以构建一个程序(“批处理调用”)并立即将其传输到服务器。程序在该服务器上执行多个操作,即使客户机只需要发送一次。
在我们的示例中(参见图2,cat的交互),如果没有使用批处理,文件内容必须在网络上传输两次。然而,当cat程序提交给服务器时,文件不会离开服务器,而是在本地复制。
4模式结构
批处理,也称为复合调用。
4.1参与者
图3显示了与批处理模式对应的类层次结构。它遵循[5]中使用的OMT表示法[13]。
批处理服务器的行为作为一个fac ade[5]到服务器提供的服务。该类的对象位于服务器端。它为服务调用者提供了解释工具,这样客户端就可以将程序发送到服务器端,而不是直接调用服务器。execute方法是解释器[5]的入口点,它解释“批处理”程序并将结果返回给客户端。
这个类只出现在服务器端。它提供了一组可以由客户机调用的入口点。
请注意,ConcreteServer实际上是在实例化模式之前在服务器端拥有的类(或类集)。这里提到它是为了完整性。
Program是一个抽象类,表示要解释的程序。客户端构建程序实例并将它们发送到批处理服务器以执行。它还负责维护一个相关的变量表。运行
3.
BatchServer execute(vars,aProgram)
ConcreteServer service1(parms) service2(parms)
Program run(vars) terminate() VarTable vars;
Var
get(bytes) Mode mode
ControlStructure
Command
run(vars) terminate()
run(vars) terminate()
ConcreteVar set(bytes) get(bytes)
ConcreteControlStructure ConcreteControlStructure(somePrograms) run(vars)
terminate()
// Assuming // itrsquo;s an IntVar memcpy(bytes, _the_int,sizeof(int))
// Assuming ConcreteInstruction // is a SequenceInstruction... while(!terminated())
calls[program_counter].run(vars)
// Assuming Command
// is a CallService1Command... args = build_args_from_vars(vars) ConcreteServer::service1(args)
图3:批处理
程序类的方法实现了在服务器上运行它所需的解释器。
当出现错误时,程序还负责执行有序的程序终止。terminate方法是作为程序终止的抽象接口提供的。
批处理的另一个名称,即COMPOSITECALL,来自这样一个事实:Program和后面的两个类是复合模式[5]的一个实例。
ControlStructure是一个由程序组成的结构。它的目的是将几个程序按照某种控制结构(如序列、迭代等)捆绑在一起。
ConcreteControlStructures表示具体的控制结构,如条件,而构造,序列等。在服务器端,这个类负责执行由类表示的具体控制结构。
4
ConcreteControlStructure构造函数可以在客户端用来构建复杂的程序。
命令是表示单个操作的程序。(它类似于[5]中显示的命令模式,因此得名)。具体命令的示例可以是算术操作、逻辑操作或对ConcreteServer入口点的调用。批处理的唯一目的是使用ConcreteControlStructures将几个具体的命令捆绑在一起。
varitable保存程序的变量。它提供了本地存储,还保存了程序的任何输入参数。程序的输出值也保留在变量中。这个表是在客户机上使用程序的输入参数集构建的。然后,在解释程序时,在服务器内部使用它。这个表最终在程序完成后返回给用户。
每个程序都有一个变量表(变量和程序对一起发送到批处理服务器)。因此,一个具体程序的所有组件共享一个变量表,以便它们可以共享变量。
Var是一个抽象类,表示发送到服务器的程序的变量。它有一些相关的存储(字节,在图中)。Var实例保存在变量中。变量有一种模式,可以是in(给程序的参数)、out(给用户的结果)、inout(两者)或local(局部变量)。通过包含模式限定符,该类可以用于局部变量和输入/输出参数。
ConcreteVar是一个具体类型的变量(整数、字符等)。它的构造函数在客户机上用于声明程序要使用的变量或参数。在服务器端,这个类的实例负责处理程序使用的单个具体数据块。
4.2应用于文件服务器的模式
文件服务器示例的类的具体结构如图4所示。直观地说,这个批处理实例只是向文件服务器添加了一个解释器(参见[5]中的解释器模式)。该解释器可以执行以下程序:(1)调用读写,(2)可以使用while作为控制结构。
我们以FileServer类作为起点,它提供了对文件进行操作的读和写方法。
我们简化了文件服务器提供的典型接口。一个典型的文件服务器将包含几个提供读和写方法的文件对象。为了简单地说明该模式,我们省略了正在使用的文件1。
BatchFileServer与FileServer位于同一位置,提供了一个新的执行服务,该服务提供了解释版本的FileServer服务。BatchFileServer对应于模式中的BatchServer(参见图3中的模式图)。
要获得一个完整的实现,只需添加一个文件类,并向读写方法中添加文件参数。
5
BatchFileServer execute(vars,aProgram)
FileServer read(buff) write(buff)
Program run(vars) terminate() VarT
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[262703],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。