[TransWarp] Requirements for the future peak.messaging package
Phillip J. Eby
pje at telecommunity.com
Sun Aug 4 18:18:49 EDT 2002
Comments, questions, and suggestions welcome...
* CRITICAL: Asynchronous "fire-and-forget" messaging; programs that produce
messages in volume are implicitly very busy and should not be made to wait
around for the messaging system to connect, etc. This can be accomplished
either via socket to a local daemon, or via filesystem queues processed by
a daemon or thread.
* CRITICAL: Transaction integration for injecting or removing messages from
a queue. When a transaction is committed, all messages that were
provisionally sent should be "really" sent, and all messages that were
retrieved should be actually removed from the queue they came from.
* CRITICAL: Strong multi-processing support; queueing mechanisms should
support simultaneous injection or retrieval by multiple processes on
multiple machines.
* CRITICAL: Messages must be secure from being read in transit by
unauthorized parties, and it should not be possible for unauthorized
parties to inject forged messages into the system. (For filesystem-based
transit mechanisms, it suffices for adequate permissions to exist, and
private-key encryption and message digest mechanisms should suffice for
network transit.)
* IMPORTANT: Persistence system integration. It should be possible to
treat application-domain objects as "messages" and inject them into or
retrieve them from a messaging queue, with minimal wrapping overhead, e.g.
by providing metadata arguments on a send method and receiving a
(metadata,object) pair upon retrieval. This will be very useful in
relation to both timed queues and browse/search interfaces (see below).
* IMPORTANT: Timed queues. Timed queues make messages available for
retrieval only after a future timestamp is reached, allowing scheduling of
future events via message send.
* IMPORTANT: Browse/search: queues may expose browsing or searching
interfaces to allow inspection of queue contents for system monitoring
purposes or to select messages for consumption (except ordered queues,
which only allow consumption in sequence).
* HELPFUL: Publish/subscribe of events or log entries, with "live"
listening - possibly non-durable messages with time-to-live
* HELPFUL: Low-latency request/response messaging (like XML-RPC but without
TCP connection overhead for each request). If this existed and were both
reasonably secure and sufficiently lightweight, it could be a basis for
developing many kinds of advanced services such as distributed lock
managers, Linda or Jini-style tuplespaces, etc.
* HELPFUL: Ordered queues. Ordered queues provide a total ordering
according to a timestamp, and each message can only be received after the
one before it has been removed from the queue (at least
provisionally). (Note that this implies only a single receiver may
retrieve records from such a queue at any given point in time.)
* NICE TO HAVE: Keyed queues; i.e., messages corresponding to the state of
an object can be identified by a key, and later messages supersede earlier
messages, reducing the number of messages to be picked up and processed by
a slow or intermittent recipient.
* NON-REQUIREMENT: Conformance to protocols or APIs of existing messaging
services is not a requirement at this time. However, if people have such
services and wish to ensure that peak.messaging's conceptual model can be
safely mapped to those services, we will entertain suggestions for how to
do so.
* NON-REQUIREMENT: Sender non-repudiation of messages is not an
infrastructure requirement, as long as applications can build on the
infrastructure to include digital signatures or similar mechanisms as
needed. Most applications, however, do not need non-repudiation and
shouldn't pay for the extra cryptographic overhead.
More information about the PEAK
mailing list