Sat Feb 8 14:32:32 EST 2020
switch reactive direction
So a highly available distributed system acts as a reactive network
where the causality switches direction. Each of the nodes can
initiate a state change with all of the other ones following.
I think that is the main idea between lamport timestamps and vector
clocks: focus on causality.
This still doesn't quite fix the "crossing paths" problem. So how is
that usually tackled?
Crossing paths is actually quite common in the following case:
- system A and B both have a reference to some lazy resource C.
- system A and B split
- resource C disappears, but A and B don't notice it
- both A and B have a need for resource C, see it is not there, and
both pick a replacement: A picks D, and B picks E.
- on merge, which should become the consensus?
Maybe this is more convoluted than I set out.
If they both implement the same interface, it probably shouldn't