APP下载

Jini查找服务的部署

2010-01-20李中林曾丽君

现代电子技术 2009年21期

李中林 李 辉 张 军 曾丽君

摘 要:在Jini体系中,服务需要通过查找服务进行注册,客户通过查找服务发现感兴趣的服务。服务和客户可通过单播发现协议或广播发现协议来定位查找服务,单播发现协议在已知查找服务地址的情况下适用,否则需要使用广播发现协议。为了充分发挥Jini技术优势,提高系统效率和避免因采用广播发现机制而带来的“广播风暴”,通过设立公共查找服务,提出一种简便可行查找服务部署方案。

关键词:Jini;查找服务;广播发现;单播发现

中图分类号:TP393.01 文献标识码:A

文章编号:1004-373X(2009)21-135-03

Deployment of Jini Lookup Service

LI Zhonglin,LI Hui,ZHANG Jun,ZENG Lijun

(Science Institute,Air Force Engineering University,Xi′an,710051,China)

Abstract:In the Jini system,the service needs to register through the lookup service,and customers search interest services through lookup service.Service and customer can locate lookup service through unicast discovery protocol or broadcast discovery protocol.Unicast discovery is used when address of lookup service is known,otherwise,broadcast discovery protocol is needed.In order to make full use of Jini technology′s advantage,that is dynamic,plug and play,and avoid″broadcast storm″,the paper advances a possible simple lookup service deployment program.

Keywords:Jini;lookup service;broadcast discovery;unicast discovery

0 引 言

Jini是1999年1月Sun公司发布的一种基于Java的全新的面向动态分布式计算的解决方案,是一种与协议、位置以及实现技术均无关的自诊断、自配置的服务网络体系结构[1-3]。Jini的设想十分简单:所有支持Jini的设备,可以是数字相机、打印机、PDA或者蜂窝式电话,只要插入到TCP/IP网络中,就可以自动发现并使用附近其它支持Jini的设备。把一个新设备添加到“网络群体”中,只需要将其插接到网络。Jini利用Java 平台,屏蔽机器平台和操作系统的异构性,将软硬件和应用程序等都抽象为服务,其核心要素就是服务、查找服务和客户。如图1所示,对于服务和客户而言,初始化工作都是定位查找服务:服务寻找查找服务并注册自己,客户通过查找服务搜索所需服务,具体工作过程可参考文献。如果查找服务的位置是已知的,服务和客户就可以使用单播发现协议直接与之联系;如果位置不确定,服务和客户需要先广播UDP请求,查找服务将响应此请求。

在实际应用中,对于新接入网络的设备而言,网络环境是“陌生的”,设备(客户)可能不知道查找服务的准确位置,其理想方法就是通过广播发现机制来定位查找服务。但是从网络需求的角度看广播的代价是很昂贵的,广播消息可能会被大多数路由器阻塞掉,这样广播就被限制在一个局域网中。此外,在现有Jini机制中,如果一个网段内有多个服务需要注册到其他网段的查找服务上,需要每个服务都要执行发现协议发现查找服务,下载服务代理,然后注册服务。对于客户在请求服务时同样如此,这样就没有很好利用已有的服务注册和请求信息。

本文主要提出一种查找服务的部署方案,改变服务注册与客户请求服务的方式,来尽量避免网络中“广播风暴”以及减少服务注册和请求的响应时间。

1 单播发现和广播发现[7]

1.1 单播发现

如果已经知道查找服务所在的位置,就可以利用单播方式发现查找服务,并直接向该地址请求查找服务。如果一个查找服务不在局域网范围内,但是可以通过某种方式知道其网络地址,例如家用网络、工作单位的网络,或者是新闻组、电子邮件消息中所指出的网络,甚至也可能是电视中广告的网络等,那么这种发现方式是很适用的。

使用单播协议只需要一个LookupLocator类,它存在于net.jini.core.discovery包中,有两种构造函数:

Package net.jini.core.discovery;

Public class LookupLocator {

LookupLocator(java.lang.string URL) throws java.net.MalformedURLException;

LookupLocator(java.lang.string host,int port);

}

在第一个构造函数中,URL必须是“jini://host/”或者“jini://host:port/”。其中host是一个有效的域名地址或IP地址,port若无指定则为缺省值4 160。在LookupLocator类构造时,并没有执行实际的查找。以第一种方式构造类时,只是对URL从句法形式上做了检测,而在第二种构造方式中则连句法检测也没有执行。

1.2 广播发现

UDP支持Jini的广播发现机制,但是广播对于网络来说是非常昂贵的,并且许多路由器会阻塞广播数据包,因此通常将广播限制在局域网内,具体则取决于网络配置和广播数据包的生存周期。

广播发现机制需要使用三种对象:LookupDiscovery类、DiscoveryListener接口和DiscoveryEvent对象。LookupDiscovery类存在于net.jini.package包中,有两种构造函数:

LookupDiscovery(java.lang.string[] groups);

LookupDiscovery(java.lang.string[] groups,Configuration config);

当groups参数为NULL或LookupDiscovery.ALL_GROUPS时,表示需要发现所有能够达到的查找服务,而不管它属于哪个特定的组;当为空列表或LookupDiscovery.NO_GROUPS时,则不执行任何查找,构造之后可以调用setGroups方法来执行查找;若用一个非空的groups列表作参数时,表明需要在这些特定组中发现所有的查找服务。

由于查找服务会对广播进行响应,并且通常也不知道具体有多少个查找服务会做出响应,为了能够在查找服务被发现时及时通告,需要注册一个Lisenter并添加给LookupDiscovery对象,这个Listener必须实现DiscoveryListener接口。

Public void addDiscoveryListener(DiscoveryListener listen);

Package net.jini.discovery;

Public abstract interface DiscoveryListener

{

Public void discovered(DiscoveryEvent e);

Public void discarded(DiscoveryEvent e);

}

当查找服务被发现时,discovered方法被调用;当应用程序需要丢弃查找服务时discarded方法被调用,它通过在registrar对象上执行discard方法来撤销查找服务。

2 查找服务部署方案

2.1 部署方案

在实际组网过程中,为了充分发挥Jini自身的优势和避免因采用广播发现机制而带来的“广播风暴”,文献[8]提出两种方法:第一种是在每个网段都运行同一查找服务;第二种方法是使用组播隧道技术,通过创建一个加入组播组的程序,把接收到的所有消息都转发到另一网段中某主机,同时它还从一个标准套接字读取数据,把接收的消息中继到组播套接字。第一种方法意味着只有同一网段的服务可彼此找到,除非是为每个查找服务提供其对等体的名称,使用单播发现使它们相互加入,从而组成联邦。第二种方法需要在所有网段中分别运行外部程序,才能实现不同网段中使用同一地址的组播数据之间的联系。

本文采用的改进方法是:利用单播与广播相结合的方式,通过设置公共查找服务以期获得最大的服务查找效率。具体做法如下:

(1) 合理分组:针对一组特定的服务设置专门的查找服务

例如,针对个人客户而言,可以部署一个办公类查找服务:主要接受办公电脑(可以充当服务发布的代理)、打印机、扫描仪等设备所提供的服务的注册;部署一个家电类查找服务:主要接受个人电脑(可以充当服务发布的代理)、空调、电视、冰箱等设备所提供的服务的代理。

一旦查找服务启动,可以向它提供一个组列表作为其命令行参数。服务通过指定其所属的组列表,即可包括这种组信息。这是一个字符串数组,如:

import net.jini.jrmp.JrmpExporter;

com.sun.jini.reggie {

serverExporter = new JrmpExporter();

initialMemberGroups = new String[] { "OfficeLookupService" };

}

(2) 设置公共查找服务:在每一网段的固定位置(例如网关)设置查找服务

此处查找服务接受本网段内所有服务的注册信息和客户的请求信息,并且也担当起安全管理的第一道防线,即检查所注册的服务是否实现了服务规范中所定义的接口。为了方便起见,将此处查找服务定义为公共查找服务(Commonality Lookup Service,CLS)。

(3) 实时传递信息:在各网段内公共查找服务之间传递服务的注册信息和客户的查询请求,以提高服务查找的成功率。

2.2 服务注册和客户请求过程

那么经改进后,服务注册和客户请求的过程如图2所示。

服务注册时,服务方将自己所提供服务的信息提交到本网段的CLS上,CLS首先对所注册的服务进行安全性检查,确保所注册的是真正的服务而不是恶意代码。若通过检查,CLS在本网段内通过广播发现来搜索是否有符合条件的查找服务。如果有,CLS将发送确认信息给服务方,由服务方将服务代理发送给CLS,再由CLS将服务代理发送给特定的查找服务完成注册。如果在本网段内没有搜索到合适的查找服务,则由CLS将服务的注册信息发送到其他网段的CLS,然后重复执行上面的操作。

客户请求时,公共查找服务(CLS)先在已保存的曾经请求过的服务中查找,有则直接返回服务代理给客户,否则再在本网段的各分组查找服务上查找,由于服务是按功能有选择性地在相应的查找服务上注册的,CLS可根据客户请求信息在本网段内的相关查找服务中搜索服务,如客户请求一个打印服务,CLS要先在办

公类的查找服务中搜索。如搜索成功,相应的查找服务直接将服务代理发送给客户,如搜索不成功,可在本网段通过广播发现协议在所有的查找服务中搜索。在本网段搜索不成功,通过各网段间的CLS传递客户请求信息继续在其他网段搜索。

服务租约失效时,公共查找服务可以将某一服务不再有效的信息传递给其他网段的公共查找服务,以保持服务的有效性和动态性。

3 结 语

部署了公共查找服务后,服务和客户都要把相应的服务注册和请求信息提交给了该网段的公共查找服务,该公共查找服务虽不能直接接受服务的注册或满足客户请求需要,但其保存有曾经访问过的查找服务和请求过的服务的信息,有助于减少响应时间,提高系统效率。在本文的这种部署方案中,广播发现协议只在同一网段内使用,不同网段的公共查找服务间交流服务注册和请求信息时使用单播发现协议(因为公共查找服务的位置固定),这样可有效避免广播风暴。

参考文献

[1]封玮,范宝德.Jini分布式软件服务研究与实现[J].软件时空,2006,12(3):231-233.

[2]朱永华,沈文枫,徐炜民,等.基于Jini的集群网络并行计算平台的构建[J].计算机应用与软件,2006,23(11):60-62.

[3]蒋建文,王煦法,黄国锐,等.一种基于Jini构建的多数据库系统研究[J].计算机工程,2006,32(9):54-56.

[4]王倩,肖德宝.基于Jini分布式网络的自管理[J].西北大学学报:自然科学版,2004,34(5):146-149.

[5]刘德元,陈辉堂.Jini应用研究[J].计算机应用与软件,2004,21(8):72-74.

[6]邓冬梅,刘宏.在信息家电中启用Jini技术的方案研究[J].科技论坛,2005(21):15-16.

[7]胡光,陈青.基于Jini的查找服务实现[J].计算机应用研究,2005,23(4):229-230.

[8]Keith Edwards.Jini核心技术[M].王召福,任鸿,刘作伟,译.北京:机械工业出版社,2005.

[9]段跃兴.在Jini中发现查找服务的方法与服务运行[J].太原理工大学学报,2004,35(3):341-343.

[10]Jini Technology Community Resource.http://www.jini.org/.2008.

作者简介 李中林 1986年出生,安徽六安人,硕士研究生。研究方向为网络与信息系统。