Menerapkan prinsip SRE pada data: arsitektur database HA (replication, failover, multi-AZ), backup & restore yang diuji bukan sekadar dibuat, dan reliability pipeline data dengan SLO serta data quality checks yang berjalan otomatis

Di episode 10 kita meng-hardening aplikasi, di episode 11 kita mengamankan proses rilis — sekarang tiba giliran lapisan yang paling membuat jantung SRE berdebar: data. Ada alasan mengapa database sering menjadi sumber insiden paling menyakitkan: aplikasi bisa di-rollback dalam menit, tapi data yang hilang atau korup tidak bisa di-rollback dengan mudah.
Data reliability berlapis tiga: ketersediaan (database tetap melayani saat node/zona mati), pemulihan (backup benar-benar bisa dipulihkan saat malapetaka), dan kebenaran (data yang sampai ke pengguna utuh dan sesuai harapan — termasuk untuk pipeline data). Episode ini membahas ketiganya, dengan praktik SLO untuk pipeline data.
Database HA berarti kegagalan satu komponen tidak menghentikan layanan. Pola standarnya:
pg_auto_failover di Postgres, atau managed seperti RDS Multi-AZ).Important
Keputusan replikasi sinkron vs asinkron adalah trade-off SLO klasik (episode 4): sinkron menjamin RPO rendah tetapi menambah latency write dan mengurangi ketersediaan (jika replica lambat, write ikut tersendat). Asinkron cepat dan tersedia, tetapi menyerahkan segelintir transaksi terakhir saat primary mati. Tidak ada jawaban "selalu" — ada jawaban "sesuai kebutuhan bisnis".
Aturan pertama backup: backup tanpa restore yang diuji adalah delusi. Insiden paling menyedihkan di industri bukan "kita tidak punya backup" — melainkan "kita punya backup, tapi tidak bisa mengembalikannya".
| Strategi | RPO (data hilang maksimal) | RTO (waktu pulih) | Biaya |
|---|---|---|---|
| Backup harian full + wal archiving | ± 1 jam | jam - hari | rendah |
| PITR (point-in-time recovery) | menit | jam | rendah-sedang |
| Replikasi + PITR | hampir nol | menit-jam | sedang |
| Standby aktif + PITR | hampir nol | menit | tinggi |
# minggu pertama tiap bulan: restore backup ke staging
pg_restore -h staging-db -d appdb -c latest_backup.dump
# lalu verifikasi baris kritis
psql -h staging-db -d appdb -c "SELECT count(*) FROM orders;"Warning
Uji restore itu wajib, bukan opsional. Kebiasaan buruk yang umum: menguji restore hanya saat insiden nyata — dan itulah momen paling buruk untuk menemukan bahwa backup korup, dump tidak kompatibel dengan versi database yang dipasang, atau orang yang tahu caranya sedang cuti. Jadwalkan drill restore dan catat RTO aktualnya sebagai metrik.
Era modern: data bukan hanya database transaksional, tetapi juga pipeline — batch ETL/ELT, streaming, dan warehouse. Di sinilah SRE bertemu DataOps: prinsip reliability yang sama diterapkan pada jalur data.
Data pipeline punya SLI sendiri yang jarang terpantau:
| SLI pipeline | Contoh |
|---|---|
| Freshness | Data terbaru tersedia ≤ 30 menit dari sumber |
| Completeness | 100% event yang masuk sumber sampai ke warehouse |
| Latency processing | Durasi dari event sampai queryable |
| Success rate job | Rasio job ETL sukses vs total |
Contoh SLO pipeline: "Freshness p95 ≤ 30 menit, completeness ≥ 99,9% per hari". Ini sama validnya dengan SLO API, dan justru sering lebih mudah dilanggar karena pipeline berjalan di balik layar.
Pipeline bisa "sukses" sambil mengirim data yang salah: kolom null, duplikat, atau nilai meleset karena bug transformasi. Tambahkan data quality checks sebagai SLI:
expectations:
- expectation: expect_column_values_to_not_be_null
column: order_id
- expectation: expect_column_values_to_be_between
column: amount
min_value: 0
max_value: 1000000
- expectation: expect_column_values_to_be_unique
column: event_id
- expectation: expect_table_row_count_to_be_between
min_value: 100000
max_value: 5000000Pipeline yang andal harus bisa dijalankan ulang tanpa efek ganda (idempotent): kalau job gagal di tengah, menjalankan ulang tidak menggandakan data. Praktik pendukungnya: partisi berdasarkan tanggal, watermark untuk posisi streaming, dan mekanisme backfill yang jelas.
Langkah konkret:
time since max(ts) per tabel partition, ekspor ke Prometheus.freshness p95 ≤ 30 menit per hari dan completeness ≥ 99,9%.max by (pipeline) (data_freshness_seconds)Pada episode 12 ini, kalian telah memperluas prinsip SRE ke lapisan data.
Inti yang harus dibawa pulang:
Di episode 13 selanjutnya, kita sengaja akan memecahkan sistem — chaos engineering: prinsip, game days, dan tools seperti Chaos Mesh dan Litmus untuk membuktikan bahwa sistem kalian bertahan dari kegagalan yang tak terduga. Sampai jumpa di episode 13!