Балансировка нагрузки — кластеризация брокера MQTT, часть 1
Этот пост дает краткое введение в обмен сообщениями MQTT, проблемы кластеризации, а затем балансировку нагрузки.
MQTT протокол
Возможно, вы не очень хорошо знакомы с протоколом MQTT, вы, вероятно, очень хорошо знаете протокол HTTP. Как и HTTP, MQTT работает на том же сетевом (транспортном) уровне TCP/TLS (ну, на самом деле он может работать поверх HTTP, но это тема для другого разговора).
MQTT — это стандартный протокол обмена сообщениями OASIS для Интернета вещей (IoT). Он разработан как чрезвычайно легкий транспорт обмена сообщениями публикации/подписки, который идеально подходит для подключения удаленных устройств с небольшим объемом кода и минимальной пропускной способностью сети. MQTT сегодня используется в самых разных отраслях, таких как автомобилестроение, производство, телекоммуникации, нефть и газ и т. д.
MQTT-клиенты также похожи на HTTP-клиенты: они устанавливают TCP-соединения с сервером и отправляют и получают данные. Разница в том, что HTTP использует модель запрос/ответ, а MQTT использует модель публикации/подписки.
Пример из жизни: датчик температуры в гостиной периодически выдает свои показания на MQTT-брокер, приложение для умного дома может подписываться на показания температуры и принимать за вас решения для умного дома. Например: включите кондиционер, когда температура выше 32 градусов по Цельсию.
Проблемы масштабируемости
Датчик температуры дома — это только пример, достаточно близкий всем. Для обслуживания устройств умного дома одного брокера MQTT, например, EMQX edge edition, работающего на Raspberry PI, должно быть более чем достаточно, не говоря уже о том, что один узел EMQX может обрабатывать до 2 миллионов подключений.
А теперь представьте себе эти примеры: миллионы автомобилей по всему миру; миллионы уличных фонарей по всей стране; и так далее, и тому подобное, количество устройств (клиентов MQTT) и объем данных могут быть очень большими, достаточно большими, чтобы сокрушить любой отдельный MQTT-брокер.
Это одна из причин, по которой нам необходимо создать кластер MQTT-брокеров. Но это также создает дополнительные проблемы, такие как:
- Обнаружение брокера MQTT: как клиенты должны знать, к какой конечной точке брокера подключаться;
- Перехват сеанса подписчика MQTT в случае отключения клиента от одного узла и повторного подключения к другому;
- Глобальная таблица маршрутизации должна быть последовательно разделена между всеми узлами в кластере.
Первые две проблемы можно решить, поместив перед кластером балансировщик нагрузки.
Балансировка нагрузки MQTT
Балансировка нагрузки MQTT
Чтобы решить вышеуказанные проблемы, балансировщик нагрузки должен помочь клиентам решить, к какому брокеру подключиться на основе настроенных стратегий балансировки. Основные функции балансировщика нагрузки для кластера брокера MQTT:
- Обнаружение конечных точек брокера. Клиентам нужно заботиться только об адресе балансировщика нагрузки, но не отдельных брокеров. Это также обеспечивает гибкость для брокеров при перемещении, увеличении или уменьшении масштаба.
- Прекращение TLS. Многие пользователи MQTT-брокеров предпочитают завершать TLS в LB, поэтому ресурсы в брокерах могут быть хорошо выделены для обработки сообщений.
- Равномерно распределяйте нагрузку между брокерами. Балансировщики нагрузки обычно настраиваются для стратегий балансировки, таких как случайный выбор, циклический перебор (имеющий различные взвешенные версии) и, что самое интересное, фиксированная диспетчеризация.
Поскольку MQTT является протоколом поверх TCP/IP, балансировка нагрузки может выполняться на транспортном уровне. На самом деле, в отличие от многих других вариантов, которые у нас есть, когда речь идет о HTTP, большинство продуктов для балансировки нагрузки сегодня (август 2021 г.) все еще работают на транспортном уровне. Например, AWS NLB, Nginx и HAProxy.
Помимо балансировки нагрузки на транспортном уровне, HAProxy 2.4 и NGINX plus также обеспечивают балансировку нагрузки MQTT на уровне приложений.
NGINX Plus — это платформа доставки приложений, основанная на NGINX, веб-сервере с открытым исходным кодом и обратном прокси-сервере для сайтов с высокой посещаемостью. эта статьяот Nginx Plus дает хорошее представление о своем решении для балансировки нагрузки MQTT.
Не менее превосходный, чем NGINX, HAProxy — это бесплатное программное обеспечение с открытым исходным кодом, которое обеспечивает высокодоступный балансировщик нагрузки и прокси-сервер для приложений на основе TCP и HTTP (а теперь и MQTT). По состоянию на август 2021 года HAProxy является единственным бесплатным балансировщиком нагрузки, поддерживающим протокол MQTT. В их Release Note.
В следующем посте из серии «Кластеризация брокера MQTT» мы будем использовать HAProxy 2.4 + EMQX 4.3, чтобы более подробно продемонстрировать полную подготовку.
Первоначально опубликовано на