W3C home > Mailing lists > Public > www-ws-arch@w3.org > January 2003

RE: Proposed text on reliability in the web services architecture

From: Assaf Arkin <arkin@intalio.com>
Date: Wed, 22 Jan 2003 14:52:45 -0800
To: "Miles Sabin" <miles@milessabin.com>, <www-ws-arch@w3.org>
Message-ID: <IGEJLEPAJBPHKACOOKHNOEEGDBAA.arkin@intalio.com>

Here's my view of thing (abriged version).

In a perfect world where messages are never lost, one way flows do not
assure any level of reliability. If I send a request to buy products X/Y
which I expect to be shipped within 2~3 weeks, the message gets processed
but the products are not available (book out of print), I have to wait 3
weeks to determine that I will not receive my product.

That's a bad proposition. I would like to receive at some point (say 8 hours
later) a message confirming whether the delivery would be made or not.
That's how I achieve reliablity of the application, and I cannot think of
any other way.

In a non-perfect world messages may be lost. The fact that a message has
been lost means I will have to wait 8 hours to determine that. This is a
lousy failure detection algorithm. Why wait 8 hours?

Let's say I do synchronous delivery using TCP. I start sending the message
and near the end the TCP connection drops. I can say "fine, I think the
message got there", or I can say "oh, oh, message loss". In the first case I
would wait 8 hours to determine whether the message was delivered/processed.
In the second case I am more responsive, I can react immediately by openning
another connection and sending it again. I am doing RM.

Now let's say I use queues. I put the message in a queue and I wait 8 hours
for a response. The MOM picks the message from the queue, sends it, TCP
connection drops, if say "oh, well, life goes on". I wait 8 hours and get no
response. What if the MOM would simply retry to send the message again? The
queue is fulfilling the RM responsibility.

Now let's say the receiver decides not to process messages as they come,
instead it queues them for later processing. The queue is not persisted. If
the TCP connection drops the message never gets to the queue. It will not be
delivered, so there's no ack. The sender needs to retry again. If the
message gets into the queue it's acked. It will possibly delivered.

The sender cannot distinguish between a message that was not delivered and a
message that was not processed. So for the sender the fact that the message
has arrived at its destination fully intact warrants an ack.

The receiver takes two hours before it can start processing the message.
During the two hours it may crash, message is lost. This is equivalent to
message not being processed for any other reason. But, it takes six more
hours to find this out. So the receiver has a lousy QoS. I will elect not to
do business with this supplier.

The receiver can employ two strategies to improve its QoS. The receiver can
either make sure it never fails, or it can persist messages. Which strategy
it uses is up to the received. But statistically the one that chooses
persistence is going to give a higher QoS and those remain in business
longer. Queuing is optional just like friendly customer support is optional.

Conclusion:

- RM doesn't say anything about processing of messages, only delivery

- An appliction can implement RM itself, an application can also implement
queuing itself, an application can also implement SOAP encoding/decoding
itself

- Many applications would benefit if they can use someone else's queue, SOAP
encoding/decoding etc (in this case the gateway)

- The queue could be much better if it uses acks to resend potentially lost
messages and also use persistent to protect from failure

- The queue doesn't have to do that, but a framework that incorporates acks
and lets it persist messages is beneficial to all parties

- My proposal is only to allow this layer to exist through an abstract
interface which allows the application to exert some control (e.g. try
once/do your best, only deliver within 8 hours) and allows the layer to
elect whichever strategy works best (depending on protocol) and allows two
RMs to exchange acks to *improve* overall reliability

arkin


> -----Original Message-----
> From: www-ws-arch-request@w3.org [mailto:www-ws-arch-request@w3.org]On
> Behalf Of Miles Sabin
> Sent: Wednesday, January 22, 2003 5:54 AM
> To: www-ws-arch@w3.org
> Subject: Re: Proposed text on reliability in the web services
> architecture
>
>
>
> Assaf Arkin wrote,
> > Miles Sabin wrote,
> > > So there's a gap between the parties which are making the visible
> > > commitments (the WS adapters) and the parties which are ultimately
> > > responsible for meeting them (the endpoints). Whether that gap is
> > > narrow and/or easily bridged, or an all consuming abyss is likely
> > > to vary on a case-by-case basis. I'm sure many of us on this list
> > > have experienced both.
> >
> > You have to decide what is the service and what is the application.
> > If you have a message handler there that allows your application to
> > receive messages over HTTP, the message handler is not the service.
> > It's a proxy that takes care of the HTTP/SOAP/etc details on behalf
> > of the actual service.
>
> That's the ideal, certainly.
>
> But the reality is that this is often very hard to do. In a not
> completely implausible senario we might have, say, seven largely
> independent organizations involved: the legacy system vendor, the two
> sites which deploy that system, two consultancies providing the WS
> gateways (one at each site), each using a WS toolkit from a different
> WS tool vendor.
>
> In such circumstances clarity on the boundary between service and
> application is going to take a lot of work. If differences of opinion
> or outlook, or miscommunication, show through in the protocol or the
> way the protocol is used, then RM is likely to be the least of anyone's
> worries.
>
>
>
> Cheers,
>
>
> Miles
Received on Wednesday, 22 January 2003 17:53:56 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 3 July 2007 12:25:13 GMT