[I'm continuing an investigation of switching from CORBA to Ice...
hence the naive questions as I learn more about Ice...]
We currently rely heavily on events in our distributed processing. Under
CORBA, we've been using OmniNotify for our event service (because
our definition of an 'event service' is probably closer to a 'notification
service'). Events are posted by name and contain sets of attributes
(name/value pairs).
IceStorm provides an efficient general-purpose publish/subscribe
mechanism that meets most of our requirements and might be
adapted to act as the framework of our event service. I see two
approaches:
(1) A separate topic for each event name. This could lead to
*lots* of topics - is that a bad thing?
(2) An 'event' topic (possibly with federation to help with load
balancing). Then other topics could be used for other message
classes (log/debug messages, alarms, heartbeats, etc).
Regardless of the approach, however, there is one feature we rely on
with OmniNotify that seems to be missing in IceStorm: the ability
to subscribe to events using wildcarded event names (e.g. one
client subscribes to 'vsm.*', another to '*.camera.*', and a third
to 'vsm.camera.readout.noise'. While all three would see some
events in common, the first two would receive additional events
through the same subscription not visible to the third, and each
of the first two would see events not seen by the other.)
Now, I understand *why* IceStorm (I think) doesn't currently
support this - it treats messages as opaque, gaining in efficiency
and generality by doing so.
However, a reasonably efficient way to provide the above (and other)
message selection on a topic would be to provide application-specific
filters. In the above case, we would provide an event name filter that
would understand the event naming and wildcard conventions to
determine whether or now a message should pass through.
While this *could* be done in the client w/o affecting IceStorm, this would
effectively require all clients to subscribe to all events, which is undesirable
from both a network bandwidth perspective and cpu load point of view.
But, if we adopted approach (2) above, then (in theory), it would be possible
to attach these filters to the downstream connections from a topic, but within
IceStorm. While this increases the load on the IceStorm node it (a) is no worse
than the load on each client with a client-side solution and (b) possibly mitigated
through federation. It helps overall network bandwidth.
This would also have minimal impact when using IceStorm as it is currently
designed - just a quick check to discover that there is no filter would be added
to the processing.
So, am I out of my mind? Is these a reasonable approach? Has it be dicussed
before (I couldn't find it mentioned in the archives). Is there an existing
mechanism in Ice that would serve the same purpose that I'm missing? Would it
be hard to add? Would anyone else find it useful?
Thanks!
Steve

Reply With Quote