J. Sventek
Hewlett Packard Labs
In this keynote address, Joseph indicated that he had spent the last 12
years on ANSA-related activities implementing Middleware. In the talk he was
going to describe some of his experiences. One size never fits all and
probably never fits anything very well. A huge implementation will not tend
to work very well. For complex solutions we must keep an eye on what the
developer is trying to achieve. A true solution will be very complex.
Think about the interaction between components: lots of quality and
functional dimensions may be involved. A situation analysis shows that some
things may be more important than others: these sould be prioritised. Some
may be "don't care", some fixed early, some at compile time, and others
configured at run time. In real systems, the earlier some things are fixed,
the easier the system will be to deploy and build. Some things may never be
fixed. Another key requirement is that customers do not want to be locked
into a middleware solution - tomorrow they may need another choice.
The abstraction layer for a publish and subscribe implementation was
then described. This included named channels, message definiton for each
channel, publisher registration and withdrawel. A discussion of which
publish/subscription implementation to use took place, including issues
such as heartbeats and the delivery of call detail records (CDRs).
In a stock quote delivery application, a particular component may use
several publish/subscribe channels with different reliability and ordering
requirements. Compile time binding has advantages: minimisation of memory
occupancy of the middleware support layer; elimination of run time
configuration means "more likely to get it right". Systems may contain
10E+5 to 10E+6 active elements. Compile time bindings also has drawbacks,
though: inflexible choice; change requires relink and reload dynamically.
Dynamic loading can help alleviate the memory occupancy problem, but there
is a need to handle more difficult run-time configuration issues. The longer
you delay configuration choices, the less likely you are to get the
configuration right.
Large application developers have been using mapping layers to support
multiple OS's, ie: ISIS and it's decendents, ANSAWARE and ORBlite. A diagram
showing the structure of ANSAWARE was shown. ANSAWARE provides several
abstraction layers, including: a message passing service (unreliable
datagram); single RPC protocol (REX with common marshalling); and threads
(non preemptive threading package with mutual exclusion primitives). ORBlite
also supports several abstraction layers: transport, threads and language
mapping.
ORBlite simultaneously supports multiple language mappings and RPC
protocols which are determined at link time. Two hereises were the
introduced. The "use of abstraction layers causes performance degradation"
is mitigated by the use of object oriented languages (and their polymorphism)
for the implementation of the abstraction layer. Late binding of choices
along a quality/functional dimensional is always prefered.
Conclusions that can be drawn are as follows. A middleware architect
should solicit and understand what needs the customer has regarding
customisation. A customisable solution should support binding choices as
early in system implementation as possible. The ORB specification involved
five mutually distrustful companies and represents a conservative view of
the state of the art in 1991. The IDL is the most lasting part of the CORBA
specification and can be used to define the interfaces to components without
requiring that a CORBA substrate be used to animate your system.
Three brief questions were fielded by the floor. What did he think of
objects by value? Joseph's reply was that objects by value make systems more
difficult to implement in the same address space. Another queried why he was
a fan of early binding? The answer: multicast implementation is more
efficient if the binding decisions are made early. In a maintainable system
the complexity introduced by late binding makes maintainance difficult.
The third question asked what flexibility should be allowed? In reply,
Joseph said let the user write IDL specs. If other flexibility is needed, it
should be implemented in the compiler to minimise the likelihood of errors.