[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Streaming versus Store-and-Forward
Streaming versus store-and-forward The decision to "stream" or to "store-and-forward" can be considered an implementation aspect that doesn't need to be standardized, as Jacques noted in http://lists.oasis-open.org/archives/ebxml-msg/200802/msg00047.html in response to Ian's message on node types in http://lists.oasis-open.org/archives/ebxml-msg/200802/msg00043.html Here is some discussion on the relevant advantages of "streaming" versus "store-and-forward". Here's an attempt to compare the two: Advantages of streaming (compared to store-and-forward): - The intermediary only needs to provide a routing function, it does not need to provide temporary storage for messages. The more data flows through the intermediary, the leaner the system that provides the ebMS intermediary function can be. - The intermediary can start forwarding the message immediately after having scanned the SOAP header for ebMS routing data. If the message is very large (and not "chunked" using some to be defined message chunking protocol) and/or there are multiple cascaded intermediaries, this reduces end-to-end latency. - The intermediary can act as a "synchronous" intermediary, using the back-channel on the incoming HTTP connection to relay incoming content on the outgoing HTTP connection. This content can include SOAP faults, any other protocol error messages, HTTP status codes, SOAP header responses, and even response business messages. Note that streaming does not imply, but enables synchronous (see separate note). Advantages of store-and-forward (compared to streaming): - The intermediary can act as a buffer. When there is much less bandwidth for the outcoming connection than there is for the incoming connection, the intermediary can temporarily queue the incoming messages. In the extreme case where the outgoing connection can not be established or is dropped, the intermediary can act as a temporary buffer and provide transport-level retries to forward the incoming message as and when the next MSH becomes accessible. - Disaster recovery: assume a disaster happens to an ebMS 3.0 endpoint that receives incoming messages via an intermediary. Its reliable messaging component may have acknowledged some messages that it has not yet delivered to its backend applications. Suppose a stand-by MSH takes over within some SLA-defined interval. It can notify the intermediary to adapt its routing tables and request it to resubmit all recent messages to ensure they are all processed. (Alternatively, the Receiver could ask all its trading partners to resubmit messages, but if the failed MSH receives messages from hundreds or thousands of other message handlers, reloading them from the last intermediary is more convenient). Note that "MEP Bridge" from push (from sender to intermediary) to pull (by receiver from intermediary) requires "store-and-collect" functionality. So I assume most ebMS 3.0 intermediaries to implement and support temporary storage at the intermediary, and if they need to support if for store-and-collect they might as well support it for store-and-forward. The "streaming" mode seems to be an optimization in general but is a pre-requisite for synchronous intermediaries.
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]