¿Cómo puedo sincronizar datos entre dispositivos, evitando la pérdida de mensajes y la duplicación?

9

Tengo una red IoT de dispositivos que se envían datos entre sí, y los datos se almacenan en una base de datos.

Si tengo un dispositivo que envía 10 paquetes / solicitudes de API en secuencia, a veces solo unos pocos llegan a su destino. Por ejemplo, los paquetes 1, 3 y 9 pueden llegar a su destino, mientras que los otros no.

¿Cómo puedo rastrear estos paquetes y asegurarme de que todos lleguen a su destino sin duplicación ni fugas? Espero que haya miles de dispositivos en un escenario de la vida real, en lugar de que solo un dispositivo pierda paquetes.

user1467280-Satyajit la verdad
fuente

Respuestas:

6

Por lo general, deberá elegir un protocolo con fuertes garantías sobre si el cliente recibirá algún paquete / mensaje, en qué orden y si se permite la duplicación.

Para una red de dispositivos IoT que se envían mensajes entre pequeños y moderados , usar MQTT con Quality of Service 2 parece encajar bien en su caso de uso. Como se indica en el enlace HiveMQ:

La QoS más alta es 2, garantiza que cada mensaje sea recibido solo una vez por la contraparte. Es el nivel de calidad de servicio más seguro y también el más lento. La garantía es proporcionada por dos flujos de ida y vuelta entre el emisor y el receptor.

Tenga en cuenta que QoS 2 conserva el orden de los mensajes y, como se indicó, evita los mensajes duplicados.

Hay una sobrecarga considerable en el uso de MQTT QoS 2 en comparación con la QoS 0 estándar (que es similar a un mensaje de disparar y olvidar; si no llega al intermediario, el mensaje no se reenvía y desaparece para siempre ) - QoS 2 requiere 4 mensajes ( PUBLISHdel remitente, PUBRECdel intermediario, PUBRELdel cliente, PUBCOMPdel intermediario), por lo que generalmente tomará más tiempo procesar, más recursos (por lo tanto, transmisiones de radio más largas y más uso de energía en cualquier punto final restringido).

Un remitente MQTT QoS 2 simplemente se reenviará del remitente varias veces hasta que reciba el acuse de recibo del intermediario, por lo que eventualmente su mensaje debería pasar, incluso si su conexión es imperfecta.

Depende de usted determinar si un protocolo de publicación-suscripción basado en temas es apropiado para su caso de uso; El artículo de Wikipedia podría ayudarlo a hacerse una idea.

Aurora0001
fuente
1
Gracias @ Aurora0001 por su trabajo y respuesta. ¿Algún mecanismo en la comunicación de mensajes basada en el protocolo HTTP / asíncrono, o basado en paquetes IP o puede decir algo de fuego y olvidar? Digamos un escenario: el sistema A envía un mensaje al sistema B. En el sistema A 5 el mensaje creado / preparado para enviar en secuencia como - 1,2,3,4,5. En el sistema B recibió un mensaje como - 1,4,5. Aquí, el sistema B perdió el registro / paquete / datos para 2 3. Entonces, ¿cuál podría ser el mecanismo para sincronizar entre el Sistema AB sin falta, sin duplicación de registros utilizando mínimo viaje / ancho de banda / red
user1467280-Satyajit la verdad