Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MQTT глазами BE для работы с embedded устройств...

MQTT глазами BE для работы с embedded устройствами – Сергей Макаров, PythoNN

Avatar for Sobolev Nikita

Sobolev Nikita

October 21, 2026

More Decks by Sobolev Nikita

Other Decks in Programming

Transcript

  1. Гарантии доставки Система At most once Не более 1 раза

    At least once Хотя бы 1 раз Exactly once Ровно 1 раз MQTT QoS 0 QoS 1 QoS 2 RabbitMQ AMQP 0-9-1 Auto ack Confirms и ручной ack Нет встроенного режима Core NATS По умолчанию Нет Нет NATS JetStream AckNone AckExplicit Deduplication и double ack Kafka Commit offset до обработки Commit offset после обработки Нет на уровне доставки QoS 2: однократная доставка между отправителем и получателем. JetStream: окно дедупликации. Kafka: exactly once результата обработки. 2
  2. Пару слов об MQTT Протокол обмена сообщениями для IoT Заголовок

    Длина топика t 123 2 байта 2 байта 1 байт 3 байта MQTT vs NATS/Kafka/AMQP Компактность, QoS, Last Will и Topic Alias 3
  3. Бенчмарки 8 байт 5 байт метаданных + 3 байта payload

    MQTT QoS 0 Core NATS HTTP/1.1 AMQP 0-9-1 8 14 49 52 payload "123" / topic "t" / соединение уже открыто Без сжатия и TLS. NOACK 4
  4. Бенчмарки 14 байт 10 байт PUBLISH + 4 байта PUBACK

    MQTT QoS 1 JetStream AMQP 0-9-1 HTTP/1.1 14 52 73 76 payload "123" / topic "t" / соединение уже открыто Без сжатия и TLS QoS 1 5
  5. Persistent session Сессия переживает отключение устройства Брокер сохраняет После восстановления

    сессии Подписки Не нужно подписываться заново Сообщения QoS 1/2 для офлайн-клиента Клиент получает накопленные сообщения Незавершённый обмен Клиент и брокер продолжают доставку по QoS Возвращаемся с тем же Client ID MQTT 5: Clean Start = 0, Session Expiry Interval > 0 Сроки хранения и лимиты брокера ограничивают очередь сообщений 6
  6. Один топик, много подписчиков Устройство публикует телеметрию и получает команды

    Телеметрия Устройство devices/42/commands devices/42/telemetry MQTT брокер Backend Команды Подписчики телеметрии Мониторинг Автоматизация Last Will: брокер сообщит, если устройство пропало 7
  7. Создавать свои устройства ESP32 Датчики и реле Котёл и солнечный

    инвертор Собственная прошивка MQTT ESP Python BE 11
  8. Python-клиенты для MQTT Paho Синхронный API Callbacks aiomqtt v2 aiomqtt

    v3 Paho mqtt5 / Rust asyncio API поверх Paho Нативный asyncio Новая реализация Один сценарий: telemetry и status 12
  9. Paho • • • • Императивный роутинг Отсутствует строгая типизация

    Нужны треды для нормальной работы Отсутствует реконнект 13
  10. aiomqtt v3 • • • • • • Попытка в

    нативный asyncio Сырой клиент Потеря сообщений Rust codec Нет реконнектов Императивный роутинг 15
  11. FastStream Фреймворк для работы с брокерами сообщений на Python Бизнес-логика

    FastStream MQTT Маршрутизация, валидация и инфраструктурный код 16
  12. zMQTT • • • • • • Нативный asyncio Без

    Paho Сообщения не теряются Zero dependency 100% покрытия протокола Полное покрытие типами
  13. 18