Ist MQTT mit über 1000 Clients skalierbar?

10

Szenario
IoT-Gerät (derzeit IPv4-Gerät), das über TCP-Socket einmal pro Tag eine Nutzlast an einen Server sendet. Der Server hat eine öffentliche IP-Adresse, das Gerät befindet sich hinter einem Router / NAT. Ich werde ein Modul verwenden, das auf ESP8266 basiert (dh Olimex eins).

Ziel
Der Server sollte in der Lage sein, Daten an jeden Client zu senden, wann immer dies erforderlich ist. Ich bin nicht an einer direkten Client-zu-Client-Kommunikation interessiert (dh von meinem Smartphone aus mit einem Gerät verbunden), wie es das Lochern tun soll.

Sonstige Anforderungen
Die IoT-Geräte können bis zu mehreren Tausend wachsen. Ihre Internetverbindung wird von vielen 4G-fähigen Routern / Modems bereitgestellt. Jeder wird 10-20 Kunden behandeln.

Vorgeschlagene Lösung
Soweit ich weiß, ist MQTT eine übliche Lösung. Die Clients senden regelmäßig Daten an den Broker (dh Mosquitto, der auf dem Hosting-Server ausgeführt wird), der wiederum die Haupt-Web-App aktualisiert, die auf demselben Server ausgeführt wird.

Frage
Ist der MQTT-Ansatz für eine "große" Anzahl von Geräten (1000+) geeignet, von denen die meisten hinter einem 4G-Router stehen?

Kennzeichen
quelle
Es ist möglicherweise besser, Frage (1) separat zu stellen und nur Frage (2) zu stellen, die Ihrem Titel im Fragentext entspricht. Auf diese Weise können wir jede Ihrer Fragen einzeln detailliert beantworten. Sie können Ihren Kontext erneut in die neue Frage aufnehmen oder auf diese verlinken, wenn dies hilfreich ist.
Aurora0001
1
Die Frage wurde geändert und die zweite hinzugefügt.
Mark
Selbst wenn Sie auf Probleme mit der Serverlast stoßen würden, bei denen eine große Anzahl offener Verbindungen besteht, wäre Ihr System durchaus mit einer Baumstruktur von Topologie kompatibel, bei der Clients eine Verbindung zu Zwischenservern herstellen, die die entsprechenden Sitzungen abhalten und die eher bestehen seltener Datenverkehr auf und ab zu höheren Servern in jeweils einer Pipe. Sie könnten wahrscheinlich sogar die erste Stufe davon lokal in Ihren 4G-Routern ausführen.
Chris Stratton

Antworten:

7

1.000 Kunden können problemlos von jedem anständigen MQTT-Broker bearbeitet werden. Es gibt einen Benchmark von Scalagent, der zeigt, dass ein PC mit:

  • ein 3 GHz Intel Core 2 Duo Prozessor
  • 4 GB RAM

konnte 60.000 Verlage mit Mosquitto behandeln. Dies ist weit mehr als Ihre erforderlichen 1.000 Publisher. Selbst auf einem relativ schwachen Server sollten Sie in der Lage sein, die erforderliche Anzahl zu verarbeiten.

Einige andere Broker behaupten eine noch bessere Leistung (natürlich mit entsprechend höherer Serverleistung ), wie beispielsweise HiveMQ , das behauptete, 10 Millionen Publisher zu verwalten.

MQTT-Broker erwarten im Allgemeinen eine dauerhafte Verbindung und setzen Clients, die keine Ping-Antworten (oder andere Aktivitäten) regelmäßig senden, eine Zeitüberschreitung zu. Sie könnten nach der Veröffentlichung die Verbindung zum Netzwerk trennen, aber dann können Sie natürlich nichts empfangen, wenn Sie die Verbindung trennen.

MQTT unterstützt das Konzept von "beibehaltenen" Nachrichten, die nützlich sein könnten. Der Webclient kann etwas zu einem Thema mit dem beibehaltenen Flag veröffentlichen, und diese Nachricht wird dann vom Broker gespeichert. Wenn Ihre Kunden das Thema erneut verbinden und abonnieren, erhalten sie die beibehaltene Nachricht (auch wenn sie vor Stunden veröffentlicht wurde). Die beibehaltene Nachricht wird jedes Mal veröffentlicht, wenn ein Client dieses Thema abonniert. Dies kann Ihnen helfen, wenn Sie eine uneinheitliche Verbindung haben und eine Nachricht speichern müssen, bis der Client erneut eine Verbindung herstellt.

Aurora0001
quelle
Ich habe es sicherlich falsch erklärt. Nur der Server (kommerzieller Hosting-Dienst) sollte die über 1000 Clients verarbeiten. Es gibt viele 4G-Router an verschiedenen Orten, und jeder kann nur 10 bis 20 Clients verarbeiten.
Mark
Oh, ich habe falsch verstanden - meine Schuld, @Mark, ich nahm an, dass Sie alle hinter einem 4G-Router gemeint haben . Ich werde dies in diesem Fall bearbeiten.
Aurora0001
Ich verstehe den zugrunde liegenden Code von MQTT noch nicht vollständig - ich hatte Angst vor den 4G-Verbindungen: Erfordert der MQTT dauerhafte Internetverbindungen? Wahrscheinlich wird das Netzwerk instabil sein ...
Mark
Ich habe mit einigen Vorschlägen bearbeitet, @Mark; Lassen Sie mich wissen, ob dies Sie in die richtige Richtung weist.
Aurora0001
1
Ja, jetzt ist es klarer. Ich werde einige weitere Suchen zu diesem Thema durchführen und wenn ich noch Hilfe benötige, werde ich eine weitere Frage stellen. Vielen Dank.
Mark
5

Sie können dauerhafte Sitzungen von Clients verwenden, z. B. das Clean-Flag, das beim Verbinden auf false gesetzt wird. In diesem Szenario puffert der Broker, wenn Ihr Client offline ist, die Nachricht für ihn in den eigenen Cache und übermittelt sie, sobald das Gerät eine Verbindung herstellt.

Über die Menge - 10K ist selbst für einen Server eine relativ geringe Menge. Sie können den Linux-Server so konfigurieren, dass 500.000 aktive Verbindungen gespeichert werden. Wenn Ihr Broker Cloud-basiert ist, z. B. von einem Anbieter als Dienst bereitgestellt, können Sie sogar Millionen aktiver Verbindungen zu diesem Server halten.

Ich denke übrigens, Mosquitto oder eine andere lokale Installation ist die perfekte Wahl für Entwicklung und Test, aber wenn Sie in Produktion gehen, benötigen Sie einen SaaS MQTT-Broker mit allen Funktionen wie HA, Redundanz, Failover usw.

soll
quelle
Ich denke nicht, dass ein SaaS MQTT-Broker immer der beste für die Produktion ist. Die meisten professionellen (selbst gehosteten) MQTT-Broker unterstützen HA, Redundanz und Failover in großem Maßstab, während die vollständige MQTT-Kompatibilität erhalten bleibt. Einige SaaS-Broker unterstützen nicht alle MQTT-Funktionen. Wenn Sie gegen eine lokale Mücke testen und dann zu einem SaaS-Anbieter gehen, besteht die Möglichkeit, dass die Dinge in der Produktion nicht wie beabsichtigt funktionieren.
Dominik Obermaier
Wie üblich gibt es Vor- und Nachteile beider Optionen. Es ist offensichtlich, dass jeder SaaS-Broker ein perfektes Kommunikationsteam, Langzeittests in der frühen Phase der Produktentwicklung, klare Verfügbarkeitsgarantien und verschiedene SLA benötigt. Es ist auch eine gute Möglichkeit, einen eigenen Broker zu unterhalten, aber die Welt bewegt sich in Richtung Dienstleistungen. Entweder werden Sie sich bemühen und mit Ihrem Produkt, das Broker als Teil davon verwendet, am kompetentesten sein, oder Sie werden Zeit und Geld darauf verwenden, ein äußerst erfahrener MQTT-Broker-Administrator zu sein (und niemals dessen Entwickler zu sein!). Nur eine Frage der Wahl +)
soll