Siena (Scalable Internet Event Notification Architectures) is a research project aimed at designing and constructing a generic scalable publish/subscribe event-notification service. The technical basis of Siena is an innovative type of network service called content-based networking.
Software systems of a significant dimension, especially those that are distributed over a computer network, are often engineered by means of the integration of components. A promising approach to support component-based software architectures is the so-called event-based style whereby the interaction of components is modeled with events. Components emit events to inform other components of a change in their internal state or to request services from other components. Upon detecting the occurrence of events, components react by executing some actions and possibly emitting other events. The glue that ties components together in an event-based architecture is an infrastructure that we call event service. The event service registers the interests of components and then dispatches event notifications accordingly. The advantage of using an event service instead of other "classical" integration mechanisms such as direct or remote invocation is that this method increases the degree of de-coupling among components thus eliminating static dependencies and improving interoperability.
We envision a ubiquitous event notification service accessible from every site on a wide-area network and suitable for supporting highly distributed applications requiring component interactions ranging in granularity from fine to coarse. Conceptually, the service is implemented as a network of servers that provide access points to clients. Clients use the access points to advertise the information about events that they generate and to publish notifications containing that information. They also use the access points to subscribe for notifications of interest. The service uses the access points to then notify clients by delivering any notifications of interest. Clearly, an event notification service complements other general-purpose middleware services, such as point-to-point and multicast communication mechanisms, by offering a many-to-many communication and integration facility.
Given that the primary purpose of an event notification service is to support notification selection and delivery, the challenge we face in a wide-area setting is maximizing expressiveness in the selection mechanism without sacrificing scalability in the delivery mechanism. Expressiveness refers to the ability of the event notification service to provide a powerful data model with which to capture information about events, to express filters and patterns on notifications of interest, and to use that data model as the basis for optimizing notification delivery. In terms of scalability, we are referring not simply to the number of event generators, the number of event notifications, and the number of notification recipients, but also to the need to discard many of the assumptions made for local-area networks, such as low latency, abundant bandwidth, homogeneous platforms, continuous and reliable connectivity, and centralized control.
Intuitively, a simple event notification service that provides no selection mechanism can be reduced to a multicast routing and transport mechanism for which there are numerous scalable implementations. However, once the service provides a selection mechanism, then the overall efficiency of the service and its routing of notifications are affected by the power of the language used to construct notifications and to express filters and patterns. As the power of the language increases, so does the complexity of the processing. Thus, in practice, scalability and expressiveness are two conflicting goals that must be traded off.
Siena is an event notification service that we have designed and implemented to maximize both expressiveness and scalability. A prototype implementation of Siena is available.
Others also contributed directly to the development of Siena. Among them are John Giacomoni, Mauro Caporuscio, Matthew J. Rutherford, Cyrus P. Hall, Yanyan Wang, Giovanni Toffetti, and Amir Malekpour.
We thank Dennis Heimbigner, Richard S. Hall, and André van der Hoek of the Software Engineering Research Laboratory, University of Colorado at Boulder (circa 1997), and Giampaolo Cugola, Elisabetta Di Nitto, and Alfonso Fuggetta of Politecnico di Milano for their contributions to this work.