PostgreSQL Replication
Kalo kamu membaca artikel ini, artinya kamu sudah menganggap replikasi database adalah sesuatu yang krusial. Beruntung, PostgreSQL secara default mendukung replikasi dengan streaming data Asynchronous dan Synchronous.
Asynchronous & Synchronous
PostgreSQL mendukung 2 jenis streaming data pada proses replikasi. Async dan Sync.
Asynchronous Replication
Pada replikasi Asinkron, commit transaksi di server Primary dikonfirmasi berhasil ke klien segera setelah data Write-Ahead Log (WAL) ditulis ke disk Primary.
Server Primary TIDAK menunggu konfirmasi apa pun dari server Standby bahwa mereka telah menerima atau memproses WAL tersebut.
Synchronous Replication
Pada replikasi Sinkron, commit transaksi di server Primary dikonfirmasi berhasil ke klien hanya setelah Primary menerima konfirmasi dari server Standby bahwa mereka telah menerima WAL.
Tujuan utama adalah jaminan data dan memastikan RPO nol (tidak ada kehilangan data) dalam skenario failover.
| Pros | Cons | |
|---|---|---|
| Async | - Kinerja Tinggi | - Potensi Kehilangan Data |
| - Paling Umum (Diterapkan pada banyak case) | - Tidak menjamin RPO (Recovery Point Objective) nol | |
| Sync | - Integritas Data Maksimal | - Kinerja Lebih Rendah |
| - Konsistensi Tinggi | - Membutuhkan setidaknya satu Standby yang berfungsi |
Memilih tipe streaming data pada proses replikasi database akan sangat bergantung dengan kebutuhan bisnis yang dihadapi.
A. Kapan Menggunakan ASINKRON (Async)
Ini adalah pilihan default dan paling umum.
Prioritas: Performa dan kecepatan transaksi.
Kasus Penggunaan: Sebagian besar aplikasi Web, E-commerce, Odoo, atau sistem yang dapat mentolerir hilangnya beberapa detik data (misalnya, beberapa transaksi terakhir) jika terjadi kegagalan katastrofik Primary.
B. Kapan Menggunakan SINKRON (Sync)
Gunakan ini hanya ketika integritas data adalah yang terpenting.
Prioritas: RPO = 0 (Tidak ada kehilangan data).
Kasus Penggunaan: Sistem keuangan, trading, atau database sensitif di mana kehilangan satu transaksi pun tidak dapat diterima.
Dummy Project
Untuk dummy project bisa dicek di repo Github. Pada project tersebut, membuat 1 aplikasi API menggunakan Flask dan 2 database (Master & Replica) yang semuanya menggunakan docker.
Monitoring
Monitoring terhadap proses replikasi database yang berjalan amatlah penting demi menjaga integritas data. Pada dummy project, sudah di sertakan query monitoring minimal yang diperlukan dan dijalankan di database master.
Terimakasih!