Как я могу синхронизировать данные между устройствами, чтобы избежать потери сообщений и дублирования?

9

У меня есть сеть IoT устройств, отправляющих данные друг другу, данные хранятся в базе данных.

Если у меня есть устройство, отправляющее 10 пакетов / запросов API по очереди, иногда только несколько из них достигают своего пункта назначения. Например, пакеты 1, 3 и 9 могут достичь пункта назначения, а остальные - нет.

Как я могу отследить эти пакеты и убедиться, что все они достигли пункта назначения без дублирования или утечки? Я ожидаю, что в реальном сценарии будут тысячи устройств, а не одно устройство, теряющее пакеты.

user1467280-Satyajit правда
источник

Ответы:

6

Как правило, вам нужно будет выбрать протокол с надежными гарантиями того, получит ли клиент какие-либо пакеты / сообщения, в каком порядке и разрешено ли дублирование.

Для сети устройств IoT, отправляющих друг другу сообщения небольшого и среднего размера , использование MQTT с качеством обслуживания 2 , по-видимому, хорошо подходит для вашего варианта использования. Как указано в ссылке HiveMQ:

Наибольшее QoS равно 2, это гарантирует, что каждое сообщение будет получено только один раз. Это самый безопасный и самый медленный уровень качества обслуживания. Гарантия обеспечивается двумя потоками туда и обратно между отправителем и получателем.

Обратите внимание, что QoS 2 сохраняет порядок сообщений и, как указано, предотвращает дублирование сообщений.

Использование MQTT QoS 2 сопряжено со значительными накладными расходами по сравнению со стандартным QoS 0 (что сродни сообщению «забей и забудь»; если оно не доходит до брокера, то сообщение не пересылается и исчезает навсегда ) - QoS 2 требует 4 сообщения ( PUBLISHот отправителя, PUBRECот брокера, PUBRELот клиента, PUBCOMPот брокера), поэтому обработка, как правило, займет больше времени, потребует больше ресурсов (следовательно, более длительные радиопередачи и большее потребление энергии на любых ограниченных конечных точках).

Сообщение MQTT QoS 2 будет просто повторно отправляться от отправителя до тех пор, пока оно не получит подтверждение от брокера, поэтому в конечном итоге ваше сообщение должно пройти, даже если ваше соединение несовершенно.

Подходит ли основанный на теме протокол публикации-подписки для вашего варианта использования, решать вам; статья в Википедии может помочь вам составить представление.

Аврора0001
источник
1
Спасибо @ Aurora0001 за вашу работу и ответ. Любой механизм на основе обмена сообщениями на основе протокола HTTP / асинхронный, или на основе IP-пакета или может сказать, что огонь и забыл? Допустим, один сценарий - система A отправляет сообщение в систему B. В системе A 5 сообщение создано / подготовлено для отправки в такой последовательности, как - 1,2,3,4,5. В системе B получено сообщение типа - 1,4,5. Здесь система B пропустила запись / пакет / данные для 2 3. Так что может быть механизмом для синхронизации между Системой AB без пропусков, без записи-дублирования с использованием минимальной поездки / полосы пропускания / сети
user1467280-Satyajit the