What distributed transactions forbid
What this article forbids
- Safe, non-blocking atomic commit with a single decision-holder in an asynchronous network.
- Common knowledge over an unreliable channel, and therefore exactly-once delivery.
- Availability better than the product of the participants' availabilities, for any decision that needs unanimity.
- Compensation that undoes an observation (you cannot make someone un-see a value).
- Ordering transactions by real time without either bounded clock uncertainty or communication between them.
Escapes and their prices
| Escape | Price |
|---|---|
| Replicate every single point | Consensus latency |
| Store the decision in the data (Percolator) | A timestamp oracle and cleanup by readers |
| Remove the decision (Calvin) | Advance access sets, no interactivity |
| Abandon atomicity (sagas) | Visible intermediate states and a human queue |
| Move the second write inside the first's boundary (outbox) | Duplicates billed to the consumer |
| Make effects idempotent | A dedup store with a retention window you cannot validate |
| Buy tighter clocks | Money, plainly |