Wie kann ich Daten zwischen Geräten synchronisieren, um den Verlust von Nachrichten und die Vervielfältigung zu vermeiden?

9

Ich habe ein IoT-Netzwerk von Geräten, die Daten untereinander senden, wobei Daten in einer Datenbank gespeichert werden.

Wenn ein Gerät 10 Pakete / API-Anforderungen nacheinander sendet, erreichen manchmal nur wenige ihr Ziel. Beispielsweise können die Pakete 1, 3 und 9 ihr Ziel erreichen, während die anderen dies nicht tun.

Wie kann ich diese Pakete verfolgen und sicherstellen, dass alle ihr Ziel ohne Duplizierung oder Leckage erreichen? Ich gehe davon aus, dass es in einem realen Szenario Tausende von Geräten geben wird und nicht nur ein Gerät, das Pakete verliert.

user1467280-Satyajit die Wahrheit
quelle

Antworten:

6

In der Regel müssen Sie ein Protokoll mit starken Garantien dafür auswählen, ob der Client Pakete / Nachrichten in welcher Reihenfolge empfängt und ob eine Duplizierung zulässig ist.

Für ein Netzwerk von IoT-Geräten, die kleine bis mittelgroße Nachrichten aneinander senden, scheint die Verwendung von MQTT mit Quality of Service 2 gut zu Ihrem Anwendungsfall zu passen. Wie im HiveMQ-Link angegeben:

Die höchste QoS ist 2, es wird garantiert, dass jede Nachricht nur einmal vom Gegenstück empfangen wird. Es ist das sicherste und auch langsamste Service-Level. Die Garantie wird durch zwei Hin- und Rückflüsse zwischen Sender und Empfänger gewährleistet.

Beachten Sie, dass QoS 2 die Reihenfolge der Nachrichten beibehält und, wie angegeben, doppelte Nachrichten verhindert.

Die Verwendung von MQTT QoS 2 ist im Vergleich zur Standard-QoS 0 (die einer Feuer-und-Vergessen-Nachricht ähnelt) mit einem erheblichen Aufwand verbunden. Wenn sie den Broker nicht erreicht, wird die Nachricht nicht erneut gesendet und ist für immer verschwunden ) - QoS 2 erfordert 4 Nachrichten ( PUBLISHvom Absender, PUBRECvom Broker, PUBRELvom Client, PUBCOMPvom Broker), sodass die Verarbeitung im Allgemeinen länger dauert, mehr Ressourcen benötigt (daher längere Funkübertragungen und mehr Stromverbrauch auf eingeschränkten Endpunkten).

Eine MQTT QoS 2-Nachricht wird nur wiederholt vom Absender erneut gesendet, bis sie eine Bestätigung vom Broker erhält. Daher sollte Ihre Nachricht möglicherweise auch dann durchkommen, wenn Ihre Verbindung nicht perfekt ist.

Ob ein themenbasiertes Publish-Subscribe- Protokoll für Ihren Anwendungsfall geeignet ist, liegt bei Ihnen. Der Wikipedia-Artikel könnte Ihnen helfen, sich ein Bild zu machen.

Aurora0001
quelle
1
Danke @ Aurora0001 für deine Arbeit und Antwort. Gibt es einen Mechanismus für die HTTP-Protokoll-basierte Nachrichtenkommunikation / Asynchronisierung oder IP-Paket-basierte oder kann man eine Art Feuer und Vergessen sagen? Angenommen, ein Szenario - System A sendet eine Nachricht an System B. In System A 5 wird eine Nachricht erstellt / vorbereitet, die nacheinander gesendet werden soll: - 1,2,3,4,5. In System B erhielt Nachricht wie - 1,4,5. Hier hat System B den Datensatz / das Paket / die Daten für 2 3 verpasst. Was könnte also ein Mechanismus sein, um eine Synchronisierung zwischen System AB ohne fehlenden, keinen Duplizierungsdatensatz mit minimaler Auslösung / Bandbreite / Netzwerk
durchzuführen