- From: Christopher B Ferris <chrisfer@us.ibm.com>
- Date: Thu, 12 Jan 2006 15:29:04 -0600
- To: David Hull <dmh@tibco.com>
- Cc: xml-dist-app@w3.org
- Message-ID: <OFB2269F77.984A5C91-ON852570F4.00572DBF-852570F4.00760391@us.ibm.com>
David, Please see my comments below. Cheers, Christopher Ferris STSM, Emerging e-business Industry Architecture email: chrisfer@us.ibm.com blog: http://www.ibm.com/developerworks/blogs/dw_blog.jspa?blog=440 phone: +1 508 377 9295 David Hull <dmh@tibco.com> wrote on 01/12/2006 12:40:52 AM: > Chris, > > Thanks for the response. You are of course right that WS-RM defines > acknowledgment at the reliability layer: A message is acknowledged and then > delivered. Interestingly, WS-Reliability at least appears to take > the other approach: A message is delivered to the application level > and then acknowledged. At least, the WS-R picture with four boxes > in it shows arrows both ways between the application and reliability > layers, while WS-RM shows arrows only one way. > > I'm shocked, shocked I say, to find a source of potential confusion > among reliability standards. Well, I have been making this point to the WS-R crowd for years. Initially, I believe that what you describe was the case. That WS-R required that before acknowledgeing the message, that the message had to be "delivered" to the application layer... Something that I found to be problematic. However, over time, there were some subtle, and I would argue too subtle, changes made that implied that "delivery" could mean simply to a stable storage medium, not necessarily to the application itself (e.g. queued delivery) > > In any case, leaving aside the possibility that delivery could > involve arbitrary amounts of application-level processing (e.g., I > want to know when the receiver taken some action based on my > message, not just that the message arrived), I believe that the > issues I'm describing will occur whenever there is more than one > transport-level hop involved, and I believe that both flavors of > reliability standard allow for this. If not, then I'd think there > would be a need for some sort of extension to cover such cases. I > think the analogy to return-receipt is fairly tight. The return > receipt is meant to ack not only that the message arrived in a > mailbox, but that someone actually saw it. I have long argued that if you need an application-level ack, then have the application send one. The purpose, as I see it, of the reliable messaging layer is to ensure a successful hand-off, not to ensure that the application does, or even can, process the message. > > As far as I can tell, there shouldn't be any significant difference > from the reliability layer's point of view between forwarding a > message along another hop and doing some other sort of processing > before declaring it delivered. In either case, I don't send back an > ack until something arbitrarily long-running and outside my control > finishes happening. Respectfully, I disagree. > > The real feature I'm really trying to highlight here is that the > flow of messages and acks may be decoupled in various ways from the > transport-level flow of requests and responses. From your comments, > may I take it that you accept that premise? As has been pointed yes > out, this is essentially building a separate protocol of messages > and acks on top of a protocol of requests and responses. Mark has > already done a good deal more than cringe at this. As is his wont :-) > > As to HTTP request-response and SOAPiness thereof, we seem to be > converging on a "standard model" matching what you describe. I'm > certainly comfortable with "HTTP is always request-response, but the > either the request or the response or both may not be SOAPy". I'm > not sure if DaveO would put it quite that way, but I'll let him > speak for himself on that. > > Generalizing a bit, there are transports that act in a request- > response manner, as Noah describes in [1]. HTTP is one and, from > what I can make out, XMPP's <iq/> mechanism can be regarded as > another. There are also transports that act in a fire and forget > manner, for example XMPP's <message/> mechanism. For these, the MEP > will always be one-way, fire and forget or whatever we call it. Correct, but that does not preclude that some form of correlation, outside the scope of the underlying transport/transfer protocol, cannot be employed (e.g. ws-addressing) to premit higher-level MEPs such as request/response. > > The transport MEP is (unsurprisingly) a static property of the transport. > > Christopher B Ferris wrote: > > Apologies for the belated response... too much travel. Please see my > comments below. > > Cheers, > > Christopher Ferris > STSM, Emerging e-business Industry Architecture > email: chrisfer@us.ibm.com > blog: http://www.ibm.com/developerworks/blogs/dw_blog.jspa?blog=440 > phone: +1 508 377 9295 > > xml-dist-app-request@w3.org wrote on 01/04/2006 05:24:37 PM: > > > This is a bit more free-form than I'd originally intended, but bear > > with me. I think we get somewhere. > > > > First, a motivating use case involving reliability. I believe there > > are WSRX members on this list or at least lurking nearby. If so, > > please let me know if I've missed something fundamental. > > > > The reliability standards I've seen distinguish between > > submit/deliver and transmit/receive. Transmitting and receiving are > > transport-level concepts and carry no particular guarantee of > > reliability. An acknowledgment message acknowledges not that a message was > > received at the transport level, but that it was delivered to its > > Not so. The WS-RM SequenceAcknowledgement merely acknowledges that the > message was successfully received. It makes no claims whatsoever that the > message has, or even will, be delivered to the ultimate recipient. > It is effectively the equivalent of the HTTP 202 Accepted response in its > meaning. The distinction is that an HTTP 202 Accepted is returned on the > same connection as the HTTP request message, whereas the WS-RM SeqAck > can be returned on a separate connection and that it covers the complete > range(s) of received messages received, such that it need not be transmitted > (or transferred as the case may be) reliably. > > > ultimate recipient. Just exactly what this means is left out of > > scope. Essentially a message is considered received if the sending > > side learns of an acknowledgment for it according to whatever > > acknowledgment scheme is in effect. > > > > The upshot here is that, even if I use a TCP-based transport, and > > even if that transport allows for status codes or some other > > indication of a successful exchange, successful transmission of a > > message does not imply successful delivery. Delivery might depend > > on some further application-level processing, forwarding to another > > destination, or whatever. > > See above. > > > > > To be concrete, suppose I am using WSN or similar to manage sending > > notifications to a given node. I have provided an HTTP endpoint > > reference for the consumer of the subscriptions, and I have > > specified (using WSN's not-yet-specified policy assertions :-) that > > these notifications should be delivered reliably. > > Actually, you would specify the use of WS-RM using the WS-RM Policy > Assertion:-) > > > > > Notifications are inherently one-way. Given HTTP as a transport, we > > would want to use the request-optional-response MEP to send > > notifications. I'm not sure if WSRX does (or doesn't) support what > > I'm about to describe, but I would expect that the producer (or > > something acting on its behalf, but that's a separate issue) send > > notifications to the consumer by POSTing SOAP messages to the HTTP > > address given in the subscription request. > > > > What comes back? > > > > In the absence of other information, I would expect that each > > notification POST should get as its response either a 202 or a SOAP > > message containing acknowledgment information for some set of > > previous messages. The 202 would happen if there were no reliability-level > > acknowledgments available. Alternatively, the server could send > > always back an acknowledgment message. If there were nothing new to > > acknowledge, it would be identical to the previous one. I don't > > have a strong opinion as to which of these is better; my intuition > > is to allow for either. > > Agreed, especially given that there is no requirement in WS-RM that > a SequenceAcknowledgement be sent for each and every received message. > In fact, technically, there is only one SequenceAcknowledgement required; > the one that covers the entire range of messages in the Sequence. > > In practice, however, it is likely that implementations will send a > "naked" SequenceAcknowledgement message in the HTTP response entity > body for oneway notifications/messages on each response. It should be noted > that the SequenceAcknowledgement may not necessarily include the message > number of the message transferred on the HTTP request message. > > > > > An interesting variant occurs when the producer is sending multiple > > streams of notifications to the consumer, in which case a > > notification in one stream might elicit an acknowledgment for a > > notification from a different stream. Why not? The HTTP response > > channel is available and might not be available again for arbitrarily long. > > This is supported by WS-RM. > > > > > Notable points: > > The transport-level MEP is always request response. > > In the context of the HTTP binding, yes (although I am > SURE that MB will cringe at the use of the term "transport-level" :-) > > > The SOAP MEP is always request-optional-response > > The application-level MEP is always one-way > > The potentially complex part here is in the reliability layer. It > > sees two streams of messages: notifications coming out and > > acknowledgments coming back. From this point of view > > The flow of acknowledgments is independent of the transport-level > > flow (a given HTTP response acknowledges zero or more notifications) > > The flow of acknowledgments is independent of the application-level > > flow (for the same reason) > > yes > > > The flow of notifications ought to be independent of the transport > > level flow. If nothing else, WSN allows for boxcarring of > > notifications: a given "notify" SOAP message may contain several > > notifications (but does the reliability layer know this?). > > No, WS-RM would only be concerned with the message, not its contents. > > > Further, since the reliability layer may retransmit, so a given > > application-level notification may trigger more than one transport- > > level message. > > The recurring theme I'm seeing here is that each level has its own > > view of message flow. Often, those views will converge, but they > > Bingo. > > > can diverge for any number of perfectly ordinary reasons, even > > leaving aside cases involving cell phones and tunnels: > > A request-response operation may be realized as more than one > > transport-level exchange (the WSA "async request-response" case) > > A one-way operation may be realized as a request-response, either as > > a push operation or through polling. > > Even a oneway message over the HTTP binding involves a request/response. > The distinction, as I have seen in other emails, in this and related > threads, is the SOAPiness of the response. > > > Retransmission means that one application-level operation may > > manifest as several transport-level operations, even where the > > application-level operation would otherwise match the transport level. > > Boxcarring, where applicable, means that several application-level > > operations may manifest as a single transport-level operation. > > Reliability-level acknowledgments boxcar by design. > > Don't know if I would necessarily use that term, but yes... as discussed > above, the SeqAck covers the entire range of messages in the Sequence, not > just the last one received as would be the case of an HTTP 2xx response. > > > This may seem complex, but there is a bright side. The various concerns > > have to be separated, so we might as well gain from this separation. > > You go, girl! This has been my point all along. > > > In particular, SOAP can focus narrowly on abstracting the > > characteristics of the transport and not worry about anything else. > > I'm more and more convinced that we're about done as far as HTTP > is concerned: > > The SOAP request-(optional-)response MEP describes a SOAP message > > going out and something SOAPy optionally coming back. > > As Noah points out, something optionally SOAPy coming back. > > > The SOAP response MEP describes a non-SOAP request and something > > SOAPy coming back. > > Um, how do we describe a SOAP request and something non-SOAPy coming back? > > We shouldn't have to worry about non-SOAP out and non-SOAP back, right? > > Correct.
Received on Thursday, 12 January 2006 21:29:34 UTC