Blog - MQTT QoS i backpressure — kiedy QoS 2 szkodzi
Dlaczego w telemetrii przemysłowej wyższy QoS nie zawsze oznacza lepszą niezawodność oraz jak modelować flow control.
- Autor
- 2code
- Opublikowano
- Tagi
- MQTT
- IoT
- backpressure
W integracjach Modbus → MQTT często pojawia się intuicja: „ustawmy QoS 2, będzie najbezpieczniej”. W praktyce przy burstach telemetrii QoS 2 potrafi zwiększyć opóźnienie i zgubić świeże dane.
Model kolejki
Załóżmy, że broker lub edge gateway ma skończoną kolejkę o pojemności . Przy napływie wiadomości/s i obsłudze wiadomości/s wykorzystanie wynosi:
Gdy , średnia liczba wiadomości w kolejce (M/M/1) rośnie jak:
QoS 2 dodaje handshake (PUBREC / PUBREL / PUBCOMP), więc efektywne spada — rośnie szybciej niż przy QoS 0/1.
Przepływ decyzji
…
Praktyczna reguła
- Telemetria wysokiej częstotliwości — QoS 0 + coalescing (ostatnia wartość wygrywa).
- Alarmy / komendy — QoS 1 (co najmniej raz) z idempotentnym konsumentem.
- QoS 2 — tylko gdy dokładnie-raz jest wymaganiem biznesowym i wolumen jest niski.
…
Wzór na budżet opóźnienia
Jeśli akceptujesz maksymalne opóźnienie sekund przy burstach, to przy średnim rozmiarze wiadomości bajtów i paśmie B/s:
Przekroczenie bez strategii drop/coalesce oznacza, że „niezawodny” QoS 2 i tak dostarczy przestarzałe próbki.
Wniosek
Niezawodność w IoT to nie maksymalny QoS, tylko świadomy kontrakt: które dane muszą dotrzeć zawsze, a które wystarczy „najnowsze wygrywa”.