메시지 손실 및 복제를 피하면서 장치간에 데이터를 어떻게 동기화 할 수 있습니까?


9

데이터를 데이터베이스에 저장하고 서로에게 데이터를 보내는 IoT 장치 네트워크가 있습니다.

10 개의 패킷 / API 요청을 순서대로 전송하는 장치가있는 경우 때때로 소수의 장치 만 대상에 도달합니다. 예를 들어, 패킷 1, 3 및 9는 대상에 도달 할 수 있지만 다른 패킷은 그렇지 않습니다.

이러한 패킷을 추적하고 중복 또는 누출없이 모든 대상에 도달하도록하려면 어떻게해야합니까? 하나의 장치가 패킷을 잃는 것이 아니라 실제 시나리오에 수천 개의 장치가있을 것으로 예상합니다.

답변:


6

일반적으로 클라이언트가 패킷 / 메시지를 수신할지 여부와 순서, 복제가 허용되는지에 대한 강력한 보증이있는 프로토콜을 선택해야합니다.

중소 규모의 메시지를 서로 에게 보내는 IoT 장치 네트워크의 경우 Quality of Service 2 와 함께 MQTT 를 사용하면 사용 사례에 잘 맞는 것 같습니다. HiveMQ 링크에 명시된 바와 같이 :

최고 QoS는 2이며 각 메시지가 상대방에 의해 한 번만 수신되도록합니다. 가장 안전하고 가장 느린 서비스 품질 수준입니다. 송신자와 수신자 사이에 두 가지 흐름이 보장됩니다.

QoS 2 메시지 순서유지 하며 언급 된 바와 같이 메시지 중복을 방지합니다.

표준 QoS 0과 비교하여 MQTT QoS 2를 사용 하는 데 상당한 오버 헤드 가 있습니다 (이 메시지는 화재 및 잊어 버린 메시지와 유사합니다. 브로커에 도달하지 않으면 메시지가 다시 전송되지 않고 영원히 사라짐) ) — QoS 2에는 4 개의 메시지 ( PUBLISH송신자, PUBREC브로커, PUBREL클라이언트, PUBCOMP브로커)가 필요하므로 일반적으로 처리하는 데 시간이 오래 걸리고 더 많은 리소스를 사용해야 합니다 (따라서 제한적인 엔드 포인트에서 더 긴 무선 전송 및 더 많은 전력 사용).

MQTT의 QoS 2 메시지는 그래서는 브로커에서 승인을 수신 할 때까지 반복 발신자로부터 재전송 될 것입니다 결국 귀하의 메시지가 연결이 불완전한 경우에도 통과해야한다.

주제 기반 발행-구독 프로토콜이 사용 사례에 적합한 지 여부는 사용자가 결정해야합니다. Wikipedia 기사는 아이디어를 얻는 데 도움이 될 수 있습니다.


1
귀하의 작업에 대한 @ Aurora0001 감사합니다. HTTP 프로토콜 기반 메시지 통신 / 비동기 또는 IP 패킷 기반의 모든 메커니즘은 일종의 불이라고 말하고 잊을 수 있습니까? 하나의 시나리오-시스템 A가 시스템 B로 메시지를 보냅니다. 시스템 A에서-1,2,3,4,5와 같은 순서로 전송하도록 작성 / 준비된 메시지입니다. 시스템 B에서 -1,4,5와 같은 메시지를 받았습니다. 여기에 시스템 B는 결코, 아니 중복 레코드 사용하여 최소 여행 / 대역폭 / 네트워크 누락 된 시스템 AB 사이의 동기화를 만드는 메커니즘이 될 수있는 것을 2 3. 그래서의 기록 / 패킷 / 데이터를 놓친
user1467280 - 사티 야지 트 진실을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.