Asynchronous
Nodes don’t wait for other nodes to receive writes. Most common situation.
Pros:
- System is highly available
- Leader is a single point of failure
- Leads to data loss and downtime
Cons:
- Eventually consistent at best
- Weak durability
Synchronous
All nodes are blocked until every node has the write. In practice, this is not really used for highly available systems because it runs too much risk of seizing up when nodes and connections are unreliable (which is always).
Pros:
- No risk of inconsistency
- High durability
Cons:
- Application blocks until all writes are complete
- System freezes up if a node becomes inaccessible
Semi-synchronous
Nodes wait for a certain number of nodes, or for specific other nodes, to receive writes. A compromise solution supported by some systems.
Pros:
- Durability can be arbitrarily close to that of synchronous
- Less risk of freezing up, especially if depending on a quorum instead of on specific other nodes receiving the write
- More resilient to leader failure
- No data loss or downtime from one leader failure
Cons:
- Still has a risk of freezing up
- Can only respond as quickly as the round trip time to the slowest synchronized node