Berdasarkan dari apa yang saya mengerti tentang konsistensi akhirnya, semua layanan ini (konsumen) akan menerima acara pada saat yang sama dan memprosesnya secara terpisah yang, dalam skenario yang baik, akan menyebabkan data menjadi konsisten.
Tidak, belum tentu. Saat saya berkomentar, kami tidak dapat membatalkan email yang dikirim, jadi kami masih membutuhkan semacam "urutan". IPC lebih manajemen data-event tidak membebaskan dari orchestation 1 .
Misalnya, email tidak boleh dikirim kecuali transaksi sebelumnya selesai dengan sukses dan layanan email mendapatkan buktinya. 3
Namun, bagaimana jika layanan gagal memproses acara? mis. tiba-tiba terputus, kesalahan basis data, dll ... Apa pola / praktik yang baik untuk menangani kegagalan transaksi ini?
Sampaikan salam yang salah pada komputasi terdistribusi . Mereka adalah yang membuat segalanya menjadi rumit dan, seperti biasa, tidak ada peluru perak untuk berurusan dengan mereka.
Sebelum memulai perjalanan kita untuk mencari Tabut yang Hilang, kita harus mempertimbangkan untuk bertanya kepada organisasi terlebih dahulu. Seringkali solusinya adalah bagaimana organisasi menghadapi masalah ini di dunia nyata .
Apa yang semua orang (departemen) lakukan ketika data tertentu hilang atau tidak lengkap?
Kami akan menyadari bahwa departemen yang berbeda memiliki solusi berbeda yang, bersama-sama, merupakan solusi yang akan diterapkan.
Bagaimanapun, di sini ada beberapa praktik yang bisa membantu kita dengan strategi untuk diikuti.
Daripada memastikan bahwa sistem dalam keadaan konsisten sepanjang waktu, alih-alih kita dapat menerima bahwa sistem akan mendapatkannya di beberapa titik di masa depan. Pendekatan ini sangat berguna untuk operasi bisnis jangka panjang.
Cara sistem untuk mencapai konsistensi bervariasi dari satu sistem ke sistem lainnya. Ini mungkin melibatkan dari proses otomatis hingga semacam intervensi manusia. Misalnya, tipikal mencobanya lagi nanti atau kontak dengan Layanan Pelanggan .
Batalkan semua operasi
Kembalikan sistem ke kondisi konsisten melalui kompensasi transaksi . Namun, kita harus memperhitungkan bahwa, transaksi ini bisa gagal juga, apa yang bisa membawa kita ke titik di mana ketidakkonsistenan bahkan lebih sulit untuk diselesaikan. Dan, sekali lagi, kami tidak dapat membatalkan email yang dikirim.
Untuk jumlah transaksi yang rendah, pendekatan ini layak, karena jumlah transaksi kompensasi juga rendah. Jika ada beberapa transaksi bisnis yang terlibat dalam IPC, menangani satu transaksi kompensasi untuk masing-masing akan menjadi tantangan.
Jika kita pergi untuk mengkompensasi transaksi , kita akan menemukan pola desain pemutus sirkuit menjadi sangat berguna - dan wajib saya berani mengatakan -
Transaksi terdistribusi
Idenya adalah untuk menjangkau beberapa transaksi dalam satu transaksi, melalui keseluruhan proses pemerintahan yang dikenal sebagai Manajer Transaksi . Algoritma umum untuk menangani transaksi terdistribusi adalah Komitmen dua fase .
Perhatian utama transaksi terdistribusi adalah bahwa mereka bergantung pada penguncian sumber daya selama masa pakainya, dan seperti yang kita tahu, ada yang salah dengan Manajer Transaksi juga.
Jika Manajer Transaksi dikompromikan, kita dapat berakhir dengan beberapa kunci di seluruh konteks terikat yang berbeda, menghasilkan perilaku yang tidak terduga karena penyampaian pesan. 2
Operasi penguraian. Mengapa?
Jika Anda membusuk sistem yang ada, dan menemukan kumpulan konsep yang benar-benar ingin berada dalam batas transaksi tunggal, mungkin biarkan mereka sampai yang terakhir.
Sam Newman
Sejalan dengan argumen di atas, Sam-dalam bukunya Building Microservices - menyatakan bahwa, jika kita benar-benar tidak mampu membayar konsistensi akhirnya, kita harus menghindari untuk membagi operasi sekarang.
Jika kita tidak mampu memisahkan operasi tertentu menjadi dua atau lebih transaksi, mungkin bisa dikatakan bahwa - kemungkinan - transaksi ini termasuk dalam konteks terikat yang sama, atau - setidaknya - untuk konteks lintas sektoral yang masih harus dimodelkan.
Misalnya, dalam kasus kami, kami menyadari bahwa transaksi # 1 dan # 2 terkait erat satu sama lain dan mungkin keduanya dapat memiliki konteks terikat yang sama Akun , Pengguna , Daftar , apa pun ...
Pertimbangkan menempatkan kedua operasi dalam batas-batas transaksi yang sama. Itu akan membuat seluruh operasi lebih mudah untuk ditangani. Juga menentukan tingkat kekritisan dari setiap transaksi. Mungkin, jika transaksi # 2 gagal, itu tidak boleh membahayakan seluruh operasi. Jika ragu, tanyakan kepada organisasi .
1: Bukan jenis orkestrasi yang Anda pikirkan. Saya tidak berbicara tentang orkestrasi ESB. Saya berbicara tentang membuat layanan bereaksi terhadap acara yang tepat.
2: Anda mungkin menemukan pendapat Sam Newman yang menarik tentang transaksi yang didistribusikan.
3: Periksa jawaban David Parker mengenai hal ini.