Sering denger jargon: “Pakai CQRS aja biar scalable!” atau “Tinggal streaming DB changes pake Debezium (CDC) ke Kafka, beres!”
Realitanya? Nggak segampang itu, Ferguso. Blog Debezium baru aja ngerilis artikel berjudul “CQRS is easy, except when it is not” yang ngebahas jebakan batman saat sinkronisasi data antar microservices.
Ini bedahannya:
1. β οΈ Problem Statement (Masalah)
The Promise: CQRS memisahkan model Tulis (Command) dan Baca (Query) biar performa maksimal. Debezium bertugas mindahin data dari DB Command ke DB Query secara real-time.
The Reality: Di sistem terdistribusi, urutan kejadian (event ordering) itu suci. Tapi saat kita memproses data dari tabel yang punya relasi (Parent-Child, misal: Order dan OrderItems), urutan stream data di Kafka bisa ngaco.
Race Condition: Apa jadinya kalau event “Buat Item” sampai duluan sebelum “Buat Order”? Query service bakal crash karena Foreign Key violation (Item menunjuk ke Order yang belum ada di DB Query).
2. π οΈ Metodologi & Solusi Artikel ini membedah beberapa strategi untuk menangani dependensi urutan ini:
Retry Topic (The Naive Way): Kalau proses gagal (misal parent belum ada), lempar ke retry queue. Masalahnya: urutan bisa makin berantakan dan latency membengkak.
Outbox Pattern: Teknik klasik di mana aplikasi menulis event ke tabel khusus (outbox) dalam satu transaksi DB yang sama. Ini menjamin urutan, tapi nambah beban di DB utama.
Stateful Processing: Menggunakan stream processor (seperti Flink/Kafka Streams) yang “sadar” konteks. Dia bisa buffer data anak (OrderItems) sampai data bapaknya (Order) datang.
3. π Findings & Rekomendasi
π Latency Trade-off: Menjamin konsistensi urutan seringkali mengorbankan latensi. Kamu harus pilih: Data eventually consistent tapi cepet, atau strongly consistent tapi ada lag.
π§© Complex Topology: Membangun pipeline CDC yang benar untuk model data relasional yang kompleks membutuhkan topologi stream processing yang rumit (join, windowing), bukan sekadar copy-paste topic.
Tooling: Debezium sendiri terus mengembangkan fitur untuk membantu causality tracking ini agar lebih otomatis.
4. π‘ Key Takeaways
Distributed Systems are Hard: Jangan remehkan kompleksitas sinkronisasi data. “Cuma mindahin data” itu masalah tersulit di Computer Science.
Know Your Data Model: Pahami relasi antar tabelmu. Kalau banyak Foreign Key, strategi CDC-mu harus sangat hati-hati soal urutan.
Simplicity First: Kalau aplikasi kamu belum butuh skala raksasa, mungkin Monolith atau Modular Monolith lebih waras daripada terjun ke microservices + CQRS + CDC yang penuh ranjau ini.
π Baca Artikel Lengkapnya: https://debezium.io/blog/2025/11/28/cqrs/
#SoftwareArchitecture #CQRS #Debezium #Kafka #CDC #Microservices #BackendEngineering #SystemDesign #EventDriven #TechTalk