We are building a web app which will be used during a contest to vote contestants and display real-time vote statistics on a central display.
The contest will last 15 minutes and around 4000 users will be connecting to the web app in that lapse of time and send votes, which however are unique per user device.
We are thinking to develop such web app using Meteor.js. However, due to our little experience in developing services for such big amount of concurrent users and the beta state of Meteor.js, we have some concerns regarding the actual feasibility of the project.
The following are the questions we are addressing:
votes.find({})
, the rest of the users will only see the vote / already voted button.Having some data from a real case or test scenario would help us a lot.
Would Meteor's infrastructure be able to handle 4000 users? Or should we go for some other hosting solution as listed in this deleted question (you need 10k+ rep to see it)?
Are there any performance considerations specific to Meteor.js we should be aware of?
We have seen already similar posts, however none of them was dealing with such large amount of users in such a short time:
Also, we could use the Cluster smart package. Anyone has any experience with this?
With a single CPU core, a web server can handle around 250 concurrent requests at one time, so with 2 CPU cores, your server can handle 500 visitors at the same time.
If you don't need real-time then just use Meteor methods or Apollo. This will make Meteor as scalable as any other socket based node app. Do use out of the box pub/sub to validate ideas quickly but don't expect to scale without any tweaks.
Meteor allows you to develop in one language, JavaScript, in all environments: application server, web browser, and mobile device. Meteor uses data on the wire, meaning the server sends data, not HTML, and the client renders it.
If you are an experienced JavaScript developer, you should give Meteor a chance — you will certainly enjoy how fast and convenient the development process is. If you are a developer experienced in any language other than JavaScript but would like to master this language as well, Meteor.
UPDATE ClassCraft reports one Meteor server handling 6400 concurrent users. Read more in the Scalability section of my Why Meteor article.
See also the forum post
How Many Simultaneous Users Does the Biggest Current Meteor App Support?
Here's a benchmark not exactly about concurrent users, but rather about setting up subscriptions (arguably a more stressful test).
Arunoda has recently published the results of a test using meteor-down
(a load testing tool similar to @alanning's meteor-load-test) and Cluster, a Meteor load balancing tool.
The test was run on the cheapest Digital Ocean servers (512MB RAM, $5/month), and the results were rather impressive:
For all the above scenarios, server response time is less than 8ms.
Essentially one commodity machine can handle 2500 Meteor subscriptions per minute and respond within 8 miliseconds. Horizontal scaling takes less than 5% overhead.
You can read more about the test at Meteor Cluster Performance Test: Impressive Results.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With