- From: <noah_mendelsohn@us.ibm.com>
- Date: Wed, 29 Mar 2006 16:42:21 -0500
- To: <vikas@sonoasystems.com>
- Cc: "'Anish Karmarkar'" <Anish.Karmarkar@oracle.com>, "'Xml-Dist-App@W3. Org'" <xml-dist-app@w3.org>
We're still trying to figure out where to draw the line. Part of the
distinction I'm trying to get to is whether there is, even under the
covers, any network traffic required >between< nodes before the sender of
the one way is done. For example, sending a one way through TCP tends to
imply connection setup, exchange of flow control packets, etc. That means
that to send a message in a manner that uses the protocol in the intended
manner you might literally have to wait for many seconds. By contrast, a
system like JMS or MQ will queue a message locally, on disk if necessary.
The wait times for doing that should be in milliseconds. UDP is an
interesting case. Anish has pointed out that there is some chance that
buffers would be full locally and you'd be tempted to wait a bit, but a
counterargument is that UDP semantics are datagram anyway. If you don't
like waiting, then just drop the packet. The network may well do that
anyway.
So, I can see arguments on both sides, but I want to keep in mind that
MEPs are like interfaces on bindings. If two bindings support the same
MEP, then there should be a good chance that an application should be able
to use those two bindings interchangeably. That's why we took the trouble
of inventing MEPs. It's a judgement call, but if one set of bindings may
require you to hang (or spins of a thread that hangs) while exchanging
messages with some other node, and another set of bindings is FAF in the
sense that you never have to do more than store the message locally
(typically milliseconds), then that seems to me a difference that would
lead applications to consider the bindings as not substitutable in
practice. What's confusing, is that the pattern of envelopes is the same
in both cases, but the transport-level traffic is quite different. Note
that in the case of Response-Only, we chose to explicitly model both
envelope-level and transport-level communication.
Also, as David Hull points out, there are some differences in the
responsibilities of the receivers in the two cases. On transports like
TCP, the receiver tends to have a responsibility to open a connection in a
timely way, to suck up the bytes of the message, etc., or else the sender
can't progress. With FAF, the tendency is that the sender progresses in
any case, at least as seen at the application level. The receiver has
responsibilities only insofar as it wants to actually get the message in a
timely or reliable manner.
--------------------------------------
Noah Mendelsohn
IBM Corporation
One Rogers Street
Cambridge, MA 02142
1-617-693-4036
--------------------------------------
"Vikas Deolaliker" <vikas@sonoasystems.com>
Sent by: xml-dist-app-request@w3.org
03/29/2006 02:21 PM
Please respond to vikas
To: "'Anish Karmarkar'" <Anish.Karmarkar@oracle.com>,
"'Xml-Dist-App@W3. Org'" <xml-dist-app@w3.org>
cc: (bcc: Noah Mendelsohn/Cambridge/IBM)
Subject: RE: What does FAF mean?
All,
Aren't FAF and MEPs are two distinct mechanisms at different layers in
abstraction? MEPs is a mechanism for messaging systems (or processor)
while
FAF is a programming paradigm.
You can achieve FAF over any kind of underlying MEP support by your
messaging system. Mixing the two can be cause for confusion, IMHO.
Vikas
-----Original Message-----
From: xml-dist-app-request@w3.org [mailto:xml-dist-app-request@w3.org] On
Behalf Of Anish Karmarkar
Sent: Tuesday, March 28, 2006 11:56 PM
To: Xml-Dist-App@W3. Org
Subject: What does FAF mean?
At the Cannes F2F I took an action to start a discussion on what
Fire-and-Forget (FAF) MEP means. This email is intended to start that
discussion.
IIRC, this was in the context of whether we need two different MEPs:
one-way MEP and FAF; and whether a FAF MEP has no timing issues (how
long does the sender have to wait?) compared with one-way MEP.
I don't quite see the need for two separate MEPs. A one-way MEP which
consists of one SOAP message going from the sender to the receiver with
no requirement (in the MEP) for a transport- or SOAP-level message
coming back should be sufficient.
I'm not convinced that we should construct MEPs with any builtin timing
constraints (and any programming API assumptions). It has been mentioned
that there are protocols (such as UDP) where typically the "send" API
call returns right away (compared to protocols such as HTTP which
require a HTTP-level response -- a network round trip -- and therefore
take longer for the "send" API call). Given the various constructs
available to programmers: multiple threads, multiple processes, system
queues, work queues, shared mem etc, this notion of "timing" as it
relates to programming APIs is not very relevant. It would also be
difficult to quantify these timing differences. Furthermore, it is not
quite true that in protocols like UDP the "send" API call always returns
right away. This is typically a system call and requires data to be
copied to the buffers (which sometime may take longer than excepted --
depending on what else is going on).
I would also like to mention that I think one can indeed bind a FAF MEP
(or a one-way MEP for that matter) to a protocol such as HTTP . In this
case, at the abstract MEP level there is nothing coming back even though
there is a HTTP response coming back.
Comments?
-Anish
--
Received on Wednesday, 29 March 2006 21:42:49 UTC