Membangun platform data: managed database dan operasinya, cache Redis sebagai akselerator, message broker untuk komunikasi antar layanan, serta pola observability dan DR untuk lapisan data

Setelah di episode 14 kita mengoperasikan platform Kubernetes, kini lapisan yang paling "berharga" dari infrastruktur: data. Database, cache, dan message broker adalah fondasi tempat aplikasi berdiri — dan lapisan yang paling sulit diskalakan serta paling menyakitkan saat bermasalah.
Mengapa topik ini penting? Karena data tidak bisa di-restart. Server boleh crash, pod boleh mati, tetapi database yang kehilangan data adalah bencana permanen. Episode ini membangun platform data dari sisi infrastruktur: managed database dan operasinya, Redis untuk cache, message broker untuk komunikasi antar layanan, dan praktik menjaga semuanya tetap sehat.
Di episode 2 kita membahas trade-off self-managed vs managed. Dalam praktik, managed database (RDS, Cloud SQL, Azure SQL) menghemat pekerjaan yang sangat besar:
| Aspek | Self-managed | Managed |
|---|---|---|
| Backup | Anda urus | Otomatis (ada titik restore) |
| Patching | Anda urus | Otomatis (maintenance window) |
| HA/failover | Anda bangun | Multi-AZ siap pakai |
| Monitoring | Anda pasang | Terintegrasi |
| Biaya | Lebih murah | Premium |
Pola keputusan yang benar: database core bisnis dengan tim kecil → managed. Database dengan kebutuhan khusus (plugin, tuning ekstrem, versi tertentu) dan tim berpengalaman → self-managed. Keduanya bukan kalah-menang, melainkan soal di mana kalian mau menghabiskan tenaga.
Koneksi aplikasi ke database selalu melalui connection string dengan kredensial yang dirotasi — bukan hardcode:
postgres://app_user:REDACTED@db-prod-1.ap-southeast-1.rds.amazonaws.com:5432/appLatihan penting: uji failover — trigger failover terencana dan pastikan aplikasi tersambung kembali tanpa intervensi. Inilah perbedaan antara "kata vendor bisa failover" dan "bukti aplikasi tahan failover".
Redis adalah store in-memory serbaguna: cache, session store, rate limiter, pub/sub. Menempatkan Redis di depan database adalah cara paling efektif mengurangi beban database.
docker run -d --name redis -p 6379:6379 --restart unless-stopped redis:7
redis-cli -h localhost ping
redis-cli set cache:homepage "rendered-html" EX 300
redis-cli get cache:homepagePola cache yang benar:
cache:homepage, cache:user:{id}.Warning
Redis adalah penyimpanan in-memory — bukan tempat data yang tidak boleh hilang. Restart kehilangan data tanpa persistence, dan mode persistence pun tidak menjamin seperti database. Aturan: data kritis di database; Redis hanya mempercepat akses ke data yang bisa dibangun ulang.
Untuk produksi: Redis Sentinel (failover otomatis) atau Redis Cluster (sharding + replika). Jangan menjalankan Redis single-instance untuk produksi — sebuah restart sudah bisa menurunkan seluruh aplikasi.
Arsitektur modern (terutama microservice) memisahkan layanan melalui message broker — layanan tidak memanggil langsung, melainkan kirim pesan yang diproses asinkron.
| Broker | Karakter | Kapan Dipakai |
|---|---|---|
| RabbitMQ | Routing fleksibel, AMQP | Task queue, worker |
| Apache Kafka | Streaming, log terdistribusi | Event streaming, analitik real-time |
| Redis Pub/Sub | Ringan, in-memory | Notifikasi ringan |
Pola arsitektur yang wajib dipahami:
Kafka menyimpan event sebagai log yang bisa dibaca berulang (offset). Ini membuatnya cocok untuk event sourcing dan data pipeline:
kcat -b kafka-01:9092 -t orders -C -o beginning # consume dari awal
kcat -b kafka-01:9092 -t orders -P # produce eventPeran infra engineer: memastikan broker terdistribusi dan replikasi (replication factor ≥ 3), memantau lag consumer, dan menjaga kapasitas disk log.
Metrik yang wajib dipantau di semua komponen data:
Database:
- Connection count & wait
- Slow queries
- Replication lag
- Disk space & IOPS
Redis:
- Hit ratio cache (target > 95%)
- Memory usage (jangan penuh → eviction)
- Connected clients
Kafka:
- Consumer lag
- Disk usage log
- Under-replicated partitionsAlert replication lag dan consumer lag adalah dua alert yang paling sering menyelamatkan produksi.
Tingkatkan strategi backup dari episode 10 untuk lapisan data:
pg_basebackup -D /backup/base-$(date +%F) -Ft -z -P
# WAL archiving aktif → point-in-time recovery (PITR)PITR (Point-in-Time Recovery) adalah kemampuan mengembalikan database ke waktu tertentu — menyelamatkan dari kesalahan manusia seperti DROP TABLE yang salah. Kombinasi: full backup berkala + WAL/redo log berkelanjutan.
Pola DR untuk data (dari episode 10):
| Target | Pola |
|---|---|
| RPO menit | Streaming replication antar region/AZ |
| RPO jam | Backup periodik + log shipping |
| RTO menit | Standby aktif yang siap failover |
| RTO jam | Restore dari backup |
EXPLAIN adalah teman terbaik.Pada episode 15 ini kalian telah membangun platform data:
Di episode 16 selanjutnya kita mendekatkan infrastruktur ke pengguna: edge & CDN — mempercepat distribusi global dengan content delivery dan edge compute. Sampai jumpa di episode 16!