Dalam sistem terdistribusi dan berbasis event, satu pesan yang diproses lebih dari sekali bukanlah anomali, melainkan kondisi yang hampir pasti terjadi. Gangguan jaringan, timeout, kegagalan sementara, atau mekanisme retry dapat menyebabkan pesan yang sama dikirim ulang. Inilah yang dikenal sebagai Message Duplication. Jika tidak ditangani dengan benar, kondisi ini dapat memicu inkonsistensi data, perhitungan ganda, dan perilaku sistem yang sulit diprediksi.
Masalah utama dari Message Duplication bukan pada pesan itu sendiri, tetapi pada asumsi sistem bahwa setiap pesan hanya akan diproses satu kali. Asumsi ini sering tidak realistis di lingkungan sistem skala besar.
Mengapa Message Duplication Sulit Dihindari
Message Duplication muncul karena sistem modern lebih mengutamakan ketersediaan dan ketahanan dibandingkan kepastian pengiriman tunggal. Ketika sebuah layanan tidak menerima respons tepat waktu, pengirim biasanya akan mencoba kembali untuk memastikan pesan tidak hilang. Dari sudut pandang pengirim, ini adalah tindakan yang benar. Namun dari sudut pandang penerima, hal ini menciptakan risiko pemrosesan ulang.
Pada sistem berbasis antrean atau event streaming, jaminan yang umum diberikan adalah pesan akan terkirim setidaknya satu kali. Artinya, sistem harus siap menerima pesan yang sama lebih dari sekali.
Dampak Message Duplication terhadap Sistem
Jika Message Duplication tidak ditangani dengan baik, dampaknya bisa meluas ke berbagai lapisan sistem.
1. Data dapat tercatat ganda, misalnya saldo bertambah dua kali atau status berubah berulang.
2. Proses lanjutan dapat terpicu lebih dari sekali, seperti pengiriman notifikasi atau eksekusi transaksi.
3. Beban sistem meningkat karena pekerjaan yang seharusnya satu kali menjadi berulang.
4. Proses audit dan pelacakan kesalahan menjadi lebih kompleks karena jejak eksekusi tidak lagi linear.
Masalah ini sering baru terlihat saat sistem berada pada beban tinggi atau saat terjadi gangguan parsial.
Prinsip Dasar Message Duplication Handling
Pendekatan yang paling aman bukan mencegah Message Duplication, melainkan merancang sistem agar tetap benar meskipun pesan diproses lebih dari sekali. Prinsip ini menuntut perubahan cara berpikir dalam desain sistem.
Sistem harus menganggap bahwa setiap pesan berpotensi datang kembali, dan pemrosesan ulang tidak boleh mengubah hasil akhir.
Pendekatan Teknis dalam Message Duplication Handling
Beberapa pendekatan umum digunakan untuk mengendalikan dampak Message Duplication.
1. Pemberian Identitas Unik pada Setiap Pesan
Setiap pesan membawa pengenal unik yang dapat disimpan dan dicek sebelum diproses. Jika pengenal yang sama sudah pernah diproses, sistem dapat melewati atau menghentikan proses lanjutan.
2. Operasi yang Aman Terhadap Pemrosesan Ulang
Logika bisnis dirancang sehingga pemrosesan berulang tidak mengubah hasil akhir. Contohnya, pembaruan status yang hanya berpindah satu arah dan tidak bisa kembali ke kondisi sebelumnya.
3. Penyimpanan Status Pemrosesan
Sistem menyimpan jejak bahwa suatu pesan sudah diproses hingga tahap tertentu. Dengan cara ini, pesan yang datang kembali tidak memicu eksekusi ulang dari awal.
4. Pemisahan antara Penerimaan Pesan dan Efek Samping
Efek seperti pengiriman email, perubahan data kritis, atau pemanggilan layanan lain dilakukan setelah ada kepastian bahwa pesan belum pernah diproses sebelumnya.
Hubungan Message Duplication dengan Retry dan Timeout
Message Duplication sering kali merupakan efek samping dari retry yang sah. Timeout yang terlalu pendek dapat menyebabkan pengirim mengira pesan gagal diproses, padahal penerima masih bekerja. Akibatnya, pesan dikirim ulang dan diproses dua kali.
Karena itu, Message Duplication Handling tidak bisa dipisahkan dari pengaturan timeout dan retry. Ketiganya harus dirancang sebagai satu kesatuan, bukan keputusan terpisah.
Message Duplication sebagai Realitas Sistem Modern
Message Duplication bukanlah kesalahan desain, melainkan konsekuensi dari sistem yang mengutamakan ketahanan dan ketersediaan. Masalah muncul ketika sistem tidak siap menghadapinya. Dengan menerima bahwa pesan bisa datang lebih dari sekali dan merancang logika pemrosesan yang tahan terhadap kondisi tersebut, sistem dapat tetap stabil dan konsisten meskipun berada dalam kondisi tidak ideal.
Dalam sistem skala besar, keberhasilan sering ditentukan bukan oleh seberapa jarang kegagalan terjadi, tetapi oleh seberapa baik sistem tetap berfungsi ketika kegagalan itu muncul.




