Paket 2 · Praktik LanjutanModul F — Database, Backup & Disaster Recovery

Production Database Architecture

Merancang database produksi: primary/replica, read-write split, pooling, storage, keamanan, tuning, dan migrasi.

Database adalah komponen paling sulit dipulihkan. Arsitektur produksi harus memikirkan performa, ketersediaan, keamanan, dan pemulihan sejak awal.

Topologi umum

App ──write──▶ Primary
  └──read────▶ Replica 1
       └──────▶ Replica 2

Primary ──WAL──▶ Replica
Primary ──backup──▶ Object Storage
KomponenFungsi
PrimaryMenerima write
ReplicaRead dan kandidat failover
PoolerMengelola koneksi
Backup storageSalinan offsite
MonitoringQuery, koneksi, replikasi

Read-write split

Aplikasi mengarahkan write ke primary dan read ke replica.

const writer = new Pool({ host: process.env.DB_PRIMARY });
const reader = new Pool({ host: process.env.DB_REPLICA });

export function dbWrite(...args) { return writer.query(...args); }
export function dbRead(...args) { return reader.query(...args); }

Replica lag

Replica bisa tertinggal dari primary. Jangan membaca data yang baru ditulis dari replica jika konsistensi ketat dibutuhkan. Baca dari primary untuk data pasca-write.

Koneksi dan pooling

  • Gunakan pool di aplikasi atau PgBouncer.
  • Hitung total koneksi: instance × pool.
  • Sisakan koneksi untuk admin, backup, dan monitoring.
  • Batasi statement_timeout.
SHOW max_connections;
SELECT count(*), state FROM pg_stat_activity GROUP BY state;

Storage

JenisCocok untuk
NVMe lokalDatabase utama, IOPS tinggi
SSD SATABeban kecil–menengah
Network storageBackup, bukan primary berlatensi tinggi
Object storageBackup dan arsip

Pisahkan disk data, WAL, dan backup bila memungkinkan.

Konfigurasi awal PostgreSQL

Parameter umum (sesuaikan dengan RAM/CPU):

shared_buffers = 25% RAM
effective_cache_size = 50-75% RAM
work_mem = 16MB
maintenance_work_mem = 256MB
max_connections = 100
wal_level = replica
max_wal_size = 2GB
checkpoint_timeout = 15min

Jangan menyalin nilai orang lain tanpa mengukur beban.

Keamanan database

  • Database hanya di jaringan privat.
  • Autentikasi kuat (SCRAM-SHA-256).
  • Prinsip least privilege per aplikasi.
  • Enkripsi disk dan backup.
  • Audit akses admin.
  • Jangan memakai superuser untuk aplikasi.
CREATE ROLE app LOGIN PASSWORD '...';
GRANT CONNECT ON DATABASE app TO app;
GRANT USAGE ON SCHEMA public TO app;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app;

Migrasi

  • Migrasi disimpan di repository.
  • Dijalankan sebagai langkah pipeline.
  • Backward compatible.
  • Backup sebelum migrasi besar.
  • Uji di staging dengan data mirip produksi.
npm run migrate

Monitoring database

MetrikArti
ConnectionsKoneksi aktif/idle
Query latencyp95/p99 query
Cache hit ratioEfisiensi shared buffers
Replication lagKeterlambatan replica
Disk usageKapasitas
LocksBlocking
DeadlocksKonflik transaksi
SELECT * FROM pg_stat_replication;
SELECT * FROM pg_stat_database;

Sizing

Pertimbangkan:

  • Ukuran data dan pertumbuhan.
  • IOPS dan latency storage.
  • Jumlah koneksi.
  • Beban read vs write.
  • Retention data.
  • Kebutuhan backup dan restore.

Ringkasan

  • Primary menangani write; replica membantu read dan failover.
  • Pooling dan timeout mencegah kehabisan koneksi.
  • Database harus privat, terenkripsi, dan least privilege.
  • Migrasi harus terkontrol dan diuji.

Selanjutnya

On this page