Является ли MQTT масштабируемым для более 1000 клиентов?

10

Сценарий
IoT-устройства (в настоящее время устройство IPv4), которое отправляет через сокет TCP полезную нагрузку на сервер один раз в день. Сервер имеет публичный IP-адрес, устройство находится за маршрутизатором / NAT. Я собираюсь использовать модуль на основе ESP8266 (то есть Olimex один)

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

Другие требования
Количество устройств IoT может возрасти до нескольких тысяч. Их интернет-соединение обеспечивается многими маршрутизаторами / модемами с поддержкой 4G. Каждый из них будет обслуживать 10-20 клиентов.

Предлагаемое решение
Насколько я понимаю, общим решением является MQTT. Клиенты периодически отправляют данные брокеру (то есть Mosquitto, работающему на хост-сервере), который, в свою очередь, обновляет основное веб-приложение, работающее на том же сервере.

Вопрос
Подходит ли подход MQTT для «большого» количества устройств (более 1000), большинство из которых находятся за маршрутизатором 4G?

отметка
источник
Возможно, лучше задать вопрос (1) отдельно и просто задать вопрос (2), который соответствует вашему названию в теле вопроса. Таким образом, мы можем подробно ответить на каждый из ваших вопросов. Вы можете включить свой контекст снова в новый вопрос или ссылку на этот вопрос, если это поможет.
Аврора0001
1
Вопрос изменился и добавился второй.
Mark
Судя по всему, даже если вы столкнулись с проблемами нагрузки на сервер при удержании большого количества открытых соединений, ваша система была бы вполне совместима с топологией типа дерева, где клиенты подключаются к промежуточным серверам, которые содержат соответствующие сеансы и передают довольно редкий трафик вверх и вниз на более высокие серверы в одном канале каждый. Вероятно, вы могли бы даже сделать первый уровень этого локально в ваших маршрутизаторах 4G.
Крис Страттон

Ответы:

7

1000 клиентов легко могут быть обработаны любым достойным брокером MQTT; есть тест от Scalagent, который показывает, что ПК с:

  • процессор Intel Core 2 Duo 3 ГГц
  • 4 ГБ ОЗУ

может справиться с 60 000 издателей под управлением Mosquitto. Это намного превышает ваши требуемые 1000 издателей, поэтому даже на относительно слабом сервере вы все равно сможете обрабатывать необходимое количество.

Некоторые другие брокеры заявляют о еще более высокой производительности (конечно, с соответственно большей мощностью сервера), например, HiveMQ , который, как утверждается, обслуживает 10 миллионов издателей.

Брокеры MQTT, как правило, ожидают постоянное соединение и время ожидания клиентов, которые не отправляют ответы на пинг (или другие действия) периодически. Вы можете отключиться от сети после публикации, но, очевидно, вы не сможете ничего получить, если отключитесь.

MQTT поддерживает концепцию «сохраненных» сообщений, что может быть полезно. Веб-клиент может опубликовать что-либо в теме с сохраненным флагом, и это сообщение затем будет сохранено посредником. Каждый раз, когда ваши клиенты повторно подключаются и подписываются на тему, они получат сохраненное сообщение (даже если оно было опубликовано несколько часов назад). Сохраненное сообщение публикуется каждый раз, когда клиент подписывается на эту тему, что может помочь вам, если у вас нестабильное соединение и вам нужно сохранить сообщение до тех пор, пока клиент не переподключится.

Аврора0001
источник
Я наверняка объяснил это неправильно. Только сервер (коммерческий хостинг) должен обслуживать более 1000 клиентов. Есть много 4G маршрутизаторов в разных местах, и каждый из них будет обрабатывать только 10-20 клиентов.
Mark
О, я неправильно понял - моя вина, @Mark, я предполагал, что вы имели в виду всех их за одним 4G маршрутизатором. Я отредактирую это в этом случае.
Aurora0001
Я еще не до конца понимаю базовый код MQTT - я боялся соединений 4G: требует ли MQTT постоянных интернет-соединений? Скорее всего , сеть будет неустойчивым ...
Марк
Я редактировал с некоторыми предложениями, @Mark; дайте мне знать, если это направит вас в правильном направлении.
Aurora0001
1
Да, теперь стало понятнее. Я собираюсь сделать дальнейшие поиски по этой теме, и если мне все еще нужна помощь, я задам другой вопрос. Большое спасибо.
Mark
5

Вы можете использовать постоянные сеансы от клиентов, например, установить флаг очистки на false при подключении. В этом случае событие, когда ваш клиент находится в автономном режиме, брокер помещает для него сообщение в буфер и отправляет его после подключения устройства.

По поводу количества - 10K - это относительно небольшое количество даже для одного сервера. Вы можете настроить сервер Linux на хранение 500 тыс. Активных соединений, и если ваш брокер будет работать в облаке, например, предоставленным в качестве услуги каким-либо провайдером, то вы можете хранить даже миллионы активных соединений с ним.

Кстати, я думаю, что Mosquitto или любая другая локальная установка - идеальный выбор для разработки и тестирования, но когда вы начнете работу, вам понадобится SaaS MQTT-брокер со всеми функциями, такими как HA, резервирование, отработка отказа и т. Д.

ШЭЛ
источник
Я не думаю, что брокер SaaS MQTT всегда лучший для производства. Большинство профессиональных (самостоятельно размещаемых) MQTT-брокеров поддерживают HA, избыточность и отработку отказа в масштабе, сохраняя полную совместимость с MQTT. Некоторые SaaS-брокеры не поддерживают все функции MQTT. Если вы проводите тестирование против местного комара, а затем обращаетесь к поставщику SaaS, есть вероятность, что все работает не так, как задумано.
Доминик Обермайер
Как обычно, есть плюсы и минусы обоих вариантов. Очевидно, что любому SaaS-брокеру требуется отличная коммуникационная команда, долгосрочное тестирование на ранней стадии разработки продукта, четкие гарантии безотказной работы и различные SLA. Поддержание собственного брокера - это тоже хороший способ, но мир движется к услугам. Либо вы приложите усилия и будете более компетентны с вашим продуктом, который использует брокера как его часть, либо вы потратите свое время и деньги на то, чтобы стать опытным администратором MQTT-брокера (и никогда не станете его разработчиком!). Просто вопрос выбора +)
шал