Replication

Replication #

Dalam sistem backend modern, database sering menjadi single point of failure sekaligus bottleneck performa. Ketika trafik meningkat, query read semakin berat, atau availability menjadi requirement utama, satu database server saja biasanya tidak cukup. Di sinilah database replication berperan.

Artikel ini membahas secara mendalam:

  • Apa itu database replication
  • Kenapa replication sangat penting
  • Jenis-jenis database replication
  • Masalah umum pada replication
  • Best practice dalam mengimplementasikan database replication

Apa Itu Database Replication #

Database replication adalah proses menyalin dan menyinkronkan data dari satu database (biasanya disebut primary / master) ke satu atau lebih database lain (disebut replica / standby / slave).

Tujuan utamanya:

  • Menyediakan high availability
  • Meningkatkan read scalability
  • Mengurangi beban database utama
  • Menyediakan backup dan disaster recovery

Secara umum, alur sederhananya:

Client -> Write -> Primary DB
                |
                v
            Replica DB(s) -> Read

Kenapa Database Replication Itu Penting #

High Availability (HA) #

Jika primary database down (hardware failure, OOM, disk full, dll), replica bisa dipromosikan menjadi primary.

Tanpa replication:

  • Downtime = aplikasi mati

Dengan replication:

  • Failover lebih cepat
  • Downtime jauh lebih kecil

Read Scalability #

Sebagian besar aplikasi:

  • Read-heavy (dashboard, list data, report, admin)
  • Write relatif lebih sedikit

Dengan replication:

  • Write → primary
  • Read → replica

Hasilnya:

  • Beban primary berkurang drastis
  • Query read berat tidak mengganggu write

Isolasi Beban Query Berat #

Query seperti:

  • Reporting
  • Export data
  • Analytic query
  • Full table scan

Sangat berbahaya jika dijalankan di primary.

Dengan replication:

  • Query berat diarahkan ke replica
  • Primary tetap responsif

Disaster Recovery #

Replica bisa:

  • Berada di availability zone berbeda
  • Bahkan region berbeda

Jika terjadi:

  • Data center failure
  • Human error di primary

Replica menjadi penyelamat terakhir.


Jenis-Jenis Database Replication #

Synchronous Replication #

Karakteristik:

  • Write dianggap sukses jika primary dan replica sudah menerima data

Kelebihan:

  • Data konsisten (strong consistency)
  • Hampir tidak ada replication lag

Kekurangan:

  • Latency write meningkat
  • Jika replica lambat → primary ikut lambat

Cocok untuk:

  • Sistem finansial
  • Data yang sangat kritikal

Asynchronous Replication #

Karakteristik:

  • Primary langsung menganggap write sukses
  • Replica menerima data belakangan

Kelebihan:

  • Write sangat cepat
  • Primary tidak tergantung replica

Kekurangan:

  • Ada replication lag
  • Risiko data belum tersalin saat primary crash

Cocok untuk:

  • Sebagian besar aplikasi web
  • Sistem dengan read-heavy traffic

Semi-Synchronous Replication #

Karakteristik:

  • Primary menunggu minimal satu replica menerima data

Trade-off:

  • Lebih aman dari async
  • Lebih cepat dari sync penuh

Masalah Umum pada Database Replication #

Replication Lag #

Replica tertinggal dari primary.

Penyebab umum:

  • Query write terlalu berat
  • Index belum optimal
  • Replica hardware lebih lemah

Dampak:

  • User melihat data lama
  • Inconsistent user experience

Read After Write Problem #

User melakukan:

  1. Update data
  2. Langsung read

Jika read diarahkan ke replica:

  • Data belum tersinkron
  • User melihat data lama

Query Tidak Aman di Replica #

Beberapa query berbahaya:

  • SELECT ... FOR UPDATE
  • Transaction panjang
  • Locking query

Replica bukan tempat locking.

Skema dan Migrasi #

Perubahan schema:

  • DDL berat
  • Index creation

Bisa:

  • Mengganggu replication
  • Membuat lag ekstrem

Best Practice Database Replication #

Pisahkan Koneksi Write dan Read #

Gunakan:

  • Write connection → primary
  • Read connection → replica

Biasanya lewat:

  • Database proxy
  • Application-level routing

Jangan Gunakan Replica untuk Data Kritis Real-Time #

Untuk kasus:

  • Login
  • Update saldo
  • State machine

Gunakan primary.

Replica cocok untuk:

  • List
  • History
  • Report

Tangani Read After Write dengan Benar #

Beberapa pendekatan:

  • Sticky session (read ke primary beberapa detik)
  • Explicit read from primary
  • Cache write result

Monitor Replication Lag #

Wajib monitor:

  • Seconds behind primary
  • Replication IO / SQL thread

Jika lag tinggi:

  • Kurangi query berat
  • Optimasi index
  • Scale replica

Hindari Query Berat di Primary #

Pastikan:

  • Reporting
  • Export
  • Cron analytic

Dijalankan di replica.

Gunakan Replica Khusus untuk Beban Tertentu #

Contoh:

  • Replica A → API read
  • Replica B → reporting
  • Replica C → backup

Isolasi beban = stabilitas.

Migrasi Schema dengan Hati-Hati #

Best practice:

  • Online schema migration
  • Add index secara bertahap
  • Hindari DDL di jam sibuk

Jangan Asumsikan Replica Selalu Konsisten #

Desain aplikasi dengan asumsi:

  • Replica bisa delay
  • Replica bisa sementara unavailable

Failover logic harus jelas.


Kesimpulan #

Database replication bukan sekadar duplikasi data, tapi fondasi penting untuk:

  • Skalabilitas
  • Availability
  • Stabilitas sistem

Namun replication juga membawa kompleksitas:

  • Data consistency
  • Routing read/write
  • Lag dan failover

Dengan desain yang tepat dan best practice yang disiplin, database replication bisa menjadi penyelamat sistem, bukan sumber masalah baru.

“Replication tidak membuat database lebih sederhana, tapi membuat sistem lebih tahan banting.”

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact