Як я можу синхронізувати дані між пристроями, уникаючи втрати повідомлень і дублювання?


9

У мене є мережа IoT пристроїв, що передають дані один одному, дані зберігаються в базі даних.

Якщо у мене є пристрій, який послідовно надсилає 10 пакетів / запитів API, іноді лише деякі досягають місця призначення. Наприклад, пакети 1, 3 і 9 можуть досягти місця призначення, а інші -.

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

Відповіді:


6

Як правило, вам потрібно буде вибрати протокол із чіткими гарантіями щодо того, чи отримає клієнт будь-які пакети / повідомлення, в якому порядку та чи дозволяється дублювання.

Для мережі пристроїв IoT, що надсилають один одному повідомлення малого та середнього розміру , використання MQTT з якістю обслуговування 2 , здавалося б, добре відповідає вашому випадку використання. Як зазначено у посиланні HiveMQ:

Найвищий рівень QoS - 2, це гарантує, що кожне повідомлення буде отримано лише один раз контрагентом. Це найбезпечніший, а також найповільніший рівень обслуговування. Гарантія забезпечується двома потоками туди і назад між відправником і одержувачем.

Зауважте, що QoS 2 зберігає порядок повідомлень і, як зазначено, запобігає дублюванню повідомлень.

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

Повідомлення MQTT QoS 2 просто повторно відправиться від відправника до тих пір, поки він не отримає підтвердження від брокера, тому зрештою ваше повідомлення повинно пройти, навіть якщо ваше з'єднання недосконале.

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


1
Дякуємо @ Aurora0001 за вашу роботу та відповідь. Будь-який механізм на основі протоколу HTTP-повідомлення / асинхронізації, або IP-пакет, чи базується на пожежі та забутті? Скажімо, один сценарій - Система Надсилання повідомлення в систему B. У системі 5 повідомлень, створених / підготовлених для надсилання у такій послідовності, як - 1,2,3,4,5. У системі B отримано повідомлення типу - 1,4,5. Тут система B пропустила запис / пакет / дані для 2 3. Отже, що може бути механізмом для синхронізації між системою AB без відсутності, без запису дублікатів, використовуючи мінімальну поїздку / пропускну здатність / мережу
user1467280-Satyajit правда
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.