李中林 李 輝 張 軍 曾麗君
摘 要:在Jini體系中,服務(wù)需要通過查找服務(wù)進(jìn)行注冊,客戶通過查找服務(wù)發(fā)現(xiàn)感興趣的服務(wù)。服務(wù)和客戶可通過單播發(fā)現(xiàn)協(xié)議或廣播發(fā)現(xiàn)協(xié)議來定位查找服務(wù),單播發(fā)現(xiàn)協(xié)議在已知查找服務(wù)地址的情況下適用,否則需要使用廣播發(fā)現(xiàn)協(xié)議。為了充分發(fā)揮Jini技術(shù)優(yōu)勢,提高系統(tǒng)效率和避免因采用廣播發(fā)現(xiàn)機(jī)制而帶來的“廣播風(fēng)暴”,通過設(shè)立公共查找服務(wù),提出一種簡便可行查找服務(wù)部署方案。
關(guān)鍵詞:Jini;查找服務(wù);廣播發(fā)現(xiàn);單播發(fā)現(xiàn)
中圖分類號:TP393.01 文獻(xiàn)標(biāo)識碼: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公司發(fā)布的一種基于Java的全新的面向動(dòng)態(tài)分布式計(jì)算的解決方案,是一種與協(xié)議、位置以及實(shí)現(xiàn)技術(shù)均無關(guān)的自診斷、自配置的服務(wù)網(wǎng)絡(luò)體系結(jié)構(gòu)[1-3]。Jini的設(shè)想十分簡單:所有支持Jini的設(shè)備,可以是數(shù)字相機(jī)、打印機(jī)、PDA或者蜂窩式電話,只要插入到TCP/IP網(wǎng)絡(luò)中,就可以自動(dòng)發(fā)現(xiàn)并使用附近其它支持Jini的設(shè)備。把一個(gè)新設(shè)備添加到“網(wǎng)絡(luò)群體”中,只需要將其插接到網(wǎng)絡(luò)。Jini利用Java 平臺,屏蔽機(jī)器平臺和操作系統(tǒng)的異構(gòu)性,將軟硬件和應(yīng)用程序等都抽象為服務(wù),其核心要素就是服務(wù)、查找服務(wù)和客戶。如圖1所示,對于服務(wù)和客戶而言,初始化工作都是定位查找服務(wù):服務(wù)尋找查找服務(wù)并注冊自己,客戶通過查找服務(wù)搜索所需服務(wù),具體工作過程可參考文獻(xiàn)。如果查找服務(wù)的位置是已知的,服務(wù)和客戶就可以使用單播發(fā)現(xiàn)協(xié)議直接與之聯(lián)系;如果位置不確定,服務(wù)和客戶需要先廣播UDP請求,查找服務(wù)將響應(yīng)此請求。
在實(shí)際應(yīng)用中,對于新接入網(wǎng)絡(luò)的設(shè)備而言,網(wǎng)絡(luò)環(huán)境是“陌生的”,設(shè)備(客戶)可能不知道查找服務(wù)的準(zhǔn)確位置,其理想方法就是通過廣播發(fā)現(xiàn)機(jī)制來定位查找服務(wù)。但是從網(wǎng)絡(luò)需求的角度看廣播的代價(jià)是很昂貴的,廣播消息可能會被大多數(shù)路由器阻塞掉,這樣廣播就被限制在一個(gè)局域網(wǎng)中。此外,在現(xiàn)有Jini機(jī)制中,如果一個(gè)網(wǎng)段內(nèi)有多個(gè)服務(wù)需要注冊到其他網(wǎng)段的查找服務(wù)上,需要每個(gè)服務(wù)都要執(zhí)行發(fā)現(xiàn)協(xié)議發(fā)現(xiàn)查找服務(wù),下載服務(wù)代理,然后注冊服務(wù)。對于客戶在請求服務(wù)時(shí)同樣如此,這樣就沒有很好利用已有的服務(wù)注冊和請求信息。
本文主要提出一種查找服務(wù)的部署方案,改變服務(wù)注冊與客戶請求服務(wù)的方式,來盡量避免網(wǎng)絡(luò)中“廣播風(fēng)暴”以及減少服務(wù)注冊和請求的響應(yīng)時(shí)間。
1 單播發(fā)現(xiàn)和廣播發(fā)現(xiàn)[7]
1.1 單播發(fā)現(xiàn)
如果已經(jīng)知道查找服務(wù)所在的位置,就可以利用單播方式發(fā)現(xiàn)查找服務(wù),并直接向該地址請求查找服務(wù)。如果一個(gè)查找服務(wù)不在局域網(wǎng)范圍內(nèi),但是可以通過某種方式知道其網(wǎng)絡(luò)地址,例如家用網(wǎng)絡(luò)、工作單位的網(wǎng)絡(luò),或者是新聞組、電子郵件消息中所指出的網(wǎng)絡(luò),甚至也可能是電視中廣告的網(wǎng)絡(luò)等,那么這種發(fā)現(xiàn)方式是很適用的。
使用單播協(xié)議只需要一個(gè)LookupLocator類,它存在于net.jini.core.discovery包中,有兩種構(gòu)造函數(shù):
Package net.jini.core.discovery;
Public class LookupLocator {
LookupLocator(java.lang.string URL) throws java.net.MalformedURLException;
LookupLocator(java.lang.string host,int port);
}
在第一個(gè)構(gòu)造函數(shù)中,URL必須是“jini://host/”或者“jini://host:port/”。其中host是一個(gè)有效的域名地址或IP地址,port若無指定則為缺省值4 160。在LookupLocator類構(gòu)造時(shí),并沒有執(zhí)行實(shí)際的查找。以第一種方式構(gòu)造類時(shí),只是對URL從句法形式上做了檢測,而在第二種構(gòu)造方式中則連句法檢測也沒有執(zhí)行。
1.2 廣播發(fā)現(xiàn)
UDP支持Jini的廣播發(fā)現(xiàn)機(jī)制,但是廣播對于網(wǎng)絡(luò)來說是非常昂貴的,并且許多路由器會阻塞廣播數(shù)據(jù)包,因此通常將廣播限制在局域網(wǎng)內(nèi),具體則取決于網(wǎng)絡(luò)配置和廣播數(shù)據(jù)包的生存周期。
廣播發(fā)現(xiàn)機(jī)制需要使用三種對象:LookupDiscovery類、DiscoveryListener接口和DiscoveryEvent對象。LookupDiscovery類存在于net.jini.package包中,有兩種構(gòu)造函數(shù):
LookupDiscovery(java.lang.string[] groups);
LookupDiscovery(java.lang.string[] groups,Configuration config);
當(dāng)groups參數(shù)為NULL或LookupDiscovery.ALL_GROUPS時(shí),表示需要發(fā)現(xiàn)所有能夠達(dá)到的查找服務(wù),而不管它屬于哪個(gè)特定的組;當(dāng)為空列表或LookupDiscovery.NO_GROUPS時(shí),則不執(zhí)行任何查找,構(gòu)造之后可以調(diào)用setGroups方法來執(zhí)行查找;若用一個(gè)非空的groups列表作參數(shù)時(shí),表明需要在這些特定組中發(fā)現(xiàn)所有的查找服務(wù)。
由于查找服務(wù)會對廣播進(jìn)行響應(yīng),并且通常也不知道具體有多少個(gè)查找服務(wù)會做出響應(yīng),為了能夠在查找服務(wù)被發(fā)現(xiàn)時(shí)及時(shí)通告,需要注冊一個(gè)Lisenter并添加給LookupDiscovery對象,這個(gè)Listener必須實(shí)現(xiàn)DiscoveryListener接口。
Public void addDiscoveryListener(DiscoveryListener listen);
Package net.jini.discovery;
Public abstract interface DiscoveryListener
{
Public void discovered(DiscoveryEvent e);
Public void discarded(DiscoveryEvent e);
}
當(dāng)查找服務(wù)被發(fā)現(xiàn)時(shí),discovered方法被調(diào)用;當(dāng)應(yīng)用程序需要丟棄查找服務(wù)時(shí)discarded方法被調(diào)用,它通過在registrar對象上執(zhí)行discard方法來撤銷查找服務(wù)。
2 查找服務(wù)部署方案
2.1 部署方案
在實(shí)際組網(wǎng)過程中,為了充分發(fā)揮Jini自身的優(yōu)勢和避免因采用廣播發(fā)現(xiàn)機(jī)制而帶來的“廣播風(fēng)暴”,文獻(xiàn)[8]提出兩種方法:第一種是在每個(gè)網(wǎng)段都運(yùn)行同一查找服務(wù);第二種方法是使用組播隧道技術(shù),通過創(chuàng)建一個(gè)加入組播組的程序,把接收到的所有消息都轉(zhuǎn)發(fā)到另一網(wǎng)段中某主機(jī),同時(shí)它還從一個(gè)標(biāo)準(zhǔn)套接字讀取數(shù)據(jù),把接收的消息中繼到組播套接字。第一種方法意味著只有同一網(wǎng)段的服務(wù)可彼此找到,除非是為每個(gè)查找服務(wù)提供其對等體的名稱,使用單播發(fā)現(xiàn)使它們相互加入,從而組成聯(lián)邦。第二種方法需要在所有網(wǎng)段中分別運(yùn)行外部程序,才能實(shí)現(xiàn)不同網(wǎng)段中使用同一地址的組播數(shù)據(jù)之間的聯(lián)系。
本文采用的改進(jìn)方法是:利用單播與廣播相結(jié)合的方式,通過設(shè)置公共查找服務(wù)以期獲得最大的服務(wù)查找效率。具體做法如下:
(1) 合理分組:針對一組特定的服務(wù)設(shè)置專門的查找服務(wù)
例如,針對個(gè)人客戶而言,可以部署一個(gè)辦公類查找服務(wù):主要接受辦公電腦(可以充當(dāng)服務(wù)發(fā)布的代理)、打印機(jī)、掃描儀等設(shè)備所提供的服務(wù)的注冊;部署一個(gè)家電類查找服務(wù):主要接受個(gè)人電腦(可以充當(dāng)服務(wù)發(fā)布的代理)、空調(diào)、電視、冰箱等設(shè)備所提供的服務(wù)的代理。
一旦查找服務(wù)啟動(dòng),可以向它提供一個(gè)組列表作為其命令行參數(shù)。服務(wù)通過指定其所屬的組列表,即可包括這種組信息。這是一個(gè)字符串?dāng)?shù)組,如:
import net.jini.jrmp.JrmpExporter;
com.sun.jini.reggie {
serverExporter = new JrmpExporter();
initialMemberGroups = new String[] { "OfficeLookupService" };
}
(2) 設(shè)置公共查找服務(wù):在每一網(wǎng)段的固定位置(例如網(wǎng)關(guān))設(shè)置查找服務(wù)
此處查找服務(wù)接受本網(wǎng)段內(nèi)所有服務(wù)的注冊信息和客戶的請求信息,并且也擔(dān)當(dāng)起安全管理的第一道防線,即檢查所注冊的服務(wù)是否實(shí)現(xiàn)了服務(wù)規(guī)范中所定義的接口。為了方便起見,將此處查找服務(wù)定義為公共查找服務(wù)(Commonality Lookup Service,CLS)。
(3) 實(shí)時(shí)傳遞信息:在各網(wǎng)段內(nèi)公共查找服務(wù)之間傳遞服務(wù)的注冊信息和客戶的查詢請求,以提高服務(wù)查找的成功率。
2.2 服務(wù)注冊和客戶請求過程
那么經(jīng)改進(jìn)后,服務(wù)注冊和客戶請求的過程如圖2所示。
服務(wù)注冊時(shí),服務(wù)方將自己所提供服務(wù)的信息提交到本網(wǎng)段的CLS上,CLS首先對所注冊的服務(wù)進(jìn)行安全性檢查,確保所注冊的是真正的服務(wù)而不是惡意代碼。若通過檢查,CLS在本網(wǎng)段內(nèi)通過廣播發(fā)現(xiàn)來搜索是否有符合條件的查找服務(wù)。如果有,CLS將發(fā)送確認(rèn)信息給服務(wù)方,由服務(wù)方將服務(wù)代理發(fā)送給CLS,再由CLS將服務(wù)代理發(fā)送給特定的查找服務(wù)完成注冊。如果在本網(wǎng)段內(nèi)沒有搜索到合適的查找服務(wù),則由CLS將服務(wù)的注冊信息發(fā)送到其他網(wǎng)段的CLS,然后重復(fù)執(zhí)行上面的操作。
客戶請求時(shí),公共查找服務(wù)(CLS)先在已保存的曾經(jīng)請求過的服務(wù)中查找,有則直接返回服務(wù)代理給客戶,否則再在本網(wǎng)段的各分組查找服務(wù)上查找,由于服務(wù)是按功能有選擇性地在相應(yīng)的查找服務(wù)上注冊的,CLS可根據(jù)客戶請求信息在本網(wǎng)段內(nèi)的相關(guān)查找服務(wù)中搜索服務(wù),如客戶請求一個(gè)打印服務(wù),CLS要先在辦
公類的查找服務(wù)中搜索。如搜索成功,相應(yīng)的查找服務(wù)直接將服務(wù)代理發(fā)送給客戶,如搜索不成功,可在本網(wǎng)段通過廣播發(fā)現(xiàn)協(xié)議在所有的查找服務(wù)中搜索。在本網(wǎng)段搜索不成功,通過各網(wǎng)段間的CLS傳遞客戶請求信息繼續(xù)在其他網(wǎng)段搜索。
服務(wù)租約失效時(shí),公共查找服務(wù)可以將某一服務(wù)不再有效的信息傳遞給其他網(wǎng)段的公共查找服務(wù),以保持服務(wù)的有效性和動(dòng)態(tài)性。
3 結(jié) 語
部署了公共查找服務(wù)后,服務(wù)和客戶都要把相應(yīng)的服務(wù)注冊和請求信息提交給了該網(wǎng)段的公共查找服務(wù),該公共查找服務(wù)雖不能直接接受服務(wù)的注冊或滿足客戶請求需要,但其保存有曾經(jīng)訪問過的查找服務(wù)和請求過的服務(wù)的信息,有助于減少響應(yīng)時(shí)間,提高系統(tǒng)效率。在本文的這種部署方案中,廣播發(fā)現(xiàn)協(xié)議只在同一網(wǎng)段內(nèi)使用,不同網(wǎng)段的公共查找服務(wù)間交流服務(wù)注冊和請求信息時(shí)使用單播發(fā)現(xiàn)協(xié)議(因?yàn)楣膊檎曳?wù)的位置固定),這樣可有效避免廣播風(fēng)暴。
參考文獻(xiàn)
[1]封瑋,范寶德.Jini分布式軟件服務(wù)研究與實(shí)現(xiàn)[J].軟件時(shí)空,2006,12(3):231-233.
[2]朱永華,沈文楓,徐煒民,等.基于Jini的集群網(wǎng)絡(luò)并行計(jì)算平臺的構(gòu)建[J].計(jì)算機(jī)應(yīng)用與軟件,2006,23(11):60-62.
[3]蔣建文,王煦法,黃國銳,等.一種基于Jini構(gòu)建的多數(shù)據(jù)庫系統(tǒng)研究[J].計(jì)算機(jī)工程,2006,32(9):54-56.
[4]王倩,肖德寶.基于Jini分布式網(wǎng)絡(luò)的自管理[J].西北大學(xué)學(xué)報(bào):自然科學(xué)版,2004,34(5):146-149.
[5]劉德元,陳輝堂.Jini應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用與軟件,2004,21(8):72-74.
[6]鄧冬梅,劉宏.在信息家電中啟用Jini技術(shù)的方案研究[J].科技論壇,2005(21):15-16.
[7]胡光,陳青.基于Jini的查找服務(wù)實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2005,23(4):229-230.
[8]Keith Edwards.Jini核心技術(shù)[M].王召福,任鴻,劉作偉,譯.北京:機(jī)械工業(yè)出版社,2005.
[9]段躍興.在Jini中發(fā)現(xiàn)查找服務(wù)的方法與服務(wù)運(yùn)行[J].太原理工大學(xué)學(xué)報(bào),2004,35(3):341-343.
[10]Jini Technology Community Resource.http://www.jini.org/.2008.
作者簡介 李中林 1986年出生,安徽六安人,碩士研究生。研究方向?yàn)榫W(wǎng)絡(luò)與信息系統(tǒng)。