Now we often mention causal ordering as something that would be a great
goal for a distributed system, sometime in the future, but never seem to
talk about achieving it. To that end I would like to naively suggest a way
that it may possibly be implemented.
The implementation is to simply require each producer of events tag
relevant events they produce with a list of events that “caused" the event.
This will usually be zero, sometimes be one and occasionally more than one
event. More on the tagging later.
I hypothesis that this information together with the total (local) ordering
within parts of the event stream could allow the the store or the consumer
of the events to arrange partial causal ordering (much like they would be
able to reorder events with global sequence numbers).
If events are not “caused" by other events then, generally speaking, I
think their ordering wouldn’t be significant to the consumers and so we
don’t need to try and order them. Of course, for success this relies on
the producer tagging events when appropriate.
So, for example, when a producer persists an event A that it knows was
“caused by” events B and C, it appends to A referenced (globally unique
ids) for B and C. Of course, another producer may produce an event D that
was “caused by” B, so it would append to D a reference (GUID) for B.
A <- B, C
D <- B
...
If this is done a partial graph of causal ordering is transmitted with the
events when the producers think it necessary, since the producer is really
in the best position to decide what is casual and what is not. The store
or the consumer could arrange to provide or consume the events in the right
order if needed.
I don’t think this would be hard or inefficient to implement. A real event
could just be wrapped in an envelope class that contained the event and a
collection of GUID for the causing events. This envelope could also be
where other (transparent) information about the event is kept (for the read
side etc).
Remember its local ordering (e.g. sequence numbers for each actor’s event)
plus a partial graphs of causal ordering combined that I think could do the
trick for CQRS. Does that sound like it could work or am I missing
something obvious? I haven’t got a proof for any of this ;-)
Cheers,
Ashley.
--
>>>>>>>>>> Read the docs: http://akka.io/docs/
>>>>>>>>>> Check the FAQ:
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
---
You received this message because you are subscribed to the Google Groups "Akka
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to akka-user+unsubscr...@googlegroups.com.
To post to this group, send email to akka-user@googlegroups.com.
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.