2012-04-10 16 views
8

Wie kommt es, dass Benutzer in Verbindung mit der Ausführung von MQTT für Push-Benachrichtigungen ein 1024-Verbindungslimit überschreiten?mqtt mosquitto linux-Verbindungslimit

Ich benutze Mosquitto Server, von dem ich glaube, ich habe keine 1024 Verbindungslimit in die Linux-Version eingebaut. Also, kann ich einen einzelnen Server (keine Überbrückung usw.) verwenden und 5.000, 10.000+ Benutzer bekommen?

Oder brauche ich unbedingt Überbrückung? Ich habe nicht viel darüber geschrieben, wie das eingerichtet wird, außer der Konfigurations-Manpage für Mosquitto.

Oder kann ich mit nur ein paar Linux-Konfigurationseinstellungen umgehen und ich bin gut, mit einem einzigen Moskito-Server zu gehen?

Meine App ist mehr oder weniger eine Instant Messaging App, also erwarte ich, dass ~ 10,000 vielleicht sogar 20,000 Leute mit permanenten 24/7 Verbindungen zu mosquitto arbeiten, um sie auf Nachrichten aufmerksam zu machen.

Hmmm

Antwort

8

Theoretisch könnten Sie die Linux-Einstellung für die maximale Anzahl von Sockets für Moskitos auf, was Sie brauchen. Die Frage ist dann um die Leistung. Die Schlüsselmetrik ist die Anzahl der Nachrichten pro Sekunde insgesamt. Wenn Sie 20k Clients verbunden haben, wie viele werden aktiv sein und wie viele Nachrichten werden jeweils senden?

Wenn beispielsweise die Hälfte Ihrer Clients aktiv ist und 1 Nachricht pro Sekunde sendet, sind es natürlich nur 10k Msps - eingehende Nachrichten. Wenn jede dieser Nachrichten 10 Byte lang ist, sind Sie dauerhaft bei 100 KB/s oder 800 KBit/s.

Ein weiterer Aspekt ist, wie Ihre Themenhierarchie angeordnet ist. Ich kann Ihnen nicht sagen, was das Beste ist, aber es wird sicherlich eine Wirkung haben.

Mein bester Vorschlag wäre, einen Client zu schreiben, der eine reale Person simuliert, und ihn dann zum Testen Ihres Szenarios zu verwenden.

Ich habe Beispiele für extreme Anzahl von Kunden gesehen: http://bit.ly/HytRpK, aber keine weiteren Details.

Ein letzter Punkt: IBM produziert derzeit ein Redbook auf MQTT. Es sollte "im Frühjahr", d. H. Bald verfügbar sein. Ich denke, es wird Skalierungsfragen behandeln.

+0

Vielen Dank Roger ~ Eigentlich erwarte ich nicht, dass meine Kunden überhaupt sehr aktiv sind. Ich erwarte, dass über 20.000 Kunden vielleicht 4 oder 5 Anfragen pro Sekunde haben. Die gesamte Benutzerkommunikation läuft vom Client -> Server über SSL, nicht MQTT .. Dann benutze ich MQTT, um eine Benachrichtigung an den Benutzer einer neuen Nachricht zu senden. Ungefähr 4 oder 5 Mal pro Tag benutze ich auch MQTT um zu pushen Daten an * alle * meine Benutzer, tägliche Nachrichtenaktualisierungen wirklich .. So sehr niedrige Daten/Nachrichten pro Sekunde. Themenhierarchie - ich hatte vor, 1 Thema pro Benutzer zu tun. Also 20.000 Themen .. Hmm –

3

Ich weiß nicht, von jedem, der Volumenprüfung von mosquitto getan hat diese Anzahl von Verbindungen. Ich nehme an, eine Sache, die Sie tun könnten, wäre, eine Instanz von mosquitto auf der gewählten Laufzeit zu testen und viele Client-Threads während des Systemtests mit ihr zu verbinden.

IBMs Implementierung mit WebSphere MQ als MQTT-Broker unterstützt nachweislich bis zu 100.000 gleichzeitige Verbindungen. Ich glaube, IBMs freier Broker RSMB ist auf 1024 Verbindungen beschränkt.

Sie sollten überlegen, wie Sie Ihren Broker mithilfe von Bridges und einem Provisioning-Dienst skalieren können, um herauszufinden, mit welchem ​​Broker neue Benutzer verbunden werden sollen.

5

Für einen Kunden haben wir IBM WebSphere MQs MQTT getestet, wodurch die Anzahl gleichzeitiger Clientverbindungen auf bis zu 240.000 pro Warteschlangenmanager erhöht wurde (MQ-Laufzeit können Sie viele in einem MQ-Cluster haben). Mir wurde gesagt, dass das ungefähr 10x mehr ist als vernünftigerweise von einem Apache Webserver gehandhabt wird. Server-CPU während des Testens war niedrig bei < 5%. Hätte die Anzahl gleichzeitiger MQTT-Clients weit über 240.000 hinaus erhöht, aber das Labor hatte keine Lasttest-Client-Maschinen mehr. IBM MQ ist der Pub/Sub-Provider, der in WebSphere Message Broker ESB integriert ist. Daher erwarte ich, dass das gleiche Ergebnis erzielt wird.