对象空间范型及其设计研究

(整期优先)网络出版时间:2008-09-19
/ 2

对象空间范型及其设计研究

郝勤

摘要:就分布式系统中的对象空间范型这一高级抽象模型进行了阐述,并对其设计中的难点问题做了一定深度的探讨。

关键词:分布式系统;范型;对象空间

1分布式计算范型概述

分布式系统指通过网络互连,可协作执行某个任务的独立计算机集合,分布式计算指在分布式系统上执行的计算,包括在通过网络互连的多台计算机上执行的计算,每台计算机都有自己的处理器及其他资源。[1]分布式计算的核心技术是进程间通信(interprocesscommunication,IPC),即在相互独立的进程间通信及共同协作以完成某项任务的能力,而范型则是将这种进程间通信进行不同程度抽象得到的抽象模型。目前已经出现了多种分布式计算范型,典型的包括:

1.1消息传递(MessagePassing)。在该范型中,发送者发送请求的消息,该消息被传送到接收者,接收者处理该请求,并有可能发送一条应答消息给发送者。

1.2客户—服务器范型(Client/Server)。[2]该模型将非对称角色分配给两个协作进程。其中,服务器进程扮演服务提供者角色,被动地等待请求的到达。客户进程向服务器发起请求,并等待服务器响应。

1.3远程过程调用(RemoteProcedureCall)。一个进程向另一个进程发出过程调用,并将数据作为参数传递。另一进程收到过程调用请求后,即开始执行被调用过程的代码。

1.4对象请求代理(ObjectRequestBroker)。进程向对象请求代理发出请求,对象请求代理将请求转发给能提供预期服务的适当对象。即对象请求代理充当了中间件的角色。

从图1可以看出,这些范型的抽象层次不尽相同。一般说来,抽象层次越高,封装和隐藏的通信细节就越多,但抽象也是有代价的,即会增加开销。对象空间范型就是一种具有最高抽象级别的分布式计算范型。

图1各种范型的抽象层次

2对象空间范型

2.1定义

对象空间范型源于DavidGenlenter的LindaTuplespace[3],它是人工智能领域的黑板系统的基础。在对象空间范型中,对象空间是在一个分布式系统中由多个进程共享的对象存储库。进程间不是直接相互通信,而是通过在对象空间中交换对象来实现通信。从逻辑上看,对象空间是分布式系统中的一整块共享内存空间。可见,对象空间范型的抽象层次是很高的。

2.2接口

对象空间本身可看作一个对象,它的接口很简单,提供三种基本操作:读、写、取对象,而在其内部则隐藏了网络中通信的各种细节。这使得对象空间容易使用,并具有较好的扩展性,即接口保持不变,而其内部的设计方案可以不断优化完善,网络通信方式也可随着技术的进步而改进。

2.3实例——J2EE中的对象空间

在J2EE中,JavaSpacesAPI提供了基于对象空间范型的框架。在这个框架中,提供了一个Entry接口,只有实现了Entry接口的对象才能放入JavaSpace对象空间中。而JavaSpace空间提供了三种基本操作:读、写、取Entry对象。例如,下面的代码定义了一个Entry对象类MyObject:

publicclassMyObjectimplementsEntry//实现Entry接口的自定义对象类

{

publicStringmessage;//封装的内部数据

publicMyObject(Stringmsg,intval)//带参构造函数

{message=msg;}

}

然后,发送消息的进程封装一条“Hello”字符串到MyObject对象中,并写入到JavaSpace对象空间中:

MyObejctobject=newMyObject(“Hello”);//封装Hello消息到对象中

JavaSpacespace=(JavaSpace)space();//定位JavaSpace对象空间

space.write(object);//将消息对象写入对象空间

最后,接收消息的进程从JavaSpace对象空间中读取此消息对象:

MyObejctobject=newMyObject();//构造新对象

JavaSpacespace=(JavaSpace)space();//定位JavaSpace对象空间

space.read(object);//从对象空间读取消息对象数据到新构造的对象中

从以上的例子可以看出,对象空间范型具有模型容易理解、接口简单和应用方便的优点。

3对象空间范型设计

在基于对象空间的分布式系统中,多个机器上的进程共享这一充满各种对象的抽象空间。[4]设计中的难点问题是:对象空间中的对象是否可以被复制。由此可设计出两种进程间的通信方式。

3.1单一拷贝通信方式

在这种通信方式中,多个进程在通信时共享对象的唯一一个拷贝,即单一拷贝。这时,对象的单一拷贝成为临界资源,可以利用P、V锁操作来调度进程,分配资源。每个进程访问对象的算法描述如下:

3.1.1实施P操作,锁定对象的单一拷贝;

3.1.2进程访问(读或写)对象的单一拷贝;

3.1.3实施V操作,解锁对象的单一拷贝。

可见,单一拷贝通信方式的优点是设计简单,实现方便,但多个进程常常会由于争夺对象单一拷贝的访问权而陷入阻塞,因此通信效率较低。为克服这一缺点,又提出了多个拷贝通信方式。

3.2多个拷贝通信方式

在这种通信方式下,每个进程都可以在本地拥有对象的一个拷贝,这样,多个进程就可以并发地进行读操作,提高了对象空间读操作的效率。每个进程进行读操作的算法描述如下:

3.2.1若进程所在本地节点无对象拷贝,则从对象的初始拷贝复制一个到本地节点;

3.2.2进程直接读取本地节点上的对象拷贝。

可见,若一个进程多次读取某个对象时,由于本地节点中已经拥有此对象的拷贝,故不必访问网络,从而大大降低了网络通信的开销。

但是,一个对象现在有了多个拷贝,必须由对象空间维持对象多个拷贝间的数据一致性。当进程要对对象进行写(更新)操作时,其算法描述如下:

a.首先锁定对象的初始拷贝,然后更新它;

b.锁定对象的其余拷贝,然后更新它们;

c.解锁对象的全部拷贝(包括初始拷贝)。

可见,在多个拷贝通信方式中,读操作效率的提高是以写(更新)操作效率的降低为代价的,这种设计较适合于读操作频繁的对象空间。

4结束语

以上对象空间范型这一高级抽象模型进行了阐述,并对其设计中的难点问题做了一定深度的探讨。后续的研究将集中在对其的优化设计方面,根据对象的读写操作频度,将单一拷贝通信方式和多个拷贝通信方式结合起来运用,以期设计出性能更优异的对象空间。

参考文献

[1](美)M.L.Liu著,顾铁成译.分布式计算原理与应用[M].北京:清华大学出版社,2004.

[2]DouglasE.ComerandDavidL.Stevens.InternetworkingwithTCP/IP[M].NJ:PrenticeHall,2001.

[3]SudhirAhuja,NicholasCarriero,andDavidGelernter.LindaandFriend[J].Computer,August1986:26-34.

[4]陈国良,吴俊敏.并行计算机体系结构[M].北京:高等教育出版社,2002.