How are users getting past a 1024 connection limit in Linux in association with doing MQTT for push notification?
I am using Mosquitto server, which I think I read does not have a 1024 connection limit built into the linux version. So, can I use a single server (no bridging etc) and get 5,000, 10,000+ users?
Or, do I absolutely need bridging? I haven’t seen a lot of writing on how this is setup other than the config settings man page for mosquitto.
Or, can I get by with just modify a few linux configuration settings and I’m good to go with a single mosquitto server?
My app is more or less an instant messaging app, so I expect to have ~10,000 maybe even 20,000 people using it with permanent 24/7 connections to mosquitto to alert them of messages.
In theory you could up the Linux setting for max number of sockets for mosquitto to what you need. The question then is around performance. The key metric is number of messages per second total. If you have 20k clients connected, how many will be active and how many messages will each be sending?
As an example, if half of your clients are active and sending 1 message per second, there are 10k msps – incoming only of course. If each of those messages is 10 bytes, you’re at a sustained 100kB/s or 800kbps.
Another aspect is how your topic hierarchy is arranged. I can’t tell you what is best, but it will certainly have an effect.
My best suggestion would be to write a client that simulates a real person, then use it to so real testing of your scenario.
I have seen examples of extreme client count: http://bit.ly/HytRpK but have no more details.
One final point: IBM are currently producing a redbook on MQTT. It should be available ‘in spring’, i.e. soon. I think it will cover scaling issues.
For a customer we tested IBM WebSphere MQ’s MQTT, increasing the # of concurrent client connections up to 240,000 per queue manager (MQ runtime, you can have many in an MQ cluster). I was told that is something like 10x more than is reasonably handled by an Apache web server. Server CPU during testing was low at <5%. Would have kept increasing the # of concurrent MQTT clients well beyond 240,000 but the lab ran out of load testing client machines. IBM MQ is the pub/sub provider embedded in WebSphere Message Broker ESB so I expect that’d have the same result.
I don’t know of anyone who has done volume testing of mosquitto to that number of connections. I suppose one thing you could do would be to test an instance of mosquitto on your chosen runtime and connect lots of client threads to it during your system testing.
IBM’s implementation using WebSphere MQ as the MQTT broker has been shown to support up to 100,000 concurrent connections. I believe IBM’s free broker RSMB is limited to 1024 connections.
You might want to consider how to scale out your broker using bridges and a provisioning service to work out which broker to connect new users to.