Data ReplicationDatabaseHigh AvailabilityDistributed SystemsBackend Engineering

Day 13 - Data Replication - Single-Leader, Multi-Leader, Leaderless 🔄

June 24, 20265 min read30 Days Of Backend Engineering

āφāĻŽāĻžāϰ āĻĒāϞāĻŋāĻŸā§‡āĻ•āύāĻŋāϕ⧇āϰ āĻāĻ•āϟāĻž āĻŦāĻžāĻœā§‡ āϘāϟāύāĻž āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻŋ, āϤāĻžāϰāĻĒāϰ āĻŽā§‚āϞ āĻŦāĻŋāĻˇā§Ÿā§‡ āĻ•āĻĨāĻž āĻļ⧁āϰ⧁ āĻ•āϰāĻŋāĨ¤ āĻĒāϞāĻŋāĻŸā§‡āĻ•āύāĻŋāϕ⧇ āωāĻĒāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻĻā§‡ā§Ÿ āĻāϟāĻž āϏāĻŦāĻžāχ āĻšā§ŸāϤ⧋ āϜāĻžāύ⧇āύāĨ¤ āϏ⧇āϟāĻžāϰ āϜāĻ¨ā§āϝ āĻ¸ā§āϟ⧁āĻĄā§‡āĻ¨ā§āϟāĻĻ⧇āϰāϕ⧇ āĻāĻ• āĻ—āĻžāĻĻāĻž āϤāĻĨā§āĻ¯â€”āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ ā§Ŧ-ā§­āϟāĻž āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟ āϏāĻžāĻŦāĻŽāĻŋāϟ āĻ•āϰāϤ⧇ āĻšā§ŸāĨ¤ āĻāĻ–āύ āφāĻŽāĻŋ āϏāĻžāĻŦāĻŽāĻŋāϟ āĻ•āϰ⧇āĻ›āĻŋ āϏ⧇āχ ā§§āĻŽ āϏ⧇āĻŽāĻŋāĻ¸ā§āϟāĻžāϰ⧇āĨ¤ āĻāĻ–āύ āĻšāĻ āĻžā§Ž āĻ•āϰ⧇ āĻĄāĻŋāĻĒāĻžāĻ°ā§āϟāĻŽā§‡āĻ¨ā§āϟ āĻĨ⧇āϕ⧇ āύ⧋āϟāĻŋāĻļ āĻĻāĻŋā§Ÿā§‡āϛ⧇ āϝ⧇ āφāĻŦāĻžāϰ āĻāχ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟ āϏāĻžāĻŦāĻŽāĻŋāϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϕ⧇āύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇? āĻ¸ā§āϟ⧁āĻĄā§‡āĻ¨ā§āϟāĻĻ⧇āϰ āĻāχ āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟāϗ⧁āϞ⧋ āύāĻžāĻ•āĻŋ āϏāĻŦ missing! āĻāĻ–āύ āφāĻĒāύāĻžāϰ āĻŽā§‡āϜāĻžāϜ āϕ⧇āĻŽāύ āĻšāĻŦ⧇? āφāĻŽāĻŋ āϐ āϏāĻŽā§Ÿ āφāĻŽāĻžāϰ āĻŽā§‡āϜāĻžāϜāϟāĻž āĻšāĻžāϰāĻŋā§Ÿā§‡āĻ›āĻŋāϞāĻžāĻŽāĨ¤ āĻāϰāĻ•āĻŽ āϘāϟāύāĻž āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύāχ āϘāϟāϛ⧇āĨ¤ āĻāĻ–āύ āĻ•āĻ°ā§āϤ⧃āĻĒāĻ•ā§āώ āϝāĻĻāĻŋ āĻāχ āĻĄāĻžāϟāĻžāϗ⧁āϞ⧋ āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻ•āϰ⧇ āϰāĻžāĻ–āϤ⧋ āϤāĻžāĻšāϞ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāχ āĻāĻžāĻŽā§‡āϞāĻžāϗ⧁āϞ⧋ āĻ¸ā§āϟ⧁āĻĄā§‡āĻ¨ā§āϟāĻĻ⧇āϰāϕ⧇ āĻĒā§‹āĻšāĻžāϤ⧇ āĻšāϤ⧋ āύāĻžāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāϰāĻ•āĻžāϰāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āϞāĻžāĻĒ āϤ⧋, āĻāϗ⧁āϞ⧋ āĻšāĻ“ā§ŸāĻž āύāĻž āĻšāĻ“ā§ŸāĻž āĻāĻ•āχ āĻ•āĻĨāĻžāĨ¤

āĻāĻ–āύ āĻŽāύ⧇ āĻ•āϰ⧁āύ, āĻāĻ•āχ āϘāϟāύāĻž āφāĻĒāύāĻžāϰ āĻāĻ•āϟāĻž real application-āĻ āϘāϟāϞ⧋āĨ¤ User-āĻĻ⧇āϰ data āĻšāĻ āĻžā§Ž āĻ•āϰ⧇ āĻ—āĻžā§Ÿā§‡āĻŦ āĻšā§Ÿā§‡ āϗ⧇āϞ⧋! āϕ⧀ āϞ⧇āϭ⧇āϞ⧇āϰ chaos āϤ⧈āϰāĻŋ āĻšāϤ⧇ āĻĒāĻžāϰ⧇! āĻāχ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻž backup āϰāĻžāĻ–āĻž āϞāĻžāĻ—āĻŦ⧇, database-āĻāϰ āĻāĻ•āϟāĻž replication āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤


Replication āĻ•āĻŋ?

Backup āφāϰ replication āĻāĻ•āχ āϜāĻŋāύāĻŋāϏ āĻŽāύ⧇ āĻšāϞ⧇āĻ“ āĻāĻ•āχ āϜāĻŋāύāĻŋāϏ āύāĻžāĨ¤ Backup-āĻāϰ data āĻšāϞ⧋ āĻāĻ•āϟāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽā§Ÿā§‡āϰ snapshotāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ replication āĻšāϞ⧋ main database-āĻāϰ āĻœā§āϝāĻžāĻ¨ā§āϤ copyāĨ¤ Main database update āĻšāϞ⧇āχ, āĻāχ replication database eventually update āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ backup-āĻāϰ database āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āĻ¸ā§āĻŦ⧟āĻ‚āĻ•ā§āϰāĻŋ⧟āĻ­āĻžāĻŦ⧇ update āĻšāĻŦ⧇ āύāĻžāĨ¤ āφāĻĒāύāĻŋ āϝāĻ–āύ backup āύāĻŋāĻŦ⧇āύ āϤāĻ–āύ āϐ āϏāĻŽā§Ÿā§‡āϰ backup data locked āĻšā§Ÿā§‡ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ Hopefully replication āϜāĻŋāύāĻŋāϏāϟāĻž āϕ⧀ āĻŦ⧁āĻāϤ⧇ āĻĒ⧇āϰ⧇āϛ⧇āύāĨ¤


āϕ⧇āύ Replication āĻ•āϰāĻž āĻšā§Ÿ?

Replication āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ•āĻžāϰāϪ⧇ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āϝ⧇āĻŽāύ:-

High Availability - Primary database fail āĻ•āϰāϞ⧇ Replica database, main database āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇āĨ¤ Read Scaling - Application āϝāĻĻāĻŋ read-heavy āĻšā§Ÿ, āϤāĻ–āύ read replicas use āĻ•āϰāĻž āĻšā§Ÿ write database-āĻāϰ write traffic āĻ•āĻŽāĻžāύ⧋āϰ āϜāĻ¨ā§āϝāĨ¤ Geographical Distribution - āϝāĻĻāĻŋ user-āĻāϰ density āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĻ⧇āĻļ⧇ āĻŦ⧇āĻļāĻŋ āĻšā§Ÿ, āϤāĻ–āύ region-specific database use āĻ•āϰāĻž āĻšā§ŸāĨ¤ āϝ⧇āĻŽāύ: āĻŦāĻžāĻ‚āϞāĻžāĻĻ⧇āĻļ⧇āϰ user-āϰāĻž āĻŦāĻžāĻ‚āϞāĻžāĻĻ⧇āĻļ⧇āϰ āĻ•āĻžāϛ⧇āϰ database, āχāωāϰ⧋āĻĒ⧇āϰ user-āϰāĻž āχāωāϰ⧋āĻĒ⧇āϰ āĻ•āĻžāϛ⧇āϰ database-āĻ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ āĻāχ āϜāĻŋāύāĻŋāϏāϟāĻž āĻŽā§‚āϞāϤ latency āĻ•āĻŽāĻžāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤


Asynchronous Replication vs Synchronous Replication

Replication ⧍ āĻ­āĻžāĻŦ⧇ āĻšāϤ⧇ āĻĒāĻžāĻ°ā§‡â€”instantly (synchronous) āĻ…āĻĨāĻŦāĻž eventually (asynchronous)āĨ¤ āĻāϟāĻž depend āĻ•āϰāϛ⧇ āφāĻĒāύāĻžāϰ requirement-āĻāϰ āĻ“āĻĒāϰ⧇, āφāĻĒāύāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ data replicate āĻ•āϰāĻŦ⧇āύ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ data consistency āϕ⧇āĻŽāύ āϞāĻžāĻ—āĻŦ⧇āĨ¤

Synchronous Replication-āĻ write āĻšāĻ“ā§ŸāĻžāϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇āχ replication process complete āĻšāĻŦ⧇āĨ¤ āϏāĻŦāϗ⧁āϞ⧋ node-āĻ same data āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ Stale āĻŦāĻž old data āĻĨāĻžāĻ•āĻžāϰ possibility āύ⧇āχ āĻŦāϞāϞ⧇āχ āϚāϞ⧇āĨ¤

Asynchronous Replication-āĻ write āĻšāĻ“ā§ŸāĻžāϰ āĻĒāϰ āĻ•āĻŋāϛ⧁āϟāĻž time āύāĻŋāĻŦ⧇ replicate āĻšāϤ⧇, āĻ•āĻžāϰāĻŖ write āĻšāĻ“ā§ŸāĻžāϰ āĻĒāϰ replication process āϚāĻžāϞāĻžāύ⧋ āĻšā§ŸāĨ¤ Eventually data consistent āĻšā§Ÿā§‡ āϝāĻžā§ŸāĨ¤ āĻāχ āĻŸā§‡āĻ•āύāĻŋāϕ⧇ stale āĻŦāĻž old data āĻĨāĻžāĻ•āĻžāϰ probability āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧇āĻļāĻŋ, āĻ•āĻžāϰāĻŖ synchronize āĻšāĻ“ā§ŸāĻžāϰ āφāĻ— āĻĒāĻ°ā§āϝāĻ¨ā§āϤ stale data serve āĻšāϤ⧇ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤

Replication Technique

Single-Leader Replication (Master to Follower)

āϏāĻŦāĻšā§‡ā§Ÿā§‡ common replication strategy āĻšāϞ⧋ Single-Leader ReplicationāĨ¤ āĻāχ āĻŸā§‡āĻ•āύāĻŋāϕ⧇ āĻāĻ•āϟāĻž database server-āϕ⧇ Leader āĻšāĻŋāϏ⧇āĻŦ⧇ āϧāϰāĻž āĻšā§Ÿ, āĻāĻŦāĻ‚ āĻŦāĻžāĻ•āĻŋ database server-āϗ⧁āϞ⧋ Replica āĻŦāĻž Follower āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤

Read āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āϝ⧇āϕ⧋āύ⧋ Replica āĻĨ⧇āϕ⧇āĨ¤ Write āĻļ⧁āϧ⧁ Leader-āĻ āĻ•āϰāĻž āĻšāĻŦ⧇ āĻāĻŦāĻ‚ replica-āϗ⧁āϞ⧋ main database-āĻāϰ āϏāĻžāĻĨ⧇ synchronize āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇āĨ¤


Multi-Leader Replication

āĻāχ āĻŸā§‡āĻ•āύāĻŋāĻ• āϟāĻž āĻŦ⧁āĻāϤ⧇ āĻāĻ•āϟ⧁ āĻ…āϤ⧀āϤ⧇ āϝāĻžāĻ“āϝāĻŧāĻž āϞāĻžāĻ—āĻŦ⧇āĨ¤ āϧāϰ⧁āύ, Modern Civilization āĻāϰ āφāϗ⧇ āĻŽāĻžāύ⧁āώ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ—ā§āϰ⧁āĻĒ āĻ āĻŦāϏāĻŦāĻžāϏ āĻ•āϰāϤ āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻŦ āĻ•āĻŋāϛ⧁āχ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāϤ āĻāĻ•āϜāύ āĻŦā§āϝāĻ•ā§āϤāĻŋāĨ¤ āϏāĻ•āϞ⧇āχ āĻ“āχ āĻŦā§āϝāĻ•ā§āϤāĻŋāϕ⧇ follow āĻ•āϰāϤāĨ¤ āĻāĻ­āĻžāĻŦ⧇ āĻĒā§āϰāĻžā§Ÿ āϏāĻ•āϞ āĻ—ā§āϰ⧁āĻĒ āĻāϰ āĻ•āĻžāϜ āϚāϞāϤāĨ¤ āĻŽāϜāĻžāϰ āĻŦā§āϝāĻĒāĻžāϰ āĻšāϞ āĻāĻ•āϟāĻž āĻŦāĻĄāĻŧ āĻāϰāĻŋ⧟āĻž āϤ⧇ āĻ…āύ⧇āĻ• āϗ⧁āϞ⧋ āĻ—ā§āϰ⧁āĻĒ āĻĨāĻžāĻ•āϤāĨ¤ āĻĒā§āϰāĻ¤ā§āϝ⧇āĻ• āĻ—ā§āϰ⧁āĻĒ āĻāϰ āĻāĻ•āϜāύ āĻ•āϰ⧇ Leader āĻĨāĻžāĻ•āϤāĨ¤

āϤāĻžāϰāĻž āϏāĻŦāĻžāχ āĻāĻ•āϟāĻž āĻĻ⧇āĻļ⧇āϰ āϰāĻžāϜāĻžāϰ āĻ…āϧ⧀āύ⧇ āĻĨāĻžāĻ•āϤāĨ¤ āĻ āĻŋāĻ• āĻāĻ­āĻžāĻŦ⧇āχ āĻāχ āĻŸā§‡āĻ•āύāĻŋāĻ• āϟāĻž āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āĻāĻ•āχ āϧāϰāύ⧇āϰ cluster āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻ…āύ⧇āĻ• Leader āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāĻŦāĻ‚ āĻāχ leader āĻĻ⧇āϰ āĻ…āϧ⧀āύ⧇ āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāϧāĻŋāĻ• follower āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāχ āϧāϰāύ⧇āϰ replication technique āĻ āϏāĻŦ āĻĨ⧇āϕ⧇ āĻŦāĻĄāĻŧ āĻĒā§āϰāĻŦāϞ⧇āĻŽ āĻšāĻšā§āϛ⧇ ConsistencyāĨ¤ āϧāϰ⧁āύ, āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĻ⧁āχāϟāĻŋ āφāϞāĻžāĻĻāĻž āϜāĻžā§ŸāĻ—āĻž āĻĨ⧇āϕ⧇ āĻāĻ•āχ āϏāĻŽāϝāĻŧ⧇ āĻĻ⧁āχāϟāĻŋ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡ āφāϞāĻžāĻĻāĻž āφāϞāĻžāĻĻāĻž āϤāĻĨā§āϝ update āĻ•āϰāϞāĨ¤ āϤāĻ–āύ data conflict āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϤāĻž resolve āĻ•āϰāĻž āϜāϟāĻŋāϞ āĻšāĻŦ⧇āĨ¤ āĻāχ conflict resolution āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ•āĻŋāϛ⧁ āĻĒāĻĻā§āϧāϤāĻŋ āφāϛ⧇, āϝ⧇āĻŽāύ - Last Write Wins, manual merge, CRDTāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻžāϰ trade-off āφāϛ⧇āĨ¤


Leaderless Replication: Dynamo-style

āϕ⧋āύ⧋ Leader āύ⧇āχāĨ¤ āϝ⧇āϕ⧋āύ⧋ node-āĻ write āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

Amazon-āĻāϰ ⧍ā§Ļā§Ļā§­ āϏāĻžāϞ⧇āϰ āĻŦāĻŋāĻ–ā§āϝāĻžāϤ 'Dynamo Paper' āĻĨ⧇āϕ⧇ āĻāχ āĻ•āύāϏ⧇āĻĒā§āĻŸā§‡āϰ āĻ‰ā§ŽāĻĒāĻ¤ā§āϤāĻŋ, āϝāĻž āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ Apache Cassandra āĻŦāĻž ScyllaDB-āϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§Ÿ (āωāĻ˛ā§āϞ⧇āĻ–ā§āϝ, āĻŦāĻ°ā§āϤāĻŽāĻžāύ AWS DynamoDB āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻ•āĻŋāĻ¨ā§āϤ⧁ internally Paxos āϞāĻŋāĻĄāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇)āĨ¤

āĻāχ Technique āϟāĻž āϖ⧁āĻŦ āϏ⧁āĻ¨ā§āĻĻāϰ āĻŽāύ⧇ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻ–āĻžāύ⧇ āĻĒā§āϝāĻžāϰāĻž āĻ•āĻŽāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāĻ¤ā§āϝāĻŋ āĻŦāϞāϤ⧇ āĻāχ technique āϟāĻž āϏāĻŦ āĻĨ⧇āϕ⧇ āĻŦ⧇āĻļāĻŋ complex āĻāĻŦāĻ‚ data loss āĻšāĻ“ā§ŸāĻžāϰ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻž āĻĨāĻžāϕ⧇āĨ¤ Consistency āĻŦāϜāĻžā§Ÿ āϰāĻžāĻ–āĻž āϖ⧁āĻŦ āĻ•āĻ āĻŋāύ āĻšā§Ÿā§‡ āĻĒā§œā§‡āĨ¤


Replication-āĻāϰ āϏāĻŽāĻ¸ā§āϝāĻž āϕ⧀?

āφāĻŽāĻŋ āĻ…āύ⧇āĻ•āĻŦāĻžāϰ āĻŦāϞ⧇āĻ›āĻŋ āĻāĻ•āϟāĻž simple āϜāĻŋāύāĻŋāϏāϕ⧇ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āϭ⧇āϙ⧇ āĻĢ⧇āϞ⧇āύ, āϏ⧇āĻ–āĻžāύ⧇ complexity āĻŦā§‡ā§œā§‡ āϝāĻžāĻŦ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ āϝāĻ–āύ āφāĻĒāύāĻŋ extra replica database introduce āĻ•āϰāĻŦ⧇āύ āϤāĻ–āύ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧜ challenge āĻšāĻšā§āϛ⧇ Data Synchronization & ConsistencyāĨ¤ āĻāϟāĻž maintain āĻ•āϰāĻž āϖ⧁āĻŦ āĻ•āĻ āĻŋāύāĨ¤ āĻāĻ•āϟ⧁ āĻāĻĻāĻŋāĻ•-āĻ“āĻĻāĻŋāĻ• āĻšāϞ⧇ data loss āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻŦāĻž data inconsistency āĻĻ⧇āĻ–āĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

Replication Lag

Data write āĻšāĻ“āϝāĻŧāĻžāϰ āĻĒāϰ replica node-āϗ⧁āϞ⧋āϤ⧇ replicate āĻšāϤ⧇ āϝ⧇ āϏāĻŽāϝāĻŧāϟāĻž āϞāĻžāϗ⧇, āϏ⧇āϟāĻžāχ āĻšāϞ⧋ Replication LagāĨ¤ āϝāĻĻāĻŋ system-āĻ write heavy traffic āĻĨāĻžāϕ⧇, āϤāĻ–āύ lag āĻ…āύ⧇āĻ• āĻŦ⧇āĻļāĻŋ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝāĻžāϰ āĻĢāϞ⧇ stale data serve āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻž āĻĨāĻžāϕ⧇āĨ¤

Read-Your-Own-Write Consistency

Replication technique implementation āĻ•āϰāĻžāϰ āĻĒāϰ āĻāĻ•āϟāĻž āĻ•āĻŽāύ āϏāĻŽāĻ¸ā§āϝāĻž āĻĻ⧇āĻ–āĻž āϝāĻžāϝāĻŧ, āϏ⧇āϟāĻž āĻšāϞ Read-Your-Own-Write ConsistencyāĨ¤ āϧāϰ⧁āύ, āϕ⧋āύ⧋ āχāωāϜāĻžāϰ āĻĄāĻžāϟāĻž write āĻ•āϰāϞ, āĻ•āĻŋāĻ¨ā§āϤ⧁ replicas update āĻšāϞ⧋ āύāĻžāĨ¤ āχāωāϜāĻžāϰ āϝāĻĻāĻŋ āĻ¤ā§ŽāĻ•ā§āώāĻŖāĻžā§Ž āφāĻŦāĻžāϰ āĻĄāĻžāϟāĻžāϟāĻž āĻĒāĻĄāĻŧ⧇, āϤāĻžāĻšāϞ⧇ āϭ⧁āϞ āĻĄāĻžāϟāĻž āĻŦāĻž āĻĒ⧁āϰāĻžāύ⧋ āĻĄāĻžāϟāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāϟāĻž fix āĻ•āϰāϤ⧇ āĻšāϞ⧇ Consistency Level āĻŦāĻžāĻĄāĻŧāĻžāϤ⧇ āĻšāϝāĻŧ, āϝāĻž āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āĻ•āĻŽāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧāĨ¤

Leader Election

Single Leader Replication āĻ, Leader node āĻĄāĻžāωāύ āĻšāϞ⧇ āύāϤ⧁āύ āĻ•āϰ⧇ Leader āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāχ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϟāĻŋ āϝāĻĻāĻŋ āĻĻā§āϰ⧁āϤ āύāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ write operation fail āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ Leader Election āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϟāĻŋ complex āĻāĻŦāĻ‚ āĻāϟāĻž implement āĻ•āϰāĻžāĻ“ āĻŦ⧇āĻļ trickyāĨ¤

Split-Brain Scenario

Network partition āĻāϰ āĻ•āĻžāϰāϪ⧇ āĻĻ⧁āϟāĻŋ node āύāĻŋāĻœā§‡āĻĻ⧇āϰāϕ⧇ Leader āĻ­āĻžāĻŦāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāϞ⧇ Split-Brain āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋ āϤ⧈āϰāĻŋ āĻšā§ŸāĨ¤ āĻāĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻĻ⧁āϟāĻŋ database node āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āφāϞāĻžāĻĻāĻž āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ āĻāĻŦāĻ‚ āϤāĻžāϰāĻž āύāĻŋāĻœā§‡āĻĻ⧇āϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏāϕ⧇ Main Database āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ­āĻžāĻŦāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇āĨ¤ āϝāĻ–āύ network back up āĻšāϝāĻŧ, āϤāĻ–āύ merge āĻ•āϰāϤ⧇ āĻ—āĻŋāϝāĻŧ⧇ conflict āĻāĻŦāĻ‚ data loss āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤


āĻŦāϟāĻŽ āϞāĻžāχāύ

Replication āĻŽā§‚āϞāϤ application-āĻāϰ performance improve āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ system-āϕ⧇ resilient āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤ āĻāϗ⧁āϞ⧋ main goal āĻšāϞ⧇āĻ“ āĻāĻ–āĻžāύ⧇ āĻ…āύ⧇āĻ• complexity add āĻšā§ŸāĨ¤ āϤāĻžāχ āϭ⧇āĻŦ⧇āϚāĻŋāĻ¨ā§āϤ⧇ requirement āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻŦ⧇āϛ⧇ āύāĻŋāύāĨ¤

āφāĻĒāύāĻžāϰ system-āĻ āϕ⧋āύ replication strategy āφāϛ⧇? āĻ•āĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰ⧁āύ! 👇