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| Komponen | Fungsi |
|---|---|
| Primary | Menerima write |
| Replica | Read dan kandidat failover |
| Pooler | Mengelola koneksi |
| Backup storage | Salinan offsite |
| Monitoring | Query, 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
| Jenis | Cocok untuk |
|---|---|
| NVMe lokal | Database utama, IOPS tinggi |
| SSD SATA | Beban kecil–menengah |
| Network storage | Backup, bukan primary berlatensi tinggi |
| Object storage | Backup 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 = 15minJangan 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 migrateMonitoring database
| Metrik | Arti |
|---|---|
| Connections | Koneksi aktif/idle |
| Query latency | p95/p99 query |
| Cache hit ratio | Efisiensi shared buffers |
| Replication lag | Keterlambatan replica |
| Disk usage | Kapasitas |
| Locks | Blocking |
| Deadlocks | Konflik 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
Amankan data di Backup, Restore & Recovery Strategy.