Come posso sincronizzare i dati tra i dispositivi, evitando la perdita di messaggi e la duplicazione?


9

Ho una rete di dispositivi IoT che si scambiano dati, con i dati archiviati in un database.

Se ho un dispositivo che invia 10 pacchetti / richieste API in sequenza, a volte solo pochi raggiungono la loro destinazione. Ad esempio, i pacchetti 1, 3 e 9 potrebbero raggiungere la loro destinazione, mentre gli altri no.

Come posso monitorare questi pacchetti e garantire che tutti raggiungano la loro destinazione senza duplicazioni o perdite? Mi aspetto che ci saranno migliaia di dispositivi in ​​uno scenario di vita reale, piuttosto che un solo dispositivo che perde pacchetti.

Risposte:


6

In genere, è necessario scegliere un protocollo con forti garanzie se il client riceverà pacchetti / messaggi, in quale ordine e se è consentita la duplicazione.

Per una rete di dispositivi IoT che si scambiano messaggi di dimensioni da piccole a moderate , l'utilizzo di MQTT con Quality of Service 2 sembrerebbe adattarsi bene al caso d'uso. Come indicato nel link HiveMQ:

Il QoS più alto è 2, garantisce che ogni messaggio viene ricevuto una sola volta dalla controparte. È il livello di servizio più sicuro e anche più lento. La garanzia è fornita da due flussi andata e ritorno tra mittente e destinatario.

Si noti che QoS 2 mantiene l'ordine dei messaggi e, come indicato, impedisce i messaggi duplicati.

L' utilizzo di MQTT QoS 2 presenta un notevole sovraccarico rispetto allo standard QoS 0 (che è simile a un messaggio "Fire-and-forget"; se non raggiunge il broker, il messaggio non viene risentito ed è andato per sempre ) - QoS 2 richiede 4 messaggi ( PUBLISHdal mittente, PUBRECdal broker, PUBRELdal client, PUBCOMPdal broker), quindi generalmente ci vorrà più tempo per l'elaborazione, impiegherà più risorse (quindi trasmissioni radio più lunghe e maggiore consumo di energia su tutti gli endpoint vincolati).

Un messaggio MQTT QoS 2 verrà semplicemente reinviato ripetutamente dal mittente fino a quando non riceve il riconoscimento dal broker, quindi alla fine il messaggio dovrebbe passare, anche se la connessione è imperfetta.

Sta a te decidere se un protocollo di abbonamento alla pubblicazione basato su argomenti è appropriato per il tuo caso d'uso; l'articolo di Wikipedia potrebbe aiutarti a farti un'idea.


1
Grazie @ Aurora0001 per il tuo lavoro e la tua risposta. Qualche meccanismo sulla comunicazione dei messaggi basata su protocollo HTTP / asincrono o basato su pacchetti IP o può dire tipo di incendio e dimenticare? Diciamo uno scenario - Sistema A invia messaggio a Sistema B. Nel sistema A 5 messaggio creato / preparato per inviare in sequenza come - 1,2,3,4,5. Nel sistema B ha ricevuto un messaggio simile a - 1,4,5. Qui il sistema B ha perso il record / pacchetto / dati per 2 3. Quindi quale potrebbe essere il meccanismo per effettuare la sincronizzazione tra System AB senza mancare, nessun record di duplicazione usando il viaggio minimo / larghezza di banda / rete
user1467280-Satyajit la verità
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.