Bagaimana saya bisa menyinkronkan data antar perangkat, menghindari hilangnya pesan dan duplikasi?

9

Saya memiliki jaringan IoT yang saling mengirim data satu sama lain, dengan data yang disimpan dalam database.

Jika saya memiliki perangkat yang mengirimkan 10 paket / permintaan API secara berurutan, terkadang hanya beberapa yang mencapai tujuannya. Misalnya, paket 1, 3 dan 9 mungkin mencapai tujuannya, sedangkan yang lain tidak.

Bagaimana saya bisa melacak paket-paket ini dan memastikan bahwa semua mencapai tujuan mereka tanpa duplikasi atau kebocoran? Saya berharap bahwa akan ada ribuan perangkat dalam skenario kehidupan nyata, bukan hanya satu perangkat yang kehilangan paket.

user1467280-Satyajit kebenaran
sumber

Jawaban:

6

Biasanya, Anda harus memilih protokol dengan jaminan kuat tentang apakah klien akan menerima paket / pesan, dalam urutan apa, dan apakah duplikasi diizinkan.

Untuk jaringan perangkat IoT yang saling mengirim pesan berukuran kecil hingga sedang , menggunakan MQTT dengan Quality of Service 2 sepertinya cocok dengan use case Anda. Sebagaimana dinyatakan dalam tautan HiveMQ:

QoS tertinggi adalah 2, itu menjamin bahwa setiap pesan hanya diterima satu kali oleh mitra. Ini adalah tingkat layanan yang paling aman dan juga paling lambat. Jaminan diberikan oleh dua aliran di sana dan kembali antara pengirim dan penerima.

Perhatikan bahwa QoS 2 memang mempertahankan urutan pesan, dan, sebagaimana dinyatakan, mencegah pesan yang digandakan.

Ada overhead yang substansial dalam menggunakan MQTT QoS 2 dibandingkan dengan QoS 0 standar (yang mirip dengan pesan api-dan-lupa; jika tidak mencapai broker, maka pesan tidak dikirim kembali dan hilang selamanya dan hilang selamanya ) - QoS 2 membutuhkan 4 pesan ( PUBLISHdari pengirim, PUBRECdari pialang, PUBRELdari klien, PUBCOMPdari pialang), sehingga umumnya akan membutuhkan waktu lebih lama untuk memproses, mengambil lebih banyak sumber daya (karenanya transmisi radio lebih lama dan penggunaan daya lebih banyak pada titik akhir yang dibatasi).

Pesan MQTT QoS 2 hanya akan dikirim ulang dari pengirim berulang kali hingga menerima pengakuan dari broker, jadi akhirnya pesan Anda harus melalui, bahkan jika koneksi Anda tidak sempurna.

Apakah protokol publikasi-berlangganan berbasis-topik sesuai untuk kasus penggunaan Anda, tergantung pada Anda untuk menentukan; artikel Wikipedia mungkin membantu Anda mendapatkan ide.

Aurora0001
sumber
1
Terima kasih @ Aurora0001 untuk pekerjaan Anda dan membalas. Adakah mekanisme komunikasi pesan berbasis protokol HTTP / async, atau berbasis paket IP atau dapat dikatakan semacam api dan lupa? Katakanlah satu skenario - Sistem A mengirim pesan ke Sistem B. Dalam sistem A 5 pesan dibuat / disiapkan untuk mengirim dalam urutan seperti - 1,2,3,4,5. Dalam sistem B menerima pesan seperti - 1,4,5. Di sini sistem B melewatkan catatan / paket / data untuk 2 3. Jadi apa yang bisa menjadi mekanisme untuk melakukan sinkronisasi antara Sistem AB tanpa ada yang hilang, tidak ada duplikasi-catatan menggunakan minimum trip / bandwidth / jaringan
user1467280-Satyajit the truth