ARIADNE USER GUIDE
Authors: Rafik CHIBOUT, Françoise SAILHAN, Valérie ISSARNY
{rafik.chibout, francoise.sailhan, valerie.issarny}@inria.fr
Table of contents
I Introduction.............................................................................................................................................................................. 2
II Ariadne functioning................................................................................................................................................................. 2
III Installing Ariadne................................................................................................................................................................ 2
IV Using Ariadne...................................................................................................................................................................... 4
IV.1 Setting file.................................................................................................................................................................... 4
IV.2 Starting Ariadne.......................................................................................................................................................... 7
IV.3 Registering a service.................................................................................................................................................. 7
IV.4 Unregistering a Service.............................................................................................................................................. 8
IV.5 Finding a service......................................................................................................................................................... 9
IV.6 QoS Management in Ariadne.................................................................................................................................. 11
IV.6.1 QoS Parameters..................................................................................................................................................... 11
IV.6.2 Customization........................................................................................................................................................ 12
V Comparison between service discovery protocols........................................................................................................... 12
VI Appendix............................................................................................................................................................................. 14
VII References........................................................................................................................................................................... 18
List of Figures
1. Packages structure of Ariadne release.................................................................................................................................. 3
2. The Ariadne default setting file............................................................................................................................................. 5
3. Getting an instance of Ariadne.............................................................................................................................................. 7
4. Example of the Ariadne starting with instantiation............................................................................................................. 7
5. The register function............................................................................................................................................................... 8
6. The unregister function........................................................................................................................................................... 9
7. GetServiceData Class............................................................................................................................................................... 9
8. Finding a service.................................................................................................................................................................... 10
9. QoS parameters XML Schema.............................................................................................................................................. 11
10. Example of QoS parameters.............................................................................................................................................. 12
11. Example of finding service customizers.......................................................................................................................... 12
12. Comparison between service discovery protocols....................................................................................................... 13
Mobile Ad hoc NETworks (MANETs) enable spontaneous connectivity between wireless devices, which can share their services, without requiring any particular infrastructure. In addition, ad hoc routing protocols increase connectivity by offering multi-hop communication. However, distributed service provision over MANETs requires adequate support of service discovery and invocation, due to the network’s dynamics and the resource constraints of wireless devices. Some service discovery protocols for MANETs have been proposed, but they are mainly aimed at small-scale MANETs. We thus developed Ariadne [1], which is a scalable protocol for MANETs, based on the homogeneous and dynamic deployment of cooperating directories within the network. The scalability of Ariadne is made possible by minimizing the amount generated traffic and using of compact directory summaries. These summaries enable the directory that most likely caches the description of a given service, to be efficiently located. Ariadne is based on the Web Services architecture to provide interoperability among mobile devices. Specifically, we use WSDL (Web Service Description Language) [2] for service description and SOAP (Simple Object Access Protocol) [3] for service invocation. However, we enrich WSDL to allow an open specification of Quality of Service (QoS) parameters. Ariadne can operate on any IP network over 1-hop communication or multi-hop communication. To allow multi-hop communication Ariadne needs to run over an ad hoc routing protocol (e.g. OLSR, available at http://hipercom.inria.fr/olsr/).
Ariadne subdivides into two components: (i) Directories that are dynamically deployed on the network, and (ii) Service Discovery component (SD) that are deployed on all the nodes. The Directory caches the descriptions of networked services that have been discovered. The SD looks for directory instances in the vicinity of the local node and provides an interface that allows registering/unregistering services and searching services. When the SD receives register/unregister or search service requests, it forwards them to all the directories in its vicinity.
Each node in the network must run at least the SD component. The directory part can be deployed on some nodes in two ways: (i) by election, or, (ii) by forcing the deployment on the local node in the setting file (see Section IV.1).
The election process consists of choosing one or more nodes that can become directories. The election starts by broadcasting an election request from an SD without any directories in its vicinity, to all the other SD in its vicinity. An SD receiving the election request can either refuse or accept to act as a directory, depending on its capacity. When an SD is willing to act as a directory, it sends back an acceptance message, which contains its capacity (CPU, Memory, Disc, etc) and its connectivity (number of neighbors, number of neighbor directories, etc). Finally, the SD that initiated the election chooses one or more nodes to become directories based on received replies and sends them a notification message. The SD that receives a notification message deploys the directory component on the local node. The main selection criteria for directory hosts is the node coverage, i.e., the node that has the highest number of neighbor nodes and the smallest number of directories in its vicinity is chosen.
Each directory advertises its presence every T time unit. These advertisements are received by the SDs and the Directories in the vicinity. If an SD doesn’t receive any directory advertisements after αxT time (α is a constant), it initiates the election process. All the directories exchange the summary of their cached services. These summaries are used by the directory to know which directory caches a WSDL description of a given service when it doesn’t locally cache the service itself. In Ariadne, the directory summaries are generated with a bloom filter implementation from http://tiger.towson.edu/users/dknopp1.
The latest version of Ariadne can be found at http://www-rocq.inria.fr/arles/download/ariadne. Download the ariadne-{version}.tar file and uncompress it into a temporary folder. You get the following file (Figure 1):
+---+ configuration |---------------setting.xml +---+ ariadne |---------------ariadne.jar |---------------SDService.jar +---+ lib |---------------wsdl4j.jar; xmlParserAPIs.jar |---------------jaxrpc-api.jar; +---+ bin |---------------startup.sh |---------------shutdown.sh +---+ deployment |---------------axis | |-------deploy.wsdd | |-------undeploy.wsdd |---------------csoap | |-------deploy.wsdd | |-------undeploy.wsdd +---+ wsdl |---------------SDInterface.wsdl |---------------SDConcrete.wsdl +---+.src +---+ doc
|
1. Packages structure of Ariadne release
- configuration/setting.xml is an XML file used to configure Ariadne.
- ariadne/ariadne.jar contains the Ariadne release classes.
- ariadne/SDService.jar contains the SD component classes.
- lib/ contains the libraries needed by Ariadne.
- bin/ contains the scripts to start up and shut down Ariadne.
- deployment/axis/deploy.wsdd (undeploy.wsdd) is the deployment (undeployment) script of Ariadne on Apache Axis[1].
- deployment/csoap/deploy.wsdd (undeploy.wsdd) is the deployment (undeployment) script of Ariadne on CSoap[2].
- wsdl/SDInterface.wsdl is the WSDL description of Ariadne interface.
- wsdl/SDConcrete.wsdl is the concrete definition of Ariadne interface.
- src/ contains the Java source code of the Ariadne.
- doc/ contains this document.
Ariadne can be installed in two ways: (1) as a Web Service deployed on a SOAP container or (2) as a local part of the application that uses it. To install Ariadne as a Web Service, you have to install a Servlet container, we suggest you use Jakarta Tomcat (see http://jakarta.apache.org/tomcat/index.html for more detail); and a SOAP container, we suggest Axis or CSoap.
- Installing Ariadne as a Web Service:
The Ariadne release provides the deployment files of Ariadne as a Web Service on Axis (deployment/axis/deploy.wsdd), and on CSoap (deployment/csoap/deploy.wsdd). It also provides the Binding files in the ariadne.jar, which are named SOAPBindingAxis.class for Axis and SOAPBindingCSoap.class for CSoap. If you want to use another SOAP container you have to write an appropriate deployment file and generate an appropriate Binding file from the provided SDInterface.wsdl and SDConcrete.wsdl files.
There are 4 steps to deploy Ariadne as a Web Service:
1/ copy the ariadne.jar and SDService.jar file into the shared folder of the Servlet container.
2/ copy the configuration folder into the default folder used by ariadne.jar under the Servlet container.
3/ copy the content of the lib folder into the shared folder of the Servlet container.
4/ use the wsdd deployment file appropriate to the SOAP container to deploy the Ariadne interface.
In this case, you only have to add the ariadne.jar and SDService.jar files and the content of the lib folder to the current CLASSPATH and copy the configuration folder into the default folder used by ariadne.jar.
Using Ariadne is the same for both types of installation. There is only a small difference in starting Ariadne, which will be explained in Section IV.2.
To be able to use Ariadne you have to know: the Ariadne setting file and the SD interface (its WSDL description is given in the annex). The setting file will be described in the next section. How to use the SD interface is explained in several sections according to the functionality provided (start, register service, unregister service, and find service, customization and QoS in the QoS management Section).
The Ariadne setting file is named setting.xml. You can find it in the configuration folder and you must put it into the current folder used by Ariadne. The setting file contains a set of XML targets and their values, which are responsible for the proper functioning of Ariadne. To describe the XML targets we will show and explain the default configuration of the setting file (see Figure 2). Only experienced users should modify this default configuration according to their network topology and connectivity.
<?xml version="1.0" ?> <ServiceDiscovery> - <!-- Directory deployment values auto, false, true --> -<!-- auto : With election process if any --> - <!-- false : never elected as directory --> - <!-- true : always elected as directory --> <DirectoryDeployment>auto</DirectoryDeployment> <MinPerformance>0.5</MinPerformance> <HopsNumber>1</HopsNumber> <MaxDirectoryRequested>5</MaxDirectoryRequested> <GetServiceRequestHops>2</GetServiceRequestHops> <PortNumber>9999</PortNumber> <BloomFilter> - <!-- activation values : true , false --> <activation>true</activation> <size>2800</size> <hashFunctionNumber>4</hashFunctionNumber> </BloomFilter> <Cache> - <!-- activation values : true , false --> <activation>true</activation> <size>100</size> </Cache> - <!-- ProfilePort value must be different of PortNumber value defined above --> <ProfilePort>5555</ProfilePort> <QoS> - <!-- activation values : true , false --> <activation>true</activation> </QoS> <TimingValues> <SD> <LISTENING_PERIOD_VALUE>5</LISTENING_PERIOD_VALUE> <ADVERTISEMENT_PERIOD_VALUE>5000</ADVERTISEMENT_PERIOD_VALUE> <ELECTION_WAITING_RESPONSE_TIME_VALUE>6000</ELECTION_WAITING_RESPONSE_TIME_VALUE> <WAITING_GET_SERVICE_RESPONSE_MIN_VALUE>50</WAITING_GET_SERVICE_RESPONSE_MIN_VALUE> <WAITING_GET_SERVICE_RESPONSE_MAX_VALUE>20000</WAITING_GET_SERVICE_RESPONSE_MAX_VALUE> <CHECKING_PERFORMANCE_PERIOD>60000</CHECKING_PERFORMANCE_PERIOD> </SD> <Election> <ELECTION_HOPS_VALUE>1</ELECTION_HOPS_VALUE> <LISTENING_PERIOD_VALUE>5</LISTENING_PERIOD_VALUE> <ADVERTISEMENT_PERIOD_VALUE>5000</ADVERTISEMENT_PERIOD_VALUE> <ELECTION_WAITING_RESPONSE_TIME_VALUE>6000</ELECTION_WAITING_RESPONSE_TIME_VALUE> </Election> <Directory> <LISTENING_PERIOD_VALUE>5</LISTENING_PERIOD_VALUE> <ADVERTISEMENT_PERIOD_VALUE>5000</ADVERTISEMENT_PERIOD_VALUE> <ADVERTISEMENT_HOPS_VALUE>2</ADVERTISEMENT_HOPS_VALUE> <SUMMARIE_EXCHANGE_PERIOD_VALUE>20000</SUMMARIE_EXCHANGE_PERIOD_VALUE> <WAITING_GET_SERVICE_RESPONSE_MIN_VALUE>50</WAITING_GET_SERVICE_RESPONSE_MIN_VALUE> <WAITING_GET_SERVICE_RESPONSE_MAX_VALUE>10000</WAITING_GET_SERVICE_RESPONSE_MAX_VALUE> <INITIAL_TTL_VALUE>30000</INITIAL_TTL_VALUE> <TTL_UPDATING_VALUE>3000</TTL_UPDATING_VALUE> </Directory> </TimingValues> </ServiceDiscovery>
|
2. The Ariadne default setting file
- DirectoryDeployment: takes three values: auto, false and true.
auto: Ariadne deploys a directory on the local node if and only if an elect message is received.
false: Ariadne will never deploy a directory in the local node and reply with a refuse message for all election requests received.
true: Ariadne deploys a directory on the local node even when it starts up, independently of the directories deployed in its vicinity.
- MinPerformance: takes a numeric value between 0 and 1. This value is the percentage of the node’s capacity. If the current capacity of the local node is less than the MinPerformance value the Ariadne can replies with a refuse message to the election requests, if not, it can send its candidature.
- HopsNumber: is the number of hops over which the node searches for its neighbor nodes. This value must be higher than, or equal to 1, and should be as small as possible, in order to avoid flooding the network.
- MaxDirectoryRequested: is the maximum number of the directories that the SD may request when it searches for a service.
- GetServiceRequestHops: is the maximum number of hops that a search message can make between the directories.
- PortNumber: defines the port number that is used to send and receive all Ariadne messages except the control messages which are used to calculate the number of the neighbor nodes.
- BloomFilter: contains three sub-targets: activation, size and hashFunctionNumber
- Activation: takes two values: true or false. The true value activates the generation of the service summary and their exchange with the other directories, and the false value deactivates it.
- Size: is the size of the array that contains the services’ summaries. See [1] for more details.
- HashFunctionNumber: is the number of the values given by the hash function. See [1] for more details.
- Cache: contains two sub-targets: activation and size that concern the cache. The cache is an array where the service descriptions found in the remote directories are temporarily stored. The cache may be used to answer other search requests.
- Activation: takes two values: true or false. The true value activates the cache use and the false value deactivates it. To increase the Ariadne performances we suggest you activate the cache.
- Size: is the size of the cache array.
- ProfilePort: defines the port number that is used to send and receive the control messages, which are used to calculate the number of the neighbor nodes. The ProfilePort number must be different from the PortNumber value defined above.
- QoS: contains one target: activation
- Activation: takes two values: true or false, that specify respectively whether Ariadne takes care of the quality of service or not. See section IV.6.1 for more details.
This target contains the list of the waiting times and the frequency advertisement times of the SD, the Directory, and the election process. The default values of the waiting times are defined according to a MANET formed by five laptops, which have CPU: Intel PII 800MHz, RAM: 192Mo and wireless card: Lucent WaveLAN PC Card 11Mb/s.
- LISTENING_PERIOD_VALUE: is the period of time for the SD to take the received messages from the message stack.
- ADVERTISEMENT_PERIOD_VALUE: is the frequency time of the directory advertisement.
- ELECTION_WAITING_RESPONSE_TIME_VALUE: is the time that the SD must wait when the election is processing. This time will be multiplied by the number of hops.
- WAITING_GET_SERVICE_RESPONSE_MIN_VALUE: when the SD sends a search service message, it looks for the reply message every WAITING_GET_SERVICE_RESPONSE_MIN_VALUE time.
- WAITING_GET_SERVICE_RESPONSE_MAX_VALUE: if the SD doesn’t receive a response message for a search service message after the WAITING_GET_SERVICE_RESPONSE_MAX_VALUE, it returns an empty result.
- CHECKING_PERFORMANCE_PERIOD: is the frequency time for checking performance value of the local node.
- ELECTION_HOPS_VALUE: is the number of hops over which an election message is sent.
- LISTENING_PERIOD_VALUE: is the period of time for the election process to take the received messages from the message stack.
- ADVERTISEMENT_PERIOD_VALUE: is the frequency time of the directory advertisement.
- ELECTION_WAITING_RESPONSE_TIME_VALUE: is the time that the Election process must wait to receive the election response messages. This time will be multiplied by the number of hops.
- LISTENING_PERIOD_VALUE: is the period of time for the Directory to take the received messages from the messages stack.
- ADVERTISEMENT_PERIOD_VALUE: is the period of time for the directory to advertise its presence.
- ADVERTISEMENT_HOPS_VALUE: is the number of hops over which the directory sends its advertisements
- SUMMARIE_EXCHANGE_PERIOD_VALUE: is the period of time for the directory to send its services’ summary to the other directories, if its summary has been changed.
- WAITING_GET_SERVICE_RESPONSE_MIN_VALUE: when the Directory sends a search service message to the other directories, it looks for the reply message every WAITING_GET_SERVICE_RESPONSE_MIN_VALUE time.
- WAITING_GET_SERVICE_RESPONSE_MAX_VALUE: if the Directory doesn’t receive a response message for a search service message after the WAITING_GET_SERVICE_RESPONSE_MAX_VALUE, it returns an empty result.
- INITIAL_TTL_VALUE: is the initial living time for a received directory advertisement.
- TTL_UPDATING_VALUE: is the period of time for the directory to update the TTL of other directory advertisements. Then the directory removes them when their TTL is equal to zero.
If Ariadne is deployed as a Web Service you can use the bin/startup.sh provided in the release to start Ariadne and bin/shutdown.sh to stop it. In your application you can obtain an instance of the Ariadne by using the Binding classes as shown in the following example (Figure 3).
java.net.URL localSDURL = new java.net.URL("http://localhost:8080/service/SD"); SDService.SDPortType sd = new SDService.SDBindingStub(localSDURL,null);
|
3. Getting an instance of Ariadne
In the other case, to start Ariadne, you have to create an instance of the servicediscovery.SD.class in your application and you invoke the start() method to start Ariadne. The isStarted() method of the servicediscovery.SD.class returns true when Ariadne is ready to use and returns false otherwise. The following is an example of the Ariadne starting with instantiation (Figure 4).
Import SDService.SDImpl; ……. Public class myApplication { ….
SDService.SDPortType sd = new SDImpl(); Sd.start(); While (!sd.isStarted()) {} // Ariadne is ready to use …. } |
4. Example of the Ariadne starting with instantiation
As described above, Ariadne main role is to allow service providers to advertise their services and to allow clients to find them. The service advertisement is enabled by the register function given by the SD. The register function has four parameters: the WSDL description of the service, the endpoint of the service URL, the WSDL description of the local customizer, the WSDL description of the remote customizer. In this section we will show only the use of the first and second parameters, the customizers parameters will be described in Section IV.6.2.
The following (Figure 5) is an example of the register function:
// SD starting : see the starting section
// Part 1 // get the wsdl description from the wsdl file String wsdlFilePath = "/servicesproviders/services/wsdl/MyServiceInterface.wsdl" ; String wsdlDescription = "";
Try { java.io.FileInputStream wsdlFile = new java.io.FileInputStream(wsdlFilePath); while (wsdlFile.available() >0) { byte[] data = new byte[wsdlFile.available()]; wsdlFile.read(data); wsdlDescription = wsdlDescription+(new String(data)); } } catch(FileNotFoundException ex) { System.out.println(wsdlFilePath+" file not found") ; } catch(IOException ex) { System.out.println(wsdlFilePath+" file I/O Error") ; }
// Part 2 // create the EndPoint URL
String hostAddress = "128.10.10.10" ; // the address of the host where the service is deployed String port = "8080" ; String servicesContext = "services" String serviceName = "myService" ;
String EndPointURL = "http://"+hostAddress+" :"+port+"/"+servicesContext+"/"+serviceName; // EndPointURL = http://128.10.10.10:8080/services/myService;
// Part 3 // now you can register the service sd.register (wsdlDescription, EndPointURL, "", "");
|
There are 3 parts in the above example:
Part1: we obtain the WSDL description from the file, and put it into a string.
Part2: we create the EndPoint URL from the set of information (host address, port number, service context and service name). The host address is the address of the host where the service is deployed. In this case, the host has the address 128.10.10.10 and the service’s name is myService which is deployed in the services context.
Part3: we call the register function and give it the WSDL description of the service and its EndPoint URL.
A service is unregistered by unregister function given by the SD. This function has two parameters : the WSDL description of the service to remove and its EndPoint URL. When the unregister function is invoked the service is removed from all the directories. Figure 6 shows an example of the unregistering of the service that was registered in the previous section (Figure 5).
// get the wsdl description from the wsdl file String wsdlFilePath = "/servicesproviders/services/wsdl/MyServiceInterface.wsdl" ; String wsdlDescription = "";
Try { java.io.FileInputStream wsdlFile = new java.io.FileInputStream(wsdlFilePath); while (wsdlFile.available() >0) { byte[] data = new byte[wsdlFile.available()]; wsdlFile.read(data); wsdlDescription = wsdlDescription+(new String(data)); } } catch(FileNotFoundException ex) { System.out.println(wsdlFilePath+" file not found") ; } catch(IOException ex) { System.out.println(wsdlFilePath+" file I/O Error") ; }
EndPointURL = "http://128.10.10.10:8080/services/myService";
// call unregister function sd.unregister (wsdlDescription, EndPointURL);
|
Ariadne aims to provide clients with an efficient means to find services, by optimizing the response time, the network flooding and finding the services that match the clients’ specifications. To find a service you have to give Ariadne a full WSDL description or a partial WSDL description of the required service. Ariadne searches for the given service description in the directory that is most likely caches the service. Finding the service is enabled by the getServices() function of the SD, which has one parameter (WSDL description) and returns an array of GetServiceData objects. Each GetServiceData object contains a description of a service that has been found. The structure of GetServiceData class is shown in Figure 7.
Package SDService;
Public class GetServiceData implements java.io.Serializable { Private java.lang.String serviceEP; Private java.lang.String custLocalEP; Private java.lang.String custRemoteEP; Private java.lang.String wsdlDocument; Private java.lang.String wsdlCustLocal; Private java.lang.String wsdlCustRemote;
Public GetServiceData() { }
// setter and getter methods of all the attributes
|
serviceEP: is the service’s EndPoint.
custLocalEP: is the EndPoint of the local customizer, if any.
custRemoteEP: is the EndPoint of the remote customizer, if any.
wsdlDocument: is the full WSDL description of the service.
wsdlCustLocal: is the full WSDL description of the local customizer service, if any.
wsdlCustRemote: is the full WSDL description of the remote customizer service, if any.
Generally, the service search in Ariadne is composed of four parts:
1) Getting the full/or partial WSDL description of the required service.
2) Asking the Ariadne to search for the registered services whose WSDL description contains a given WSDL description.
3) Selecting one or more of the found services.
4) Using the found service EndPoints to connect to the services and use them.
These four parts are shown in the following example (Figure 8).
// Part 1 // get WSDL description of the required service String partialWSDLDescription = ""; String partialWSDLFilePath = "/clients/wsdl/wsami/MyServiceInterface.wsdl";
Try { Java.io.FileInputStream wsdlFile = new java.io.FileInputStream(partialWSDLFilePath);
While (wsdlFile.available() >0) { byte[] data = new byte[wsdlFile.available()]; wsdlFile.read(data); partialWSDLDescription = partialWSDLDescription +(new String(data)); } } catch(...) { ... } // Part 2 // find the services SDService.GetServiceData[] services = sd.getServices(partialWSDLDescription);
// Part 3 // treat the found services if (services != null && services.length > 0) { //take the first service found String serviceEndPoint = services[0].getServiceEP(); String localCustomizerEndPoint = services[0].getCustLocalEP(); String remoteCustomizerEndPoint = services[0].getCustRemoteEP(); }
// Part 4 // use the selected service java.net.URL serviceURL = new java.net.URL(serviceEndPoint); ServiceInterface service = new Service.ServiceBindingStub(serviceURL,null);
|
Ariadne provides two optional mechanisms to handle the QoS-awareness. The first is the QoS Parameters, which allow the user to find the appropriate service, and the second is the Customization, which allows the user to customize its service running. The following describes these two mechanisms.
We enrich the WSDL language by integrating QoS parameters, which are mainly used to allow the clients to find the appropriate service according to the context. The service’s QoS parameters and their values are initially given by the service provider when it registers the service, and the values are updated periodically by Ariadne. The client requiring a service can add some QoS parameters and their values into the WSDL description of the required service, these values will be compared to the values given by the service provider. Only the services, that offer at least the QoS values equal to or higher than the QoS values requested by the client, are selected.
The following (Figure 9) is the XML Schema of the QoS parameters.
<xs:element name="ServiceDiscovery"> <xs:complexType> <xs:sequence> <xs:element name="ttl" type="xs:integer" default="-1"/> <xs:element name="QoS"> <xs:complexType> <xs:sequence> <xs:element name="param" minOccurs="0" maxOccurs="10"> <xs:complexType> <xs:attribute name="name" type="xs:string"/> <xs:attribute name="type" type="xs:integer"/> <xs:attribute name="ttl" type="xs:integer"/> <xs:attribute name="value" type="xs:string"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element>
|
The root element is the ServiceDiscovery, and it contains two elements: ttl and QoS. The ttl element is the time to live of the service description registered in the directory. Once this time has expired the service description is removed from the directory. To keep a service description in the directory all the time, the service provider has to re-register the service before its ttl expires or give the –1 to the ttl value. The QoS element contains an occurrence of the param element, which allows the user to define any QoS attribute and give it a value. The param element has four attributes: name, type, ttl and value.
Name: is the name of the QoS parameter.
Type: is the type of the QoS parameter, 0 for integer type, and 1 for string type. We will add other types in future versions.
ttl: is the time to live of the QoS parameter. When the ttl expires the QoS value is set to null. To keep the QoS parameter continually put its ttl value to –1.
Value: is the value of the QoS parameter, and may be a string or an integer.
The Figure 10 shows an example of QoS parameters
<ServiceDiscovery> <ttl>120000</ttl> <QoS> <param name = instance type = 1 ttl = -1 value = www-rocq.inria.fr/arles/> <param name = energy type = 0 ttl = 60000 value = 45/> <param name = memory type = 0 ttl = 60000 value = 64000/> <param name = freememory type = 0 ttl = 60000 value = 5000/> <param name = cpu type = 0 ttl = 60000 value = 800/> <param name = cachesize type = 0 ttl = 60000 value = 256/> <param name = connectivity type = 0 ttl = 80000 value = 5/> <param name = bandwith type = 0 ttl = 90000 value = 50/> </QoS> </ServiceDiscovery>
|
The comparison between the QoS parameters required by a client (Client QoS) and the QoS parameters given by a service provider (Provider QoS) return true if and only if:
- each parameter of the client QoS is contained in the provider QoS (name based).
- all the ttls of the Client QoS are equal to or higher than their corresponding ttls of the Provider QoS.
- all the values of the Client QoS are equal to their corresponding values of Provider QoS, in the case of the string type.
- all the values of the Client QoS are equal to or higher than their corresponding values of the Provider QoS, in the case of the integer type.
Our approach in service Customization is inspired by WSAMI Customization [4], which is based on using of a pair of content customizers at both ends, as presented in [5]. A Customizer consists of a local and a remote service. Any message exchanged between the client and the service goes through the Customizer. See http://www-rocq.inria.fr/arles/work/wsami.html for more details.
As shown above, in register service (section IV.3), Ariadne registers the WSDL description of a service and can also register a WSDL description of the local service customizer and a WSDL description of the remote service customizer related to the service. These customizers can be used to customize the running of the service. When a client asks the Ariadne for a registered service, the Ariadne searches and gives the EndPoints of the service and also the EndPoints of its customizers. Figure 11 shows an example.
SDService.GetServiceData[] services = sd.getServices(partialWSDLDescription);
if (services != null && services.length > 0) { //take the first service found String serviceEndPoint = services[0].getServiceEP(); String localCustomizerEndPoint = services[0].getCustLocalEP(); String remoteCustomizerEndPoint = services[0].getCustRemoteEP(); }
|
11. Example of finding service customizers
The following table (Figure 12) shows a comparison between some well-known service discovery protocols and our Ariadne implementation, listing which functionalities are supported in each case. The table comes from [6] except the Ariadne column.
|
Bluetooth |
DEAPspace
|
INS
|
Jini
|
Salutation
|
SLP
|
SSDS
|
UPnP |
Ariadne
|
Service
|
|
|
|
|
|
|
|
|
|
Naming and attributes
|
Standard
|
N/A |
N/A |
Standard
|
Standard
|
Standard
|
N/A |
Standard
|
WSDL |
Invocation
|
N/A |
N/A |
N/A |
Java code
|
Remote Procedure Call |
URL |
N/A |
XML Data |
SOAP |
Status inquiry
|
N/A |
N/A |
N/A |
Notification and event agent |
Notification
|
N/A |
N/A |
Polling and notification |
N/A |
Directory
|
|
|
|
|
|
|
|
|
|
Centralized vs distributed |
N/A |
N/A |
Distributed
|
Distributed
|
Either
|
Centralized
|
Distributed |
N/A
|
Distributed |
Number of Service Information Copies
|
N/A |
N/A |
Fully replicated in sub domains, single copy globally |
Multiple copies
|
Multiple copies
|
Multiple copies
|
Single copy
|
N/A |
Multiple copies |
Flat vs. Hierarchical
|
N/A |
N/A |
Flat and hierarchical
|
Flat or hierarchical
|
Flat
|
N/A |
Hierarchical
|
N/A |
Flat |
Service State in directories
|
N/A |
N/A |
Soft state and hard state
|
Soft state |
Hard state with periodically check |
Soft state |
Soft state and hard state
|
N/A |
Soft state |
Directory address
|
N/A |
N/A |
Configured address
|
Configured or multicast address |
Configured or multicast address |
Multicast address |
Multicast address |
N/A |
Discovered address |
Number of directory hierarchies |
N/A |
N/A |
Multiple hierarchies
|
Single hierarchy
|
N/A |
N/A |
Multiple hierarchies
|
N/A |
N/A |
Announcement and lookup |
|
|
|
|
|
|
|
|
|
Query vs. Announcement
|
Query |
Announcement
|
Both |
Both |
Both |
Both |
Both |
Both |
Query |
Directory-based vs. non-directory-based
|
Non-directory-based |
Non-directory-based |
Directory-based |
Directory-based |
Directory-based |
Either |
Directory-based |
non-directory-based |
Directory-based |
Communication
|
Unicast and broadcast |
Broadcast |
Unicast, anycast and multicast |
Unicast and multicast |
Unicast and broadcast |
Multicast |
Unicast, multicast and broadcast |
Unicast and multicast |
Unicast |
Service Selection
|
|
|
|
|
|
|
|
|
|
User vs. Protocol Selection
|
User selection
|
User selection
|
Protocol selection |
User selection
|
User selection
|
User selection
|
User selection
|
User selection
|
User selection
|
Service Matching
|
Match all
|
N/A |
Match best
|
Match all
|
Match one or match all
|
Match all
|
Match all or match best
|
Match all
|
N/A |
Context-aware
|
N/A |
N/A |
N/A |
N/A |
N/A |
N/A |
N/A |
N/A |
N/A |
Scope-aware
|
Location / vicinity
|
N/A
|
Location and administrative domain
|
Location and administrative domain |
N/A |
Administrative domain |
Location, administrative domain and network topology |
N/A |
N/A |
QoS-aware
|
N/A |
N/A |
Yes |
N/A |
N/A |
N/A |
N/A |
N/A |
Yes |
12. Comparison between service discovery protocols
WSDL Description of SD Interface
<?xml version="1.0" ?>
<definitions name="urn:SDService"
targetNamespace="urn:SDService"
xmlns:tns="urn:SDService"
xmlns:typens="urn:SDService"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<!-- type defs -->
<types>
<xsd:schema targetNamespace="urn:SDService">
<xsd:complexType name="GetServiceData">
<xsd:sequence>
<xsd:element name="serviceEP" type="xsd:string"/>
<xsd:element name="custLocalEP" type="xsd:string"/>
<xsd:element name="custRemoteEP" type="xsd:string"/>
<xsd:element name="wsdlDocument" type="xsd:string"/>
<xsd:element name="wsdlCustLocal" type="xsd:string"/>
<xsd:element name="wsdlCustRemote" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ArrayOfGetServiceData">
<xsd:complexContent>
<xsd:restriction base="soapenc:Array">
<xsd:sequence>
<xsd:element name="strings" minOccurs="0"
maxOccurs="unbounded"
type="typens:GetServiceData"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
</types>
<!-- message declns -->
<message name="startRequest"/>
<message name="startResponse">
<part name="stat" type="xsd:boolean"/>
</message>
<message name="stopRequest"/>
<message name="RegisterRequest">
<part name="WSDL" type="xsd:string"/>
<part name="EP" type="xsd:string"/>
<part name="WSDLLCU" type="xsd:string"/>
<part name="WSDLRCU" type="xsd:string"/>
</message>
<message name="UnRegisterRequest">
<part name="WSDL" type="xsd:string"/>
<part name="EP" type="xsd:string"/>
</message>
<message name="GetServices_ByInstanceURLRequest">
<part name="WSDL" type="xsd:string"/>
<part name="instanceURL" type="xsd:string"/>
</message>
<message name="GetServices_ByInstanceURLResponse">
<part name="serviceEP" type="typens:ArrayOfGetServiceData"/>
</message>
<message name="GetServicesRequest">
<part name="WSDL" type="xsd:string"/>
</message>
<message name="GetServicesResponse">
<part name="serviceEP" type="typens:ArrayOfGetServiceData"/>
</message>
<message name="GetAllServicesRequest">
<part name="GroupServiceWAU" type="xsd:string"/>
</message>
<message name="GetAllServicesResponse">
<part name="serviceEP" type="typens:ArrayOfGetServiceData"/>
</message>
<!-- port type declns -->
<portType name="SDPortType">
<operation name="start">
<input message="tns:startRequest"/>
<!-- output message="tns:startResponse"/ -->
</operation>
<operation name="stop">
<input message="tns:stopRequest"/>
</operation>
<operation name="Register">
<input message="tns:RegisterRequest"/>
</operation>
<operation name="UnRegister">
<input message="tns:UnRegisterRequest"/>
</operation>
<operation name="getServices">
<input message="tns:GetServicesRequest"/>
<output message="tns:GetServicesResponse"/>
</operation>
<operation name="getAllServices">
<input message="tns:GetAllServicesRequest"/>
<output message="tns:GetAllServicesResponse"/>
</operation>
<operation name="getServices_ByInstanceURL">
<input message="tns:GetServices_ByInstanceURLRequest"/>
<output message="tns:GetServices_ByInstanceURLResponse"/>
</operation>
</portType>
<!-- binding declns -->
<binding name="SDBinding" type="tns:SDPortType">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="start">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
namespace="urn:SDService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
</operation>
<operation name="stop">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
namespace="urn:SDService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
</operation>
<operation name="Register">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
namespace="urn:SDService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
</operation>
<operation name="UnRegister">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
namespace="urn:SDService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
</operation>
<operation name="getServices">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
namespace="urn:SDService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded"
namespace="urn:SDService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
<operation name="getAllServices">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
namespace="urn:SDService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded"
namespace="urn:SDService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
<operation name="getServices_ByInstanceURL">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
namespace="urn:SDService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded"
namespace="urn:SDService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
</definitions>
[1] F. Sailhan, V. Issarny. Scalable Service Discovery for MANET. In proc of IEEE International Conference on
Pervasive Computing and Communications (PERCOM), March 2005, accepted paper.
[2] Web Services Description Working Group. http://www.w3c.org/2002/ws/desc/.
[3] XML Protocol Working Group. http://www.w3c.org/2000/xp/Group/.
[4] D. Sacchetti, R. Chibout, V. Issarny. WSAMI: A Middleware Infrastructure for Ambient Intelligence based on
Web Services. http://www-rocq.inria.fr/arles/work/wsami.html.
[5] J. Steinberg and J. Pasquale. A Web middleware architecture for dynamic customization of content for wireless
clients. In Proceedings of the WWW'02 Conference, 2002.
[6] F. Zhu, M. Mutka, and L. Ni. Classification of Service Discovery in Pervasive Computing Environments. MSU-
CSE-02-24, Michigan State University, EastLansing, 2002.