PDS: A Proactive Directory Service

[ Project overview | People | Publications | Code | Documentation | Related work | Contact information ]

Project overview

Innovative and widely distributed applications are enabled by infrastructure layers that allow distributed resources and services to be pooled and managed as though they were locally available. Advances in communication technologies and the proliferation of computing devices have made this possible; two such types of infrastructures are pervasive computing environments and computational grids. An important component of both is a directory service that provides information about different objects in the environment (such as resources and people) to applications and their users. Well-known examples are the Metacomputing Directory Service (MDS) for Globus-based environments, and the Intentional Naming System (INS) for applications developed in the Oxygen pervasive computing project. Directory services in both types of environments must support sophisticated object descriptions and query patterns, operate in highly dynamic environments, and scale to an increasingly large number of objects and users.

Current directory services have been designed for fairly static environments where updates are rare (DNS, LDAP, and X.500). Recent work has addressed the issues of expressiveness of their object descriptions and query languages (through attribute-value hierarchies, for example) and considered their scalability (through domain-based partitioning or hierarchical organization (SDS, Globe, INS). Still, all these directory services use a traditional 'inactive' interface, where clients interested in the values of certain objects' attributes must explicitly request such information from the server. When object attributes are frequently updated, those clients who need up-to-date information have no alternative but to query servers at rates that (at least) match the rates at which changes occur.

We argue that an "exclusively" inactive interface to a directory service can hinder service scalability and indirectly restrict (the behavior of) potential applications. We propose to "extend" the interfaces of directory services with a customizable 'proactive' mode by which clients can express their interest in, and be notified of, changes to the environment. Proactivity has the potential to increase scalability and improve overall performance by reducing the amount of work done by clients (and correspondingly by servers) in order to become aware of changes in their environments.

To experiment with the idea of proactivity in directory services, we have designed and implemented PDS, the Proactive Directory Service: an efficient and scalable information repository with an interface that includes a proactive push-based access mode. In contrast to previous work, we have taken the use of proactivity in PDS a step forward by narrowing the target of proactivity to the granularity most pervasive and grid computing applications are interested on: objects and their attributes. Each object managed by our Proactive Directory Service can have associated a channel for change notification to which interested clients can subscribe. Events of interest are reported to subscribed clients in the form of event messages multicasted over those notification channels. Examples of types of events include the addition or removal of services or devices or more specific occurrences such as significant changes in the availability of a resource.

The primary advantage to clients of pull-based interfaces is control. Pull-based interfaces allow clients to manage when/if messages are sent and to anticipate replies (since the fact that a reply is impending and the type of information the reply carries are both known). Proactivity allows clients to trade control for performance, as message traffic is only generated when updates occur. To compensate for this tradeoff, we allow PDS clients to customize notification channels by providing a specification of what events it will be interested in. These specifications, expressed as functions in a portable subset of C, are dynamically compiled and use by the server to determine whether or not to notify a client.

Intuitively, proactivity provides scalability and high performance by reducing the amount of work done by clients (and correspondingly by servers) in order to become aware of updates. It reduces the load on the server by significantly reducing the number of client requests for updates. Client load is reduced because the server (or the object's owner) is responsible for notifying the client when changes occur to the object. The number of messages in the system is reduced by eliminating client polling for updates, resulting in an optimal message-per-update. These intuitive statements are validated by our initial results where we have found that a high level of consistency between servers and clients can be obtain at lower CPUs loads than are possible with traditional interfaces.


Code distribution

PDS requires the following libraries:

Documentation on the PDS client API is here.


Partial experimental support for PDS has been provided by the Georgia Tech Netlab.

Related work

Research projects and papers on topics related to PDS.

Contact information

If you have additional questions about this research, please feel free to contact us.

Fabian E. Bustamante or Patrick Widener
Center for Experimental Research in Computer Systems
College of Computing
Georgia Institute of Technology
Atlanta, GA 30332-0340
(404) 385-2027

email: pmw AT cc.gatech.edu

Last modified: Thu May 5 14:50:39 EDT 2005