Управление потоком — новые возможности MQTT 5.0

MQTT v5 содержит множество новых функций, мы покажем эти функции в доступной для понимания форме и обсудим влияние этих функций на разработчика. До сих пор мы обсуждали эти новые возможности MQTT v5. А теперь продолжим обсуждение: управление потоком.

Управление потоком

Обычно ресурсы сервера фиксированы и ограничены, а поток клиента может меняться в любое время и в любом месте. Обычный бизнес (пользователи получают централизованный доступ и перезапуск многих устройств) подвергается злонамеренным атакам, и колебания сети приводят к резкому увеличению потока. Если сервер не будет ограничивать поток, нагрузка резко увеличится, а затем приведет к снижению скорости ответа, повлияет на другие предприятия и даже приведет к поломке системы.

изображение20200730133959150.png

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

MQTT v3 не стандартизировал поведение управления потоком, что заставит клиент и сервер реализовывать его по-разному, а затем повлияет на доступ и управление устройствами. Тем не менее, MQTT v5 уже представил функцию управления потоком, и это также то, что мы обсудим далее.

Управление потоком в MQTT v5

В MQTT v5 отправитель имеет одну начальную квоту на отправку. Каждый раз, когда он отправляет пакет PUBLISH с QoS больше 0, квота на отправку уменьшается на единицу. Однако всякий раз, когда он получает ответный пакет (PUBACK и PUBCOMP или PUBREC), квота отправки увеличивается на единицу. Если получатель не ответит немедленно, это приведет к уменьшению квоты на отправку до 0, и отправитель должен прекратить отправку всех пакетов PUBLISH с QoS, превышающим 0, до восстановления квоты на отправку. Мы можем думать об этом как о варианте алгоритма корзины токенов, единственная разница заключается в изменении метода увеличения квоты с фиксированной скорости на фактическую скорость полученных ответных пакетов.

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

Получить максимальный атрибут

MQTT v5 добавил атрибут Receive Maximum для поддержки управления потоком. Он существует в пакете CONNECT и пакете CONNACK и указывает наибольшее количество пакетов PUBLISH с QoS, равным 1 и 2, которые клиент и сервер готовы обрабатывать одновременно, то есть максимальную квоту на отправку, которую может использовать противоположная сторона.

изображение20200730173320715.png

Почему нет QoS 0?

Возможно, вы уже обнаружили, что атрибуты используются во всех местах, где упоминаются сообщения PUBLISH в предыдущей статье: QoS больше 0. Особенности сообщения QoS 0 определяют, что ответного пакета нет. Вы можете подумать, что сообщения QoS 0 не очень важны, и получатель может ограничить сообщение QoS 0 через обязательное ограничение скорости приема, или есть другие причины. В целом, наконец, мы видим, что механизм управления потоком MQTT v5 полностью полагается на ответный пакет, из-за чего управление потоком может существовать только в сообщениях QoS 1, 2.

MQTT v5 дает несовершенное решение или это просто предложение: когда квота на отправку уменьшается до 0, отправитель может продолжить отправку PUBLISH-пакетов с QoS 0 или приостановить отправку. Логика приостановки отправки такова: если скорость ответа пакета PUBLISH с QoS 1,2 становится низкой, это обычно означает, что расходная способность получателя снизилась. Если отправитель продолжит отправлять сообщения QoS 0, ситуация ухудшится.

Резюме

Хотя механизм управления потоком MQTT v5 все еще имеет некоторые недостатки, мы по-прежнему рекомендуем пользователям его использовать. Алгоритм квоты отправки, основанный на ответном пакете, позволяет отправителю максимально использовать ресурсы. Receive Maximum позволяет обеим сторонам связи не нужно заранее согласовывать квоту на отправку, что обеспечивает большую прозрачность и гибкость, что действительно полезно для доступа к оборудованию разных поставщиков.

Первоначально опубликовано на https://www.emqx.com.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *