OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

ws-rx message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [ws-rx] AS need for ordered delivery?


Duane et al,

I am trying to get my head around the ramifications of this discussion.

The delivery assurance patterns in the first instance concern the retry 
responsibilities of the RM endpoints with respect to at least once 
delivery. Does the sender resend until acknowledged, or does it not? 
Does the receiver acknowledge, or does it not? If the protocol is always 
at-least-once (does not have a mode where delivery drops are tolerated) 
then there is nothing to say on the wire, because the at-least-once 
contract is implicit.

Exactly-once delivery, and ordered delivery, are contracts between the 
receiving endpoints and the consuming application, but have differing 
requirements upon the RM-RM protocol per se.

EO delivery requires that the RMD receive at least once from the RMS, 
and deliver exactly once to the AD (eliminate dups). This implies no 
addition to the ALO-capable inter-RM protocol.

Ordered delivery requires that the protocol communicate sequence ids and 
an end-of-sequence marker (or a logical equivalent). These ids can then 
be used by the RMD to ensure ordered delivery.

In each of these cases the consuming app[s] in the widest sense (the 
application[s] using the stream of inbound messages, which could include 
administrative tools to enforce application behaviours on individual 
consuming apps) could (either by API or configuration) demand of a 
suitably smart  RMD that it observe an EO delivery contract, or an 
ordered delivery contract. They could also demand the combination: that 
the contract is ordered-EO. Other than the presence of sequence 
apparatus on the wire, there is no implication on the inter-RM contract. 
These are all receiver-side behaviours.

There are several stripes of a possible higher level of behaviour of the 
whole system, however, which would effectively be concerned with 
inter-app contracts, communicated by the inter-RM protocol, and stated 
by the sending app to the RMS:

1) That the message must not be accepted unless it can and will be 
delivered to the AD only EO

2) That a sequence must  not be accepted unless it  can and will be 
delivered monotonically to the AD

3) That a sequence must not be accepted unless it can and will be 
delivered monotonically and EO, i.e. without repetition, to the AD

4) That a sequence must not be accepted unless it can and will be 
delivered only as whole, and not in part.

In my view this additional level of contract is questionable, but it's 
not completely obvious that it shouldn't exist. It could be handled 
quite differently, by an out-of-band QoS declaration on the part of the 
receiver, although that makes life quite complicated, in terms of static 
config on a per-message type basis.

Certain distributed applications depend for their overall robustness on 
the use of EO semantics. Attempts to create stratified transactions (to 
use Frank Leymann's term), will fail without EO. However, EO delivery is 
only one part of the inter-app contract (it is also required that 
processing is made EO by transactionally binding processing to the 
reception of the message, or by guarantees of idempotent processing). Is 
there any case where EO delivery does not imply and is not meant to 
imply such EO processing guarantees? If so, then the communication of EO 
as an intent or mandate is not sufficient to usefully express the whole 
inter-app contract. If EO delivery can only be taken usefully to mean EO 
processing then the EO contract statement may be very useful.

The issue of sequences could be thought of differently, and more 
completely, by a hierarchical view of messages: messages A and B are 
dependent upon, children of message M, which in turn could be dependent 
on message X. This would imply that acknowledgements would logically 
apply at each level of the hierarchy (in practice, the last child ack 
would be an ack of the parent). Such a  hierarchy would  enable  
statement of the intent: receive and deliver a whole unit (in effect 
permitting the fragmentation of large messages to permit streaming 
delivery).

(Parenthetically, do we mean by sequencing: simply deliver in order, or 
do we mean: deliver a bounded set in order? The latter requires a 
logical end-of-sequence, the former merely sequence ids.)

The danger, in defining an interoperable protocol, is that all of these 
behaviours and issues get eliminated in pursuit of the laudable goal of 
conciseness, but in fact implementations constantly extend the protocol 
to allow such inter-app contracts to be communicated -- and it then 
ceases to be interoperable in practice.

There are two routes to resolving this, as I see it.

One is to rigourously examine and triage use cases and requirements 
(perhaps best based on existing proprietary RM vendors stating what they 
and their customers actually do in practice, as this is not greenfield 
technology, to say the least).

The second route is  to defer all such issues to a future spec in the 
composable architecture, concerned with QoS or policy. The danger in the 
second approach is that such a policy spec is never written, isn't on 
the right roadmaps etc. And if it is written, it will likely require 
space for policy declarations anyway in the wire protocol.

This last point encourages the thought that there should be (at least) 
some well defined space for inter-app policy declarations, even if the 
vocabulary of policy assertions is not fully defined, and some means for 
faulting in the face of an unprocessable policy. The extent of 
definition of the vocabulary would then become a distinct discussion.

Alastair



Duane Nickull wrote:
> "There is a more relaxed and performant view, which allows streaming 
> delivery: this says: nothing must be delivered to the application that 
> is out of order (or a duplicate in case of EO delivery), even if not all
>
> of the sequence has yet been received."
>
> Alistair:
>
> Is it reasonable for this TC to define a specific implementation
> scenario for "in order delivery" and state it is applicable behind
> service interfaces?  The opacity of service concept frees implementers
> of each service to make those decisions and if this TC tries to reach
> behind the service and mandate a specific implementation, I would
> object.
>
> Also - is it reasonable for an RMD to hold onto every single message
> until it has received the entire sequence?  Why can't RMD deliver
> message 1, 2 and 3 to the AD right away, then send a Nack back to the
> RMS if 4 is missing and 5 comes next.   In this case, it could hold back
> 5 until 4 is present, but given that 1 and 5 may be some considerable
> time apart this may itself be suboptimal.
>
> Question for all:
>
> Is it really the physical delivery or the ability to subsequently
> understand the ordering of the messages that matters?
>
> Duane
>
>
>
>   



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]