I love Meteor to be honest. But I had so much headache when trying to put meteor apps to production that I’ve stopped using it in new projects. It was about 5 years ago, there was not so much info about how to scale meteor apps and it disappointed me in a hard way.
Even dropping pub/sub and using only meteor methods could hardly solve the problem. As only online users become more than 100, meteor server took 100% of CPU and more and hosting provider stopped my VM. It was… painful.
After investigating the problem I found out that this was all around nodejs socket implementation that took almost all CPU resources (besides meteor pub/sub resources consuming). So I had to fight hard with the core of the meteor. I’ve turned off the meteor native implementation of sockets, setup the separate socket server written in Go (centrifuge), have written my own pub/sub to replace the native meteor implementation and although it was far from meteor comfort of using it, it solved the problem - at least several hundreds and up to 1000 of concurrent users let the cpu hardly move more than 15-20%. I was happy, but…
I’ve faced the question - now my system hardly reminded the meteor app as it supposed to be. Now this is a simple client-server app (SPA) that hardly differ from other, non-meteor apps but with self-made huge subsystem, that solve the problem you can not face in other frameworks. So why should I use it?
Now my personal tools are - Nuxt.js for client and server API is in Go. Resources used - minimum. Comfort? Yes. Not like in meteor, but it’s own. Hi load? Easy. Thousands or even tenth’s of thousands. Or more by using some tricks. And there is no questions on vertical or horizontal scaling. It’s quite easy in Go world.
But having my old systems in meteor running, one is my personal blog with fiction books I write, I still look at meteor to see if I can return to it at least in a borders of my old projects that is still alive.
So, is Meteor still unable to process at least 1000 concurrent users without dances with a tambourine?