Real-Time Innovations, Inc. 6 Copyright © 2010
Plugging in components sounds simple, but it is not trivial
The key benefit of DDS is that you can “plug in” new modules without redesigning other
interfaces (red line in the figure). That looks simple, but it is anything but obvious how to do
that. Having a pluggable interface assumes that the “bus” specification captures all the key real-
time constraints: What is the data? When is it available? When is it needed? What happens if
it’s not on time? Are there backup sources? How are they engaged? It also makes a huge
assumption that adding more load will not affect the overall system performance; if it does,
other components can fail even if there is no direct connection. That’s an insidious type of
indirect coupling.
At a high level, participants on a DDS bus just subscribe to the information they need and
publish what they produce. Information is identified by “Topics”, and is strongly typed for safety
and easier integration. The middleware automatically “discovers” new entrants. Types are
communicated before information flow begins, so all modules know what they’re getting (called
being “content aware”). And because data can flow without servers or synchronization delays,
the system is blazingly fast; DDS is easily the highest-performance middleware standard
iii
.
But perhaps the key to the success of DDS is that it crisply defines an information model.
Fundamentally, if you define the information model correctly, then components can specify
their needs at design time. At runtime, they then produce and consume via the model,
implemented by the middleware. The modules are not directly dependent on each other. This
is the key to avoiding coupling. The components adapt to the model, not the other way around.
Other messaging technologies (e.g JMS) can’t do this because they don’t define an information
model
iv
.
DDS defines the information model with over 20 “quality of service” (QoS) parameters. QoS
settings stipulate if a publisher can supply reliable information flow, how fast it can supply data,
and when you will find out if it’s up or down. A subscriber can specify exactly what it needs,
even down to filtering out updates based on timing or the content of the message. The
middleware then looks at requests from “plugged in” subscribers, and decides if any publishers
can satisfy those requests. If so, it establishes “contracts” between the publisher and subscriber
and starts sending data. If not, it reports an error. An example contract might be, “The
publisher will update the subscriber at least every millisecond, and the communication must be
reliable, so retry to repair transmission errors. If the publisher fails, switch to a backup.”
That’s a small example. The full set of DDS QoS parameters can integrate hundreds of very
complex, demanding applications. And because the middleware is fast, the specifications can be
set to satisfy very demanding real-time requirements. Fielded DDS systems send up to millions
of messages per second, with latencies measured in the tens of microseconds, through millions
of publish-subscribe pairings. Designers can specify timing requirements, supporting systems
that have deterministic delivery needs. Reliable multicast ensures that new “plug ins” don’t
burden the system. It scales well; applications comprising up to 1000 computers are deployed.