Database Replication
ArkitekturProces hvor data kopieres fra én database til en eller flere andre for høj tilgængelighed og performance.
Beskrivelse
Database replication er praksis hvor data fra én database (primary/master) kopieres til en eller flere andre databaser (replicas/slaves). Dette giver flere fordele: høj tilgængelighed ved failures, load balancing af read queries, og geografisk distribution af data. Der findes forskellige replication topologier: Master-Slave hvor én primary tager writes og multiple replicas tager reads, Master-Master hvor begge databaser tager writes (komplekst), og Multi-Master med mange write-capable nodes. Replication kan være synchronous (garanteret consistent men langsommere) eller asynchronous (hurtigere men eventual consistency). Populære replication strategier inkluderer Statement-Based (replay SQL statements), Row-Based (replicate faktisk row changes), og Logical Replication (replicate på logical level). Replication er fundamental for production systemer - næsten ingen moderne applikationer kører på single database instance.
Problem
En enkelt database er en single point of failure - hvis den går ned, er hele systemet nede. Derudover kan én server ikke håndtere massive read load fra millioner af brugere. Hvordan sikrer man uptime og skalerer read capacity?
Løsning
Replication kopierer data til multiple servers. Hvis primary fejler, kan en replica promoveres. Read queries distribueres på tværs af replicas for load balancing. Dette giver både high availability og bedre performance.
Eksempel
-- Master-Slave Replication Setup (PostgreSQL)
-- Primary database (master)
-- Håndterer ALL writes
CREATE TABLE products (id SERIAL PRIMARY KEY, name TEXT);
INSERT INTO products (name) VALUES ('Laptop');
-- Dette skrives til Write-Ahead Log (WAL)
-- Replica 1, 2, 3 (slaves/read replicas)
-- Modtager og replayer WAL fra primary
-- Dataene kommer automatisk til replicas
-----------------------------------------------------
-- Application Logic
class DatabaseConnection {
constructor() {
this.primary = new Client({ host: 'primary.db.com' });
this.replicas = [
new Client({ host: 'replica1.db.com' }),
new Client({ host: 'replica2.db.com' }),
new Client({ host: 'replica3.db.com' })
];
}
// Write operations GÅR TIL PRIMARY
async write(query) {
return await this.primary.query(query);
}
// Read operations LOAD BALANCES over replicas
async read(query) {
const replica = this.getRandomReplica();
return await replica.query(query);
}
getRandomReplica() {
const index = Math.floor(Math.random() * this.replicas.length);
return this.replicas[index];
}
}
// Usage
const db = new DatabaseConnection();
// Write går til primary
await db.write('INSERT INTO products (name) VALUES ($1)', ['Mouse']);
// Reads distribueres til replicas (1/3 chance for hver)
await db.read('SELECT * FROM products WHERE category = $1', ['electronics']);
-----------------------------------------------------
-- Synchronous vs Asynchronous
-- Synchronous: Primary venter på replica confirmation
BEGIN;
INSERT INTO orders VALUES (...);
COMMIT; -- Blocks until ALL replicas confirm
-- Pro: Guaranteed consistency
-- Con: Higher latency
-- Asynchronous: Primary commits immediately
BEGIN;
INSERT INTO orders VALUES (...);
COMMIT; -- Returns immediately
-- Replicas får data 10-100ms senere
-- Pro: Low latency
-- Con: Temporary inconsistency (eventual consistency)Fordele
- ✓High availability via automatic failover
- ✓Horizontal scaling af read performance
- ✓Geografisk distribution for lavere latency
- ✓Backup og disaster recovery
- ✓Zero-downtime maintenance
Udfordringer
- ⚠Replication lag (asynchronous)
- ⚠Kompleksitet i failover logic
- ⚠Eventual consistency problemer
- ⚠Write bottleneck (primary still single point)
- ⚠Storage costs (duplicate data)
Anvendelsesområder
- •High-traffic websites (scale reads)
- •Global applikationer (geo-distribution)
- •Mission-critical systems (HA requirement)
- •Analytics workloads (isolated fra production)
- •Disaster recovery preparation
Eksempler fra den virkelige verden
- •Netflix: Replicas i alle AWS regioner for low latency
- •Facebook: Multi-datacenter replication for disaster recovery
- •E-commerce: Read replicas for product catalog queries
- •SaaS platforme: Tenant-specific read replicas
- •Banking: Synchronous replication for data durability