Beberapa opsi.
Gunakan saluran komunikasi yang gigih
Alih-alih HTTP, letakkan pesan dalam antrian yang sangat tersedia dan persisten. Misalnya Kafka. Selama server target tersedia di beberapa titik, itu akan mendapatkan pesan.
Anda memiliki trade-off dari sekarang penyediaan dan administrasi subsistem yang kompleks (antrian). Jadi pastikan Anda menganalisis apakah ini bermanfaat.
Mundur dan coba lagi
Minta penelepon menyimpan permintaan yang gagal (mungkin tetap ke disk) dan coba lagi secara berkala. Penting dalam hal ini untuk membedakan antara permintaan Anda yang menyebabkan kerusakan vs layanan yang sedang macet. Yang pertama mungkin karena bug dan harus dicatat ... coba lagi mungkin tidak akan membuat perbedaan sampai perbaikan dilakukan.
Deteksi dan kompensasi
Tugas berkala memeriksa kondisi konsistensi antar layanan microser. Misalnya, kegagalan mencatat hingga permintaan API langsung. Jika menemukan masalah (mis. Ada pesanan tetapi pengiriman tidak pernah menerima daftar pengepakan) maka lakukan langkah-langkah kompensasi. Langkah-langkah itu bisa berupa membuat tiket dukungan untuk perbaikan manual, atau mengirim email kepada seseorang, atau apa pun.
Pertimbangkan alternatif desain
Kasus seperti ini mungkin membutuhkan gateway API untuk mengelola panggilan ke layanan microsoft yang terpengaruh. Dengan begitu Anda mengontrol taktik mana yang digunakan untuk mengurangi masalah ini. Anda mungkin tidak ingin membebani klien dengan detail implementasi tersebut. Lihat pola Pemutus Sirkuit .
Karena layanan mikro independen, akan selalu ada beberapa kasus kegagalan yang dapat mengakibatkan ketidakkonsistenan. Anda harus siap untuk melakukan perbaikan manual ketika itu muncul.
Jika Anda membutuhkan konsistensi yang kuat, maka layanan microser tidak akan cocok. Jika masih membutuhkan skalabilitas, Anda mungkin ingin melihat sharding di mana data terkait dapat ditempatkan di shard yang sama untuk jaminan konsistensi. Anda masih dapat meningkatkan IO dengan menambahkan pecahan.
Jika Anda membutuhkan konsistensi yang kuat dan tidak memiliki masalah skalabilitas, maka gunakan saja layanan monolitik. Gunakan perpustakaan sebagai batas dalam aplikasi Anda untuk memisahkan masalah.