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