Jak mogę zsynchronizować dane między urządzeniami, unikając utraty wiadomości i powielania?

9

Mam sieć IoT urządzeń przesyłających sobie dane, a dane są przechowywane w bazie danych.

Jeśli mam urządzenie wysyłające kolejno 10 pakietów / żądań API, czasami tylko kilka dociera do miejsca docelowego. Na przykład pakiety 1, 3 i 9 mogą dotrzeć do miejsca docelowego, a inne nie.

Jak mogę śledzić te pakiety i upewnić się, że wszystkie docierają do miejsca docelowego bez powielania lub wycieków? Oczekuję, że w rzeczywistym scenariuszu będą tysiące urządzeń, a nie tylko jedno urządzenie tracące pakiety.

user1467280-Satyajit prawda
źródło

Odpowiedzi:

6

Zwykle trzeba wybrać protokół z silnymi gwarancjami, czy klient otrzyma jakiekolwiek pakiety / wiadomości, w jakiej kolejności i czy dozwolone jest powielanie.

W przypadku sieci urządzeń IoT wysyłających między sobą małe i średnie wiadomości, użycie MQTT z Quality of Service 2 wydaje się dobrze pasować do twojego przypadku użycia. Jak podano w łączu HiveMQ:

Najwyższa QoS wynosi 2, gwarantuje to, że każda wiadomość zostanie odebrana tylko raz przez partnera. Jest to najbezpieczniejszy i zarazem najwolniejszy poziom usług. Gwarancję zapewniają dwa przepływy tam i z powrotem między nadawcą a odbiorcą.

Należy pamiętać, że QoS 2 zachowuje kolejność komunikatów i, jak stwierdzono, zapobiega duplikowaniu wiadomości.

Istnieje znaczny narzut w użyciu MQTT QoS 2 w porównaniu do standardowych 0 (QoS, która jest zbliżona do ognia i zapomnij wiadomość, jeśli nie dotrze do maklera, a następnie komunikat nie dostać ponowne przesłanie i to bezpowrotnie ) - QoS 2 wymaga 4 wiadomości ( PUBLISHod nadawcy, PUBRECod brokera, PUBRELod klienta, PUBCOMPod brokera), więc generalnie zajmie to więcej czasu, zajmie więcej zasobów (stąd dłuższe transmisje radiowe i większe zużycie energii na dowolnych ograniczonych punktach końcowych).

Wiadomość MQTT QoS 2 będzie tylko ponownie wysyłana od nadawcy, dopóki nie otrzyma potwierdzenia od brokera, więc w końcu wiadomość powinna przejść, nawet jeśli połączenie jest niedoskonałe.

To, czy protokół publikowania i subskrypcji oparty na tematach jest odpowiedni dla danego przypadku, zależy od ciebie; artykuł w Wikipedii może pomóc Ci znaleźć pomysł.

Aurora0001
źródło
1
Dzięki @ Aurora0001 za pracę i odpowiedź. Jakikolwiek mechanizm komunikacji / asynchronizacji wiadomości opartej na protokole HTTP lub oparty na pakiecie IP lub może powiedzieć rodzaj pożaru i zapomnienia? Powiedzmy jeden scenariusz - System A wyślij wiadomość do Systemu B. W systemie A 5 wiadomości utworzonych / przygotowanych do wysłania w kolejności jak - 1,2,3,4,5. W systemie B odebrano wiadomość typu - 1,4,5. Tutaj system B przeoczył rekord / pakiet / dane dla 2 3. Więc jaki mógłby być mechanizm synchronizacji między Systemem AB bez braków, bez powielania rekordów przy użyciu minimalnej podróży / przepustowości / sieci
użytkownik1467280-Satyajit prawda