Database Replication

Database Replication

Difficulty: ⭐⭐⭐ (Intermediate)

Overview

Database replication is a technique that copies identical data to multiple nodes to improve availability, fault tolerance, and read performance. In this document, you will learn about various replication strategies, consistency guarantee mechanisms, and failure recovery methods.


Table of Contents

  1. Concept and Purpose of Replication
  2. Single-Leader Replication
  3. Multi-Leader Replication
  4. Leaderless Replication
  5. Synchronous/Asynchronous Replication
  6. Replication Lag and Consistency Issues
  7. Failure Recovery and Leader Election
  8. Quorum and Consistency Levels
  9. Practice Problems
  10. Next Steps
  11. References

1. Concept and Purpose of Replication

Why Replication is Needed

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Main Purposes of Replication                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  1. High Availability                                           β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                            β”‚
β”‚     β”‚ Primary β”‚ ──X──>  β”‚ Replica β”‚  ← When Primary fails,     β”‚
β”‚     β”‚  (Down) β”‚         β”‚ (Active)β”‚    Replica maintains       β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    service                  β”‚
β”‚                                                                 β”‚
β”‚  2. Read Scalability                                            β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                β”‚
β”‚     β”‚ Primary │────┬────> Replica 1 ←─── Read                  β”‚
β”‚     β”‚ (Write) β”‚    β”œβ”€β”€β”€β”€> Replica 2 ←─── Read                  β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    └────> Replica 3 ←─── Read                  β”‚
β”‚                                                                 β”‚
β”‚  3. Geographical Distribution                                   β”‚
β”‚                                                                 β”‚
β”‚     Seoul ──────────────> Tokyo ──────────────> US-West        β”‚
β”‚     [Primary]            [Replica]             [Replica]       β”‚
β”‚     Latency: 0ms         Latency: ~30ms        Latency: ~100ms β”‚
β”‚                                                                 β”‚
β”‚  4. Data Protection                                             β”‚
β”‚     - Hardware failure protection                               β”‚
β”‚     - Data center failure protection                            β”‚
β”‚     - Disaster Recovery                                         β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Types of Replication Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                Replication Architecture Comparison               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  1. Single-Leader                                               β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”                                                 β”‚
β”‚     β”‚ Leader β”‚ ──Write──>                                      β”‚
β”‚     β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                                                 β”‚
β”‚         β”‚ Replicate                                            β”‚
β”‚     β”Œβ”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                          β”‚
β”‚     β–Ό       β–Ό       β–Ό                                          β”‚
β”‚  Follower Follower Follower                                    β”‚
β”‚                                                                 β”‚
β”‚  2. Multi-Leader                                                β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚
β”‚     β”‚Leader 1β”‚<───>β”‚Leader 2β”‚<───>β”‚Leader 3β”‚                   β”‚
β”‚     β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                   β”‚
β”‚         β”‚              β”‚              β”‚                        β”‚
β”‚      Follower       Follower       Follower                    β”‚
β”‚                                                                 β”‚
β”‚  3. Leaderless                                                  β”‚
β”‚       β”Œβ”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”                           β”‚
β”‚       β”‚Node 1β”‚   β”‚Node 2β”‚   β”‚Node 3β”‚                           β”‚
β”‚       β””β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”˜                           β”‚
β”‚           β–²          β–²          β–²                              β”‚
β”‚           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                              β”‚
β”‚              All nodes are equal                                β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. Single-Leader Replication

How It Works

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  Single-Leader Replication                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Client                                                         β”‚
β”‚    β”‚                                                            β”‚
β”‚    β”‚ Write Request                                              β”‚
β”‚    β–Ό                                                            β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
β”‚  β”‚              Leader (Primary)            β”‚                    β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚                    β”‚
β”‚  β”‚  β”‚         Transaction Log          β”‚    β”‚                    β”‚
β”‚  β”‚  β”‚  [1] INSERT INTO users...        β”‚    β”‚                    β”‚
β”‚  β”‚  β”‚  [2] UPDATE orders...            β”‚    β”‚                    β”‚
β”‚  β”‚  β”‚  [3] DELETE from cart...         β”‚    β”‚                    β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚                    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚
β”‚                    β”‚                                            β”‚
β”‚          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                  β”‚
β”‚          β”‚  Replication Log  β”‚                                  β”‚
β”‚          β–Ό         β–Ό         β–Ό                                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                      β”‚
β”‚  β”‚ Follower1 β”‚ β”‚ Follower2 β”‚ β”‚ Follower3 β”‚                      β”‚
β”‚  β”‚ (Replica) β”‚ β”‚ (Replica) β”‚ β”‚ (Replica) β”‚                      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜                      β”‚
β”‚        β”‚             β”‚             β”‚                            β”‚
β”‚        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                            β”‚
β”‚                      β”‚                                          β”‚
β”‚                Read Requests                                    β”‚
β”‚                      β–²                                          β”‚
β”‚                   Clients                                       β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Replication Methods

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Replication Methods Comparison                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  1. Statement-Based Replication                                 β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”‚
β”‚     β”‚  Leader: INSERT INTO users VALUES (...)  β”‚                β”‚
β”‚     β”‚            β”‚                             β”‚                β”‚
β”‚     β”‚            β–Ό                             β”‚                β”‚
β”‚     β”‚  Follower: INSERT INTO users VALUES (...) β”‚ ← SQL replay  β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚
β”‚     Problem: Non-deterministic functions like NOW(), RAND()     β”‚
β”‚                                                                 β”‚
β”‚  2. Write-Ahead Log (WAL) Shipping                              β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”‚
β”‚     β”‚  Leader WAL:                             β”‚                β”‚
β”‚     β”‚  [Page 5, Offset 120, Data: 0x45AB...]   β”‚                β”‚
β”‚     β”‚            β”‚                             β”‚                β”‚
β”‚     β”‚            β–Ό                             β”‚                β”‚
β”‚     β”‚  Follower: Apply identically byte by byteβ”‚ ← Low-level   β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   replication  β”‚
β”‚     Problem: Version compatibility (downtime on upgrade)        β”‚
β”‚                                                                 β”‚
β”‚  3. Row-Based (Logical) Replication                             β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”‚
β”‚     β”‚  Change Log:                             β”‚                β”‚
β”‚     β”‚  {table: "users",                        β”‚                β”‚
β”‚     β”‚   op: "INSERT",                          β”‚                β”‚
β”‚     β”‚   new_row: {id:1, name:"Kim"}}           β”‚ ← Logical     β”‚
β”‚     β”‚            β”‚                             β”‚    changes     β”‚
β”‚     β”‚            β–Ό                             β”‚                β”‚
β”‚     β”‚  Follower: Apply row data                β”‚                β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚
β”‚     Advantages: Version compatible, flexible replication        β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

PostgreSQL Streaming Replication Example

-- Primary configuration (postgresql.conf)
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB

-- Primary: Create replication slot
SELECT * FROM pg_create_physical_replication_slot('replica1_slot');

-- Standby configuration (postgresql.conf)
primary_conninfo = 'host=primary-host port=5432 user=replicator'
primary_slot_name = 'replica1_slot'

-- Check replication status
SELECT
    client_addr,
    state,
    sent_lsn,
    write_lsn,
    flush_lsn,
    replay_lsn,
    pg_wal_lsn_diff(sent_lsn, replay_lsn) AS replication_lag
FROM pg_stat_replication;

MySQL Replication Configuration Example

-- Master configuration (my.cnf)
-- server-id=1
-- log_bin=mysql-bin
-- binlog_format=ROW

-- Master: Create replication user
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
SHOW MASTER STATUS;

-- Slave configuration
CHANGE MASTER TO
    MASTER_HOST='master-host',
    MASTER_USER='repl',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=154;

START SLAVE;
SHOW SLAVE STATUS\G

3. Multi-Leader Replication

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               Multi-Leader Replication                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚    Data Center A              Data Center B                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                 β”‚
β”‚  β”‚    Leader A     β”‚ <────> β”‚    Leader B     β”‚                 β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚        β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚                 β”‚
β”‚  β”‚  β”‚ users: 1  β”‚  β”‚  Sync  β”‚  β”‚ users: 1  β”‚  β”‚                 β”‚
β”‚  β”‚  β”‚ orders: 5 β”‚  β”‚ <────> β”‚  β”‚ orders: 5 β”‚  β”‚                 β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚        β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚                 β”‚
β”‚  β”‚       β”‚         β”‚        β”‚       β”‚         β”‚                 β”‚
β”‚  β”‚   β”Œβ”€β”€β”€β”΄β”€β”€β”€β”     β”‚        β”‚   β”Œβ”€β”€β”€β”΄β”€β”€β”€β”     β”‚                 β”‚
β”‚  β”‚   β–Ό       β–Ό     β”‚        β”‚   β–Ό       β–Ό     β”‚                 β”‚
β”‚  β”‚ Follower Followerβ”‚        β”‚ Follower Followerβ”‚                β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                 β”‚
β”‚         β–²                          β–²                            β”‚
β”‚         β”‚                          β”‚                            β”‚
β”‚    [Clients A]                [Clients B]                       β”‚
β”‚    Latency: ~1ms              Latency: ~1ms                     β”‚
β”‚                                                                 β”‚
β”‚  Advantages:                                                    β”‚
β”‚  - Low write latency at each data center                        β”‚
β”‚  - Can continue writing at other location on DC failure         β”‚
β”‚                                                                 β”‚
β”‚  Disadvantages:                                                 β”‚
β”‚  - Conflict resolution needed                                   β”‚
β”‚  - Increased complexity                                         β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Write Conflict Problem

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Write Conflict Scenario                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Time ────────────────────────────────────────────────>         β”‚
β”‚                                                                 β”‚
β”‚  Leader A:                                                      β”‚
β”‚    T1: UPDATE users SET name='Kim' WHERE id=1                   β”‚
β”‚         β”‚                                                       β”‚
β”‚         β–Ό (replicate)                                           β”‚
β”‚                                                                 β”‚
β”‚  Leader B:                                                      β”‚
β”‚    T1: UPDATE users SET name='Lee' WHERE id=1                   β”‚
β”‚         β”‚                                                       β”‚
β”‚         β–Ό (replicate)                                           β”‚
β”‚                                                                 β”‚
β”‚  Result:                                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚  β”‚  Leader A   β”‚         β”‚  Leader B   β”‚                       β”‚
β”‚  β”‚ name='Lee'? β”‚   β‰      β”‚ name='Kim'? β”‚   Conflict!           β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Conflict Resolution Strategies

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Conflict Resolution Strategies                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  1. Last Write Wins (LWW)                                       β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚     β”‚  Write A: {value: "Kim", timestamp: 100}    β”‚            β”‚
β”‚     β”‚  Write B: {value: "Lee", timestamp: 105}    β”‚            β”‚
β”‚     β”‚                                             β”‚            β”‚
β”‚     β”‚  Result: "Lee" (timestamp 105 > 100)        β”‚            β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β”‚     Problem: Possible data loss                                 β”‚
β”‚                                                                 β”‚
β”‚  2. Version Vector (Vector Clock)                               β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚     β”‚  Node A: {value: "Kim", version: [A:1, B:0]} β”‚            β”‚
β”‚     β”‚  Node B: {value: "Lee", version: [A:0, B:1]} β”‚            β”‚
β”‚     β”‚                                             β”‚            β”‚
β”‚     β”‚  Detect concurrent writes β†’ Merge needed     β”‚            β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β”‚                                                                 β”‚
β”‚  3. CRDT (Conflict-free Replicated Data Type)                   β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚     β”‚  G-Counter: Maintain counter per node        β”‚            β”‚
β”‚     β”‚  Node A: +3                                 β”‚            β”‚
β”‚     β”‚  Node B: +2                                 β”‚            β”‚
β”‚     β”‚  Total: 3 + 2 = 5 (automatic merge)         β”‚            β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β”‚                                                                 β”‚
β”‚  4. Custom Resolution Logic                                     β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚     β”‚  Example: Shopping cart conflict             β”‚            β”‚
β”‚     β”‚  Cart A: [Item1, Item2]                     β”‚            β”‚
β”‚     β”‚  Cart B: [Item1, Item3]                     β”‚            β”‚
β”‚     β”‚  Merge: [Item1, Item2, Item3] (Union)       β”‚            β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Replication Topologies

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Replication Topology Types                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  1. Circular                                                    β”‚
β”‚       β”Œβ”€β”€β”€β”                                                    β”‚
β”‚       β”‚ A β”‚ ──────────┐                                        β”‚
β”‚       β””β”€β”¬β”€β”˜           β”‚                                        β”‚
β”‚         β”‚           β”Œβ”€β–Όβ”€β”                                      β”‚
β”‚         β”‚           β”‚ B β”‚                                      β”‚
β”‚         β”‚           β””β”€β”¬β”€β”˜                                      β”‚
β”‚       β”Œβ”€β–Όβ”€β”           β”‚                                        β”‚
β”‚       β”‚ D β”‚ <β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                        β”‚
β”‚       β””β”€β”¬β”€β”˜           β”‚                                        β”‚
β”‚         └──> β”Œβ”€β”€β”€β” <β”€β”€β”˜                                        β”‚
β”‚              β”‚ C β”‚                                              β”‚
β”‚              β””β”€β”€β”€β”˜                                              β”‚
β”‚     Risk of entire replication stopping on failure              β”‚
β”‚                                                                 β”‚
β”‚  2. Star                                                        β”‚
β”‚           β”Œβ”€β”€β”€β”                                                β”‚
β”‚           β”‚ B β”‚                                                β”‚
β”‚           β””β”€β”¬β”€β”˜                                                β”‚
β”‚       β”Œβ”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”                                            β”‚
β”‚       β”‚ A │─┼─│ C β”‚                                            β”‚
β”‚       β””β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”˜                                            β”‚
β”‚           β”Œβ”€β–Όβ”€β”                                                β”‚
β”‚           β”‚Hubβ”‚  ← Vulnerable when central node fails          β”‚
β”‚           β””β”€β”€β”€β”˜                                                β”‚
β”‚                                                                 β”‚
β”‚  3. All-to-All                                                  β”‚
β”‚       β”Œβ”€β”€β”€β”     β”Œβ”€β”€β”€β”                                          β”‚
β”‚       β”‚ A β”‚ ←──→│ B β”‚                                          β”‚
β”‚       β””β”€β”¬β”€β”˜     β””β”€β”¬β”€β”˜                                          β”‚
β”‚         β”‚    β•² β•±  β”‚                                            β”‚
β”‚         β”‚     β•³   β”‚                                            β”‚
β”‚         β”‚    β•± β•²  β”‚                                            β”‚
β”‚       β”Œβ”€β–Όβ”€β”     β”Œβ”€β–Όβ”€β”                                          β”‚
β”‚       β”‚ D β”‚ ←──→│ C β”‚                                          β”‚
β”‚       β””β”€β”€β”€β”˜     β””β”€β”€β”€β”˜                                          β”‚
β”‚     High fault tolerance, complex management                    β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4. Leaderless Replication

Dynamo-Style Replication

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Leaderless Replication                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Characteristics:                                               β”‚
β”‚  - All nodes can read/write                                     β”‚
β”‚  - Client sends requests to multiple nodes simultaneously       β”‚
β”‚  - Used in Amazon Dynamo, Cassandra, Riak, etc.                 β”‚
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                        Client                            β”‚   β”‚
β”‚  β”‚                          β”‚                               β”‚   β”‚
β”‚  β”‚           Write: key=X, value=V                          β”‚   β”‚
β”‚  β”‚           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”‚   β”‚
β”‚  β”‚           β–Ό              β–Ό              β–Ό                β”‚   β”‚
β”‚  β”‚       β”Œβ”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”              β”‚   β”‚
β”‚  β”‚       β”‚Node 1β”‚      β”‚Node 2β”‚      β”‚Node 3β”‚              β”‚   β”‚
β”‚  β”‚       β”‚ X=V  β”‚      β”‚ X=V  β”‚      β”‚(Down)β”‚              β”‚   β”‚
β”‚  β”‚       β”‚ βœ“    β”‚      β”‚ βœ“    β”‚      β”‚  βœ—   β”‚              β”‚   β”‚
β”‚  β”‚       β””β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”˜              β”‚   β”‚
β”‚  β”‚                                                          β”‚   β”‚
β”‚  β”‚   N=3 (total replicas), W=2 (required write successes)   β”‚   β”‚
β”‚  β”‚   2 nodes succeeded β†’ Write successful!                  β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Read Repair and Anti-Entropy

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Data Repair Mechanisms                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  1. Read Repair (Repair on Read)                                β”‚
β”‚                                                                 β”‚
β”‚     Client                                                      β”‚
β”‚        β”‚ Read key=X                                             β”‚
β”‚        β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚
β”‚        β–Ό              β–Ό                     β–Ό                   β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”              β”Œβ”€β”€β”€β”€β”€β”€β”                β”‚
β”‚    β”‚Node 1β”‚      β”‚Node 2β”‚              β”‚Node 3β”‚                β”‚
β”‚    β”‚X=V2  β”‚      β”‚X=V2  β”‚              β”‚X=V1  β”‚ ← Stale version β”‚
β”‚    β”‚ver:2 β”‚      β”‚ver:2 β”‚              β”‚ver:1 β”‚                β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”˜              β””β”€β”€β”€β”€β”€β”€β”˜                β”‚
β”‚        β”‚              β”‚                     β”‚                   β”‚
β”‚        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β”‚
β”‚                       β”‚                                         β”‚
β”‚                       β–Ό                                         β”‚
β”‚              Client: Compare versions                           β”‚
β”‚              Return latest version V2                           β”‚
β”‚              Request V2 update to Node 3 ←── Read Repair        β”‚
β”‚                                                                 β”‚
β”‚  2. Anti-Entropy Process (Background Sync)                      β”‚
β”‚                                                                 β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚    β”‚           Background Anti-Entropy Process            β”‚    β”‚
β”‚    β”‚                                                      β”‚    β”‚
β”‚    β”‚  Node 1          Node 2          Node 3              β”‚    β”‚
β”‚    β”‚  β”Œβ”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”              β”‚    β”‚
β”‚    β”‚  β”‚ A  β”‚         β”‚ A  β”‚          β”‚ A  β”‚              β”‚    β”‚
β”‚    β”‚  β”‚ B  β”‚  <────> β”‚ B  β”‚  <────>  β”‚ B  β”‚              β”‚    β”‚
β”‚    β”‚  β”‚ C  β”‚ Merkle  β”‚ C  β”‚  Merkle  β”‚ C* β”‚ ← Mismatch   β”‚    β”‚
β”‚    β”‚  β”‚ D  β”‚  Tree   β”‚ D  β”‚   Tree   β”‚ D  β”‚              β”‚    β”‚
β”‚    β”‚  β””β”€β”€β”€β”€β”˜ Compare β””β”€β”€β”€β”€β”˜  Compare β””β”€β”€β”€β”€β”˜              β”‚    β”‚
β”‚    β”‚                                                      β”‚    β”‚
β”‚    β”‚  Efficient difference detection and sync via Merkle  β”‚    β”‚
β”‚    β”‚  Tree                                                β”‚    β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Sloppy Quorum and Hinted Handoff

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Sloppy Quorum & Hinted Handoff                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Strict Quorum: Read/write only from designated nodes           β”‚
β”‚                                                                 β”‚
β”‚  Sloppy Quorum: Other nodes substitute when some fail           β”‚
β”‚                                                                 β”‚
β”‚  Normal situation:                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”                                β”‚
β”‚  β”‚Node 1β”‚   β”‚Node 2β”‚   β”‚Node 3β”‚   ← Home nodes for key X       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”˜                                β”‚
β”‚                                                                 β”‚
β”‚  When Node 3 fails:                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”                     β”‚
β”‚  β”‚Node 1β”‚   β”‚Node 2β”‚   β”‚(Down)β”‚   β”‚Node 4β”‚                     β”‚
β”‚  β”‚ X=V  β”‚   β”‚ X=V  β”‚   β”‚      β”‚   β”‚ X=V* β”‚ ← Store with Hint   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”˜                     β”‚
β”‚                                                                 β”‚
β”‚  *Hinted Handoff:                                               β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                  β”‚
β”‚  β”‚  Data stored in Node 4:                   β”‚                  β”‚
β”‚  β”‚  {                                        β”‚                  β”‚
β”‚  β”‚    key: "X",                              β”‚                  β”‚
β”‚  β”‚    value: "V",                            β”‚                  β”‚
β”‚  β”‚    hint: "Node 3"  ← Original target node β”‚                  β”‚
β”‚  β”‚  }                                        β”‚                  β”‚
β”‚  β”‚                                           β”‚                  β”‚
β”‚  β”‚  When Node 3 recovers β†’ Transfer then     β”‚                  β”‚
β”‚  β”‚  delete                                   β”‚                  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                  β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5. Synchronous/Asynchronous Replication

Synchronous Replication

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Synchronous Replication                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Client          Leader           Follower 1      Follower 2    β”‚
β”‚    β”‚               β”‚                  β”‚               β”‚         β”‚
β”‚    β”‚  Write X=V    β”‚                  β”‚               β”‚         β”‚
β”‚    │──────────────>β”‚                  β”‚               β”‚         β”‚
β”‚    β”‚               β”‚  Replicate       β”‚               β”‚         β”‚
β”‚    β”‚               │─────────────────>β”‚               β”‚         β”‚
β”‚    β”‚               │─────────────────────────────────>β”‚         β”‚
β”‚    β”‚               β”‚                  β”‚               β”‚         β”‚
β”‚    β”‚               β”‚   ACK            β”‚               β”‚         β”‚
β”‚    β”‚               β”‚<─────────────────│               β”‚         β”‚
β”‚    β”‚               β”‚<─────────────────────────────────│         β”‚
β”‚    β”‚               β”‚                  β”‚               β”‚         β”‚
β”‚    β”‚   ACK         β”‚  (After all replicated)         β”‚         β”‚
β”‚    β”‚<──────────────│                  β”‚               β”‚         β”‚
β”‚    β”‚               β”‚                  β”‚               β”‚         β”‚
β”‚                                                                 β”‚
β”‚  Advantages:                                                    β”‚
β”‚  - Strong consistency guaranteed                                β”‚
β”‚  - No data loss                                                 β”‚
β”‚                                                                 β”‚
β”‚  Disadvantages:                                                 β”‚
β”‚  - Slow write latency (wait for all replicas)                   β”‚
β”‚  - Cannot write when replica fails                              β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Asynchronous Replication

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Asynchronous Replication                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Client          Leader           Follower 1      Follower 2    β”‚
β”‚    β”‚               β”‚                  β”‚               β”‚         β”‚
β”‚    β”‚  Write X=V    β”‚                  β”‚               β”‚         β”‚
β”‚    │──────────────>β”‚                  β”‚               β”‚         β”‚
β”‚    β”‚               β”‚                  β”‚               β”‚         β”‚
β”‚    β”‚   ACK         β”‚  (Immediate response)           β”‚         β”‚
β”‚    β”‚<──────────────│                  β”‚               β”‚         β”‚
β”‚    β”‚               β”‚                  β”‚               β”‚         β”‚
β”‚    β”‚               β”‚  Replicate (background)         β”‚         β”‚
β”‚    β”‚               │─────────────────>β”‚               β”‚         β”‚
β”‚    β”‚               │─────────────────────────────────>β”‚         β”‚
β”‚    β”‚               β”‚                  β”‚               β”‚         β”‚
β”‚                                                                 β”‚
β”‚  Advantages:                                                    β”‚
β”‚  - Fast write response                                          β”‚
β”‚  - Replica failure doesn't affect writes                        β”‚
β”‚                                                                 β”‚
β”‚  Disadvantages:                                                 β”‚
β”‚  - Possible data loss on leader failure                         β”‚
β”‚  - Read consistency issues (stale read)                         β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Semi-Synchronous Replication

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  Semi-Synchronous Replication                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Replicate synchronously to at least 1 replica, async for rest  β”‚
β”‚                                                                 β”‚
β”‚  Client          Leader        Sync Follower   Async Followers  β”‚
β”‚    β”‚               β”‚                β”‚               β”‚           β”‚
β”‚    β”‚  Write X=V    β”‚                β”‚               β”‚           β”‚
β”‚    │──────────────>β”‚                β”‚               β”‚           β”‚
β”‚    β”‚               β”‚  Replicate     β”‚               β”‚           β”‚
β”‚    β”‚               │───────────────>β”‚               β”‚           β”‚
β”‚    β”‚               β”‚  ACK           β”‚               β”‚           β”‚
β”‚    β”‚               β”‚<───────────────│               β”‚           β”‚
β”‚    β”‚   ACK         β”‚                β”‚               β”‚           β”‚
β”‚    β”‚<──────────────│                β”‚               β”‚           β”‚
β”‚    β”‚               β”‚  Replicate (async)             β”‚           β”‚
β”‚    β”‚               │───────────────────────────────>β”‚           β”‚
β”‚    β”‚               β”‚                β”‚               β”‚           β”‚
β”‚                                                                 β”‚
β”‚  MySQL Semi-Sync Configuration:                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  -- Master                                                 β”‚ β”‚
β”‚  β”‚  SET GLOBAL rpl_semi_sync_master_enabled = 1;              β”‚ β”‚
β”‚  β”‚  SET GLOBAL rpl_semi_sync_master_timeout = 10000; -- 10s   β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  -- Slave                                                  β”‚ β”‚
β”‚  β”‚  SET GLOBAL rpl_semi_sync_slave_enabled = 1;               β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

6. Replication Lag and Consistency Issues

Replication Lag

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Replication Lag Scenario                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Time ────────────────────────────────────────────────>         β”‚
β”‚                                                                 β”‚
β”‚  T0      T1       T2       T3       T4       T5                 β”‚
β”‚  β”‚       β”‚        β”‚        β”‚        β”‚        β”‚                  β”‚
β”‚  Leader: Write    β”‚        β”‚        β”‚        β”‚                  β”‚
β”‚          X=1      β”‚        β”‚        β”‚        β”‚                  β”‚
β”‚           β”‚       β”‚        β”‚        β”‚        β”‚                  β”‚
β”‚           β”‚       β–Ό        β”‚        β”‚        β”‚                  β”‚
β”‚  Follower:        X=1      β”‚        β”‚        β”‚                  β”‚
β”‚                   (delay)  β”‚        β”‚        β”‚                  β”‚
β”‚                            β”‚        β”‚        β”‚                  β”‚
β”‚  Client A:        Read from Leader  β”‚        β”‚                  β”‚
β”‚                   X=1 βœ“    β”‚        β”‚        β”‚                  β”‚
β”‚                            β”‚        β”‚        β”‚                  β”‚
β”‚  Client B:                 Read from Followerβ”‚                  β”‚
β”‚                            X=??? ← At T2,                       β”‚
β”‚                                    Follower not yet replicated  β”‚
β”‚                                    β†’ Stale Read!                β”‚
β”‚                                                                 β”‚
β”‚  Replication Lag = T1(Leader Write) ~ T2(Follower Apply) time   β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Consistency Guarantee Levels

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Consistency Guarantee Levels                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  1. Read-Your-Writes                                            β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚     β”‚  User A: Write profile photo                        β”‚    β”‚
β”‚     β”‚          β”‚                                          β”‚    β”‚
β”‚     β”‚          β–Ό                                          β”‚    β”‚
β”‚     β”‚  User A: Read profile β†’ Should see new photo        β”‚    β”‚
β”‚     β”‚                                                     β”‚    β”‚
β”‚     β”‚  Solutions:                                          β”‚    β”‚
β”‚     β”‚  - Always read own changes from Leader              β”‚    β”‚
β”‚     β”‚  - Or timestamp-based read position                 β”‚    β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                 β”‚
β”‚  2. Monotonic Reads                                             β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚     β”‚  T1: Read from Follower A β†’ X=2                     β”‚    β”‚
β”‚     β”‚  T2: Read from Follower B β†’ X=1  ← Problem!         β”‚    β”‚
β”‚     β”‚                                                     β”‚    β”‚
β”‚     β”‚  Appears as if time went backwards                  β”‚    β”‚
β”‚     β”‚                                                     β”‚    β”‚
β”‚     β”‚  Solutions:                                          β”‚    β”‚
β”‚     β”‚  - Read from same replica per user                  β”‚    β”‚
β”‚     β”‚  - Version-based reads                              β”‚    β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                 β”‚
β”‚  3. Consistent Prefix Reads (Causality Preservation)            β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚     β”‚  Chat:                                              β”‚    β”‚
β”‚     β”‚  A: "How's the weather in Seoul?"  (T1)             β”‚    β”‚
β”‚     β”‚  B: "It's sunny!"                  (T2)             β”‚    β”‚
β”‚     β”‚                                                     β”‚    β”‚
β”‚     β”‚  With replication lag:                              β”‚    β”‚
β”‚     β”‚  What C sees:                                       β”‚    β”‚
β”‚     β”‚  B: "It's sunny!"  ← T2 arrives first               β”‚    β”‚
β”‚     β”‚  A: "How's the weather in Seoul?"  ← T1 arrives     β”‚    β”‚
β”‚     β”‚                                        later        β”‚    β”‚
β”‚     β”‚                                                     β”‚    β”‚
β”‚     β”‚  Solutions:                                          β”‚    β”‚
β”‚     β”‚  - Store causally related data in same partition    β”‚    β”‚
β”‚     β”‚  - Causality tracking                               β”‚    β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Replication Lag Monitoring

-- PostgreSQL replication lag check
SELECT
    client_addr,
    state,
    pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS lag_bytes,
    EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp())) AS lag_seconds
FROM pg_stat_replication;

-- MySQL replication lag check
SHOW SLAVE STATUS\G
-- Check Seconds_Behind_Master value

-- Lag-based routing logic (application)
/*
def get_connection(query_type, max_lag_seconds=5):
    if query_type == 'write':
        return master_connection

    for replica in replicas:
        if replica.lag_seconds < max_lag_seconds:
            return replica.connection

    # When all replicas have high lag, read from master
    return master_connection
*/

7. Failure Recovery and Leader Election

Follower Failure Recovery

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Follower Failure Recovery                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  1. Catch-up Recovery                                           β”‚
β”‚                                                                 β”‚
β”‚     Normal state:                                               β”‚
β”‚     Leader:    [1] [2] [3] [4] [5] [6]                          β”‚
β”‚     Follower:  [1] [2] [3]                                      β”‚
β”‚                         β–²                                       β”‚
β”‚                         └── Remembers last applied position     β”‚
β”‚                                                                 β”‚
β”‚     After Follower recovers:                                    β”‚
β”‚     Leader:    [1] [2] [3] [4] [5] [6] [7] [8]                  β”‚
β”‚     Follower:  [1] [2] [3] β†’ [4] [5] [6] [7] [8]               β”‚
β”‚                             ↑                                   β”‚
β”‚                             Catch-up                            β”‚
β”‚                                                                 β”‚
β”‚  2. Recovery Process                                            β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚     β”‚  1. Follower restarts                              β”‚     β”‚
β”‚     β”‚  2. Check last applied LSN/binlog position         β”‚     β”‚
β”‚     β”‚  3. Request logs after that position from Leader   β”‚     β”‚
β”‚     β”‚  4. Catch up while applying logs                   β”‚     β”‚
β”‚     β”‚  5. Resume real-time replication                   β”‚     β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Leader Failure and Failover

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Leader Failure Recovery (Failover)            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Failover Process:                                              β”‚
β”‚                                                                 β”‚
β”‚  Step 1: Failure Detection                                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”        Heartbeat failure                    β”‚   β”‚
β”‚  β”‚   β”‚ Leader β”‚ ────X──── (3 consecutive)                   β”‚   β”‚
β”‚  β”‚   β”‚ (Down) β”‚                                             β”‚   β”‚
β”‚  β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜        Timeout: 30 seconds                  β”‚   β”‚
β”‚  β”‚                                                          β”‚   β”‚
β”‚  β”‚   Followers: "No Leader response!" β†’ Start Failover      β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β”‚  Step 2: New Leader Election                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚   Follower A: LSN = 1000                                 β”‚   β”‚
β”‚  β”‚   Follower B: LSN = 1050  ← Most up-to-date β†’ New Leader β”‚   β”‚
β”‚  β”‚   Follower C: LSN = 980                                  β”‚   β”‚
β”‚  β”‚                                                          β”‚   β”‚
β”‚  β”‚   Election criteria:                                     β”‚   β”‚
β”‚  β”‚   1. Node with most up-to-date data                      β”‚   β”‚
β”‚  β”‚   2. Node priority                                       β”‚   β”‚
β”‚  β”‚   3. Consensus algorithm (Raft, Paxos)                   β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β”‚  Step 3: Client Reconnection                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚   Clients ───── (old) Leader: 10.0.0.1                   β”‚   β”‚
β”‚  β”‚           β•²                                              β”‚   β”‚
β”‚  β”‚            ╲─── (new) Leader: 10.0.0.2                   β”‚   β”‚
β”‚  β”‚                                                          β”‚   β”‚
β”‚  β”‚   Methods:                                               β”‚   β”‚
β”‚  β”‚   - DNS update                                           β”‚   β”‚
β”‚  β”‚   - Virtual IP (VIP) transfer                            β”‚   β”‚
β”‚  β”‚   - Proxy/Load Balancer configuration change             β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Failover Problems

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Failover Problems                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  1. Data Loss (with async replication)                          β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚     β”‚  Old Leader: [1][2][3][4][5]                       β”‚     β”‚
β”‚     β”‚                          ↑ Not replicated          β”‚     β”‚
β”‚     β”‚  New Leader:  [1][2][3][4]                         β”‚     β”‚
β”‚     β”‚                                                    β”‚     β”‚
β”‚     β”‚  Write [5] is lost!                                β”‚     β”‚
β”‚     β”‚                                                    β”‚     β”‚
β”‚     β”‚  When Old Leader recovers: What about [5]?         β”‚     β”‚
β”‚     β”‚  β†’ Typically discarded (conflict prevention)       β”‚     β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                                                                 β”‚
β”‚  2. Split Brain (Two Leaders problem)                           β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚     β”‚        Network Partition                           β”‚     β”‚
β”‚     β”‚                                                    β”‚     β”‚
β”‚     β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”       β•³        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚     β”‚
β”‚     β”‚  β”‚Old     β”‚                β”‚New     β”‚             β”‚     β”‚
β”‚     β”‚  β”‚Leader  β”‚  Network split β”‚Leader  β”‚             β”‚     β”‚
β”‚     β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚     β”‚
β”‚     β”‚       β–²                          β–²                β”‚     β”‚
β”‚     β”‚  Clients A                  Clients B             β”‚     β”‚
β”‚     β”‚  (continue writing)         (continue writing)    β”‚     β”‚
β”‚     β”‚                                                    β”‚     β”‚
β”‚     β”‚  β†’ Data inconsistency occurs!                      β”‚     β”‚
β”‚     β”‚                                                    β”‚     β”‚
β”‚     β”‚  Solutions:                                        β”‚     β”‚
β”‚     β”‚  - Fencing (STONITH: Shoot The Other Node In Head)β”‚     β”‚
β”‚     β”‚  - Force shutdown Old Leader                       β”‚     β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                                                                 β”‚
β”‚  3. Timeout Configuration Dilemma                               β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚     β”‚  Timeout too short:                                β”‚     β”‚
β”‚     β”‚  - Unnecessary failover on network delay/load      β”‚     β”‚
β”‚     β”‚  - System instability                              β”‚     β”‚
β”‚     β”‚                                                    β”‚     β”‚
β”‚     β”‚  Timeout too long:                                 β”‚     β”‚
β”‚     β”‚  - Delayed recovery on actual failure              β”‚     β”‚
β”‚     β”‚  - Increased service downtime                      β”‚     β”‚
β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Leader Election Algorithm

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Raft Leader Election                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  States: Follower, Candidate, Leader                            β”‚
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚                                                           β”‚  β”‚
β”‚  β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     Election      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚  β”‚
β”‚  β”‚    β”‚          β”‚     Timeout       β”‚           β”‚          β”‚  β”‚
β”‚  β”‚    β”‚ Follower β”‚ ─────────────────>β”‚ Candidate β”‚          β”‚  β”‚
β”‚  β”‚    β”‚          β”‚                   β”‚           β”‚          β”‚  β”‚
β”‚  β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜          β”‚  β”‚
β”‚  β”‚         β–²                               β”‚                β”‚  β”‚
β”‚  β”‚         β”‚ Discovers                     β”‚ Receives       β”‚  β”‚
β”‚  β”‚         β”‚ current                       β”‚ majority       β”‚  β”‚
β”‚  β”‚         β”‚ leader                        β”‚ votes          β”‚  β”‚
β”‚  β”‚         β”‚                               β–Ό                β”‚  β”‚
β”‚  β”‚         β”‚                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”‚  β”‚
β”‚  β”‚         └─────────────────────────│  Leader  β”‚           β”‚  β”‚
β”‚  β”‚                                   β”‚          β”‚           β”‚  β”‚
β”‚  β”‚                                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                                 β”‚
β”‚  Election Process:                                              β”‚
β”‚  1. Follower becomes Candidate if no heartbeat received         β”‚
β”‚  2. Increment Term number                                       β”‚
β”‚  3. Vote for self + RequestVote to other nodes                  β”‚
β”‚  4. Leader elected when majority votes received                 β”‚
β”‚  5. Leader sends periodic heartbeats                            β”‚
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  Example: 5-node cluster                                  β”‚  β”‚
β”‚  β”‚                                                           β”‚  β”‚
β”‚  β”‚  Node A (Candidate, Term 5)                               β”‚  β”‚
β”‚  β”‚    β”‚                                                      β”‚  β”‚
β”‚  β”‚    β”œβ”€β”€ RequestVote ──> Node B: Vote YES                   β”‚  β”‚
β”‚  β”‚    β”œβ”€β”€ RequestVote ──> Node C: Vote YES                   β”‚  β”‚
β”‚  β”‚    β”œβ”€β”€ RequestVote ──> Node D: Vote NO (already voted)    β”‚  β”‚
β”‚  β”‚    └── RequestVote ──> Node E: Vote YES                   β”‚  β”‚
β”‚  β”‚                                                           β”‚  β”‚
β”‚  β”‚  3/5 = Majority β†’ Node A is Leader!                       β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

8. Quorum and Consistency Levels

Quorum Concept

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Quorum Concept                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  N = Number of replicas (Total Replicas)                        β”‚
β”‚  W = Number of responses needed for write success (Write Quorum)β”‚
β”‚  R = Number of responses needed for read success (Read Quorum)  β”‚
β”‚                                                                 β”‚
β”‚  Strong consistency guarantee condition: R + W > N              β”‚
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚                                                        β”‚    β”‚
β”‚  β”‚   When N=3, W=2, R=2:                                  β”‚    β”‚
β”‚  β”‚                                                        β”‚    β”‚
β”‚  β”‚   On write:                                            β”‚    β”‚
β”‚  β”‚   [Node1: X=V]  [Node2: X=V]  [Node3: ?]              β”‚    β”‚
β”‚  β”‚        βœ“             βœ“           (pending)             β”‚    β”‚
β”‚  β”‚                                                        β”‚    β”‚
β”‚  β”‚   On read:                                             β”‚    β”‚
β”‚  β”‚   [Node1: X=V]  [Node2: ?]  [Node3: X=V]              β”‚    β”‚
β”‚  β”‚        βœ“          (skip)         βœ“                    β”‚    β”‚
β”‚  β”‚                                                        β”‚    β”‚
β”‚  β”‚   R(2) + W(2) = 4 > N(3)                              β”‚    β”‚
β”‚  β”‚   β†’ At least 1 node has the latest write!             β”‚    β”‚
β”‚  β”‚                                                        β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                 β”‚
β”‚                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                            β”‚
β”‚    Write Set    β”‚                 β”‚    Read Set                β”‚
β”‚    (W=2)        β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚    (R=2)                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚   β”‚ Node 1  β”‚   β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚  β”‚ Node 1  │────┼───│ (overlap)│───┼────│ Node 1  β”‚            β”‚
β”‚  β”‚ Node 2  β”‚    β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚    β”‚ Node 3  β”‚            β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚   (at least 1)  β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β”‚                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                            β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Quorum Configuration Characteristics

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Quorum Configuration Strategies               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Based on N = 3 replicas                                        β”‚
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Config 1: W=1, R=3 (Write priority)                       β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚ β”‚
β”‚  β”‚  β”‚  Write: Only 1 node needs to succeed β†’ Fast write   β”‚  β”‚ β”‚
β”‚  β”‚  β”‚  Read: Must read all 3 β†’ Slow read                  β”‚  β”‚ β”‚
β”‚  β”‚  β”‚                                                     β”‚  β”‚ β”‚
β”‚  β”‚  β”‚  Use case: Log collection, IoT data                 β”‚  β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Config 2: W=3, R=1 (Read priority)                        β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚ β”‚
β”‚  β”‚  β”‚  Write: All 3 must succeed β†’ Slow write             β”‚  β”‚ β”‚
β”‚  β”‚  β”‚  Read: Only 1 needed β†’ Fast read                    β”‚  β”‚ β”‚
β”‚  β”‚  β”‚                                                     β”‚  β”‚ β”‚
β”‚  β”‚  β”‚  Use case: Catalogs, reference data                 β”‚  β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Config 3: W=2, R=2 (Balanced)                             β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚ β”‚
β”‚  β”‚  β”‚  Write: 2 nodes must succeed                        β”‚  β”‚ β”‚
β”‚  β”‚  β”‚  Read: Read from 2 nodes                            β”‚  β”‚ β”‚
β”‚  β”‚  β”‚                                                     β”‚  β”‚ β”‚
β”‚  β”‚  β”‚  Common balanced configuration                      β”‚  β”‚ β”‚
β”‚  β”‚  β”‚  Tolerates 1 node failure                           β”‚  β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                 β”‚
β”‚  Fault tolerance: min(N-W, N-R) node failures tolerated         β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Cassandra Consistency Levels

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                Cassandra Consistency Levels                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Write Consistency Levels:                                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  ANY         : 1 node (including hints) β†’ Lowest           β”‚ β”‚
β”‚  β”‚                consistency                                 β”‚ β”‚
β”‚  β”‚  ONE         : 1 replica                                   β”‚ β”‚
β”‚  β”‚  TWO         : 2 replicas                                  β”‚ β”‚
β”‚  β”‚  THREE       : 3 replicas                                  β”‚ β”‚
β”‚  β”‚  QUORUM      : (RF/2)+1 replicas                           β”‚ β”‚
β”‚  β”‚  LOCAL_QUORUM: (RF/2)+1 in local DC                        β”‚ β”‚
β”‚  β”‚  EACH_QUORUM : (RF/2)+1 in each DC                         β”‚ β”‚
β”‚  β”‚  ALL         : All replicas β†’ Highest consistency          β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                 β”‚
β”‚  Example: RF=3 cluster                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  QUORUM calculation: (3/2)+1 = 2                           β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Write CL=QUORUM:   2 node ACKs required                   β”‚ β”‚
β”‚  β”‚  Read CL=QUORUM:    Read from 2 nodes                      β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  R(2) + W(2) = 4 > N(3) β†’ Strong consistency!              β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                 β”‚
β”‚  Code Example:                                                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  -- CQL                                                    β”‚ β”‚
β”‚  β”‚  CONSISTENCY QUORUM;                                       β”‚ β”‚
β”‚  β”‚  INSERT INTO users (id, name) VALUES (1, 'Kim');           β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  -- Or per-query configuration                             β”‚ β”‚
β”‚  β”‚  SELECT * FROM users WHERE id = 1                          β”‚ β”‚
β”‚  β”‚  USING CONSISTENCY LOCAL_QUORUM;                           β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Consistency vs Availability Trade-off

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Consistency vs Availability Trade-off               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚                  Consistency                                    β”‚
β”‚                        β–²                                        β”‚
β”‚                        β”‚                                        β”‚
β”‚        ALL ●───────────                                        β”‚
β”‚                       β”‚                                        β”‚
β”‚     QUORUM ●──────────     Balance point                       β”‚
β”‚                      β”‚     (Recommended)                       β”‚
β”‚        TWO ●─────────                                          β”‚
β”‚                     β”‚                                          β”‚
β”‚        ONE ●────────                                           β”‚
β”‚                    β”‚                                           β”‚
β”‚        ANY ●──────┼─────────────────────────────────>          β”‚
β”‚                              Availability                      β”‚
β”‚                                                                 β”‚
β”‚  Recommended settings by scenario:                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Financial transactions: W=ALL, R=ALL  (Consistency first) β”‚ β”‚
β”‚  β”‚  Social feeds:          W=ONE, R=ONE   (Availability first)β”‚ β”‚
β”‚  β”‚  E-commerce:            W=QUORUM, R=QUORUM (Balanced)      β”‚ β”‚
β”‚  β”‚  Analytics data:        W=ONE, R=ONE   (Eventual           β”‚ β”‚
β”‚  β”‚                                         consistency OK)    β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

9. Practice Problems

Practice 1: Choosing Replication Strategy

Choose the appropriate replication strategy for the following scenarios and explain your reasoning.

Scenarios:
1. Social media service with global users
2. Bank system processing financial transactions
3. Real-time chat application
4. Log collection and analysis system

Options:
A. Single-leader + Synchronous replication
B. Single-leader + Asynchronous replication
C. Multi-leader replication
D. Leaderless replication

Sample Answer:

1. Social Media: C (Multi-leader)
   - Geographically distributed users
   - Low latency needed in each region
   - Slight consistency delay acceptable

2. Bank System: A (Single-leader + Sync)
   - Strong consistency required
   - Data loss unacceptable
   - Write latency tolerable

3. Real-time Chat: B (Single-leader + Async)
   - Fast response needed
   - Message order important
   - Slight data loss acceptable

4. Log Collection: D (Leaderless)
   - High write throughput needed
   - Eventual consistency sufficient
   - High availability important

Practice 2: Quorum Calculation

Problem:
In an N=5 replica cluster:

1. What W, R values for strong consistency with max availability?
2. With W=3, R=2, how many node failures tolerated?
3. How to maximize write availability while maintaining strong consistency?

Sample Answer:

1. W=3, R=3 (or W=2, R=4, etc.)
   - R + W > N (3+3=6 > 5) βœ“
   - Write: Tolerates 2 node failures
   - Read: Tolerates 2 node failures

2. W=3, R=2 analysis:
   - R + W = 5 = N (Not strong consistency!)
   - Strictly speaking R + W > N needed for strong consistency
   - Write availability: 5-3 = 2 node failures tolerated
   - Read availability: 5-2 = 3 node failures tolerated

3. Maximize write availability:
   - W=1, R=5 (Write: 4 failures tolerated)
   - However, read requires all nodes (low availability)

Practice 3: Failover Scenario

Problem:
In a MySQL master-slave configuration using asynchronous replication,
when master fails:

1. Slave A: binlog position 1000
2. Slave B: binlog position 950
3. Master last binlog position: 1020

Answer the following:
1. Which slave should be promoted to new master?
2. Maximum how many transactions could be lost?
3. How should the old master be handled when recovered?

Sample Answer:

1. Promote Slave A to new master
   - Position 1000 > 950
   - Has most up-to-date data

2. Maximum lost transactions:
   - 1020 - 1000 = 20 transactions could be lost

3. When old master recovers:
   - Reconfigure as slave
   - Discard position 1000 ~ 1020 data (conflict prevention)
   - Start replication from new master

Practice 4: Conflict Resolution Design

Problem:
In a multi-leader e-commerce system, when updating
the same product's inventory simultaneously:

Leader A (Seoul): inventory = 100 - 5 = 95
Leader B (Tokyo): inventory = 100 - 3 = 97

How can this conflict be resolved?
Propose several methods and explain pros/cons.

Sample Answer:

Method 1: LWW (Last Write Wins)
- Apply write with later timestamp
- Pros: Simple implementation
- Cons: Data loss (5 or 3 sales missing)

Method 2: CRDT (Counter)
- Record sales per leader: A: -5, B: -3
- Final inventory = 100 - 5 - 3 = 92
- Pros: No data loss
- Cons: Inventory could go negative

Method 3: Distributed Lock (Not recommended)
- Acquire distributed lock before write
- Cons: Increased latency, complexity

Method 4: Route to Single Leader
- Inventory writes only to specific leader
- Pros: Prevents conflicts at source
- Cons: Potential overload on that leader

Recommended: CRDT + Inventory threshold alerts
- Alert/adjust when negative inventory occurs

Practice 5: Interview Question

Interviewer: "How would you implement Read-Your-Writes consistency?"

Requirements:
- User must always be able to read their own writes
- Asynchronous replication environment
- Multiple replicas present

Propose a design approach.

Sample Answer:

Method 1: Read from Leader
- User reads recently written data from Leader
- Implementation: Use Leader for certain time (e.g., 1 min) after write

Method 2: Timestamp-based
- Client remembers last write timestamp
- Include timestamp in read request
- Wait until replica is caught up to that timestamp

Method 3: Replication Position-based
- Return LSN (Log Sequence Number) after write
- Read from replica that has applied at least that LSN

Implementation Example (Method 2):
```python
class Client:
    def __init__(self):
        self.last_write_timestamp = 0

    def write(self, data):
        result = leader.write(data)
        self.last_write_timestamp = result.timestamp

    def read(self, key):
        return db.read(
            key,
            min_timestamp=self.last_write_timestamp
        )

10. Next Steps

Based on what you learned in this document, study the following topics:

  1. Distributed Transactions - 2PC, Saga Pattern
  2. Consensus Algorithms - Paxos, Raft, ZAB
  3. CDC (Change Data Capture) - Debezium
  4. Event Sourcing and CQRS - Alternative approaches to replication
Learning Path:
[Current] Database Replication
    β”‚
    β”œβ”€β”€> Distributed Transactions (2PC, Saga)
    β”‚
    β”œβ”€β”€> Consensus Algorithms (Raft, Paxos)
    β”‚
    └──> CDC & Event Sourcing

11. References

Essential Books

  1. Designing Data-Intensive Applications - Martin Kleppmann
  2. Chapter 5: Replication
  3. Chapter 9: Consistency and Consensus

  4. Database Internals - Alex Petrov

  5. Part II: Distributed Systems

Database-Specific Documentation

  1. PostgreSQL Streaming Replication
  2. https://www.postgresql.org/docs/current/warm-standby.html

  3. MySQL Replication

  4. https://dev.mysql.com/doc/refman/8.0/en/replication.html

  5. Cassandra Documentation

  6. https://cassandra.apache.org/doc/latest/cassandra/architecture/dynamo.html

Papers

  1. Dynamo: Amazon's Highly Available Key-value Store (2007)
  2. In Search of an Understandable Consensus Algorithm (Raft) (2014)
  3. Chain Replication for Supporting High Throughput and Availability (2004)

Summary

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Key Concepts Summary                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  Replication Types:                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  Single-leader: Write only to leader, read from         β”‚   β”‚
β”‚  β”‚                 followers too                            β”‚   β”‚
β”‚  β”‚  Multi-leader: Write to multiple nodes, conflict         β”‚   β”‚
β”‚  β”‚                resolution needed                         β”‚   β”‚
β”‚  β”‚  Leaderless: All nodes equal, quorum for consistency     β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β”‚  Sync/Async:                                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  Sync: Strong consistency, slow writes, can't write on  β”‚   β”‚
β”‚  β”‚        failure                                           β”‚   β”‚
β”‚  β”‚  Async: Fast writes, possible data loss                  β”‚   β”‚
β”‚  β”‚  Semi-sync: At least 1 sync + rest async (balanced)      β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β”‚  Quorum:                                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  R + W > N guarantees strong consistency                 β”‚   β”‚
β”‚  β”‚  Fault tolerance = min(N-W, N-R)                         β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β”‚  Interview Key Points:                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  1. Trade-offs by replication type                       β”‚   β”‚
β”‚  β”‚  2. Failover process and problems                        β”‚   β”‚
β”‚  β”‚  3. Quorum calculation and consistency levels            β”‚   β”‚
β”‚  β”‚  4. Split Brain prevention strategies                    β”‚   β”‚
β”‚  β”‚  5. Read-Your-Writes implementation methods              β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
to navigate between lessons