Avis supports building systems using the Elvin publish/subscribe message bus architecture, an approach which shifts the network architecture up a level from being in terms of protocols and point-to-point networking, to being based on the concept of a connectionless, flat event space.
A message bus supports arbitrary communications topologies: one to one, one to many, many to many. Clients simply emit and receive messages on the bus — there is no direct connection required between them, they simply receive messages they've nominated an interest in if another client somewhere on the bus emits them.
A message bus can be used to implement traditional client-server request-reply protocols, but can also support other kinds of communications, such as message broadcast (e.g. instant messaging, SNMP device monitoring, stock tickers, RSS news) and discovery (e.g. software service discovery, Bonjour, UPnP).
Protocols, Statelessness, Security
A uniform message format means communication protocols become oriented around message content rather than on-the-wire encoding formats and network stacks.
The bus architecture encourages a stateless connection between clients where possible, and often obsoletes the issues of deciding who initiates a connection, how to handle disconnection and reconnection, and how to find the service to connect to.
In a message bus architecture security becomes a matter of deciding who can and cannot receive which messages and how they're federated across trust boundaries. Security will never be easy, but this approach can help to focus on where to apply it.
Elvin messaging is easy to add to a client application: adding the client library and a few lines of code are needed to subscribe or emit a message — no factories, registries, queues, databases or network configuration are required.
Deciding to experiment with Elvin is a low cost decision — Avis provides an easy to install package which requires no configuration or other dependencies.
While Elvin's simplicity makes it easy to get started, its flexibility allows it to scale to more complex jobs. Once an Elvin router is available somewhere on the network, it may become a convenient resource for other applications, and federating it with other routers allows to to be scaled up for bigger projects.
An Elvin message router only delivers messages to clients that are interested in them, and Elvin's subscription language allows clients to be specific enough that they don't receive messages they're not interested in.
Because the router is stateless, does not need to support guaranteed delivery, transactions or durable subscriptions, and optimises the way it scans for matching subscriptions, it can achieve very high message throughputs. This allows it to be used for near real-time applications.1
In fact, although Elvin may be initially be thought of as a peer to enterprise messaging systems such as JMS it really falls somewhere between IP multicast and more heavyweight messaging systems.
Best Effort Delivery
The Elvin protocol does not provide an absolute guarantee of delivery, just a best-effort attempt. If this sounds scary, first hand experience indicates that many systems simply do not require absolutely guaranteed message delivery, especially given the significant cost associated with providing such a guarantee.
Costs of guaranteed delivery include slower delivery speed and complex supporting infrastructure: a guaranteed delivery system needs a persistent, transactional message store, tracking for what clients have received which messages, acknowledgment of message receipt, etc. Such systems store a lot of state on the server, which makes server failover, load-balancing and federation much harder.
However, if you need absolute guaranteed message delivery or durable subscriptions, you may find a heavyweight enterprise messaging system such JMS a more appropriate choice, especially if you're already using a Java EE or .NET system where such a choice will allow you to integrate better with other components.2
Where To Use An Elvin Bus
Elvin is just one of a number of message bus middleware standards, which include enterprise standards such as the Java Messaging System (JMS) and wide-area messaging systems such as XMPP.
The Elvin bus has three key features that make it different:
It's considerably less complex and lighter-weight than other messaging systems, but can scale to large systems.
The stateless routing approach is naturally conducive to high performance, allowing it to be used for applications that send lots of messages and need them delivered fast.
Its design incorporates support for efficient federation of multiple routers into wide-area event routing networks.
Elvin is also an open standard and available as Free Software.
Elvin has become a core component of a number of projects at DSTC, DSTO, and several academic institutions.
Elvin has been used:
To implement a wide-area instant messaging and presence network across several organisations,
To provide communication and service control for smart meeting spaces (Livespaces),
For RSS news dissemenination,
To route Stock trade notifications.
Elvin has also been used in a number of projects where it simply provides a convenient way to instrument or otherwise send a message from a program or service (e.g. instrumenting a web application).
An example of the use of Avis for a semi real-time application is sending mouse input events to remote-control another computer: in this scenario timely delivery is crucial in order for the remote mouse cursor movement to feel smooth.
A JMS-to-Elvin adapter has been developed by Mantara and is thus a theoretical third option, allowing the use of Elvin/Avis and JMS as needed. This adapter is not currently publically availble however.