Realtime updates can be made scalable

Continuing the discussion from Why not Meteor in 2020?:

I’ve seen various mentions that realtime reactivity makes Meteor not scale well. It is a valid concern, but it’s also not a big one.

I wanted to re-share that it is easy to both make reactivity fine-grained and/or throttle it:

Not only that, but the same trick can be used on the server side to throttle data for a publication, or even to throttle data from one collection to another.

Here are some more ideas:

No matter what system we’re in, “lots of data” is always going to be a problem. I think it is better to start with such a simple and nice developer experience, then add a little work to it when big data needs happen, than to start with something else.

Is there something else that makes Meteor not scale? Let’s try to debunk it.

So far the benefits of using Meteor outweigh the work needed to limit realtime data.

3 Likes

Meteor is awesome to develop with, although the downside is it’s performance isn’t amazing unless you master it. The app itself doesn’t use much resources but it’s the database that does. Mongo is pretty good, I think you can do some big numbers with it. Compared with MySQL Percona it does feel slightly slower and not as well under heavy stress. At around 300-400 concurrent users my dual quadcore starts to chug. With Percona it can easily handle up to 10k concurrent.

I think a MySQL driver and nonreactive setup should be part of the manual and demo. Not everyone needs reactive data but they do need Meteor.

The most understated feature which I have only encountered now after months of looking is Tracker.nonreactive() there is barely one line of information on this in the manual and I haven’t seen it mentioned here in the forum. I learned about it from a brochure produced by Project Ricochet about how to get good performance from Meteor.

Besides disabling reactivity on non-essential subscriptions. Utilizing oplog and memcached infront of your publication / Method call will get better mileage although it is not to the level of Percona as of yet. I run 4.5 million daily visitors / 800req/s and 45gbps throughput on percona and it doesn’t flinch, it is behind 3 nginx servers loadbalanced and I am certain Meteor can do those levels, but not without a lot of love and tuning. Percona is ready out the box and require little tuning to get there.

2 Likes

@truedon Indeed there isn’t much documentation around reactivity performance. Solid.js has Meteor-like dependency-tracking reactivity, and it specializes in that with a whole community around it; that’s all they think about. Learning Solid will help any Meteor developer to think about depedency-tracking reactivity in various ways including performance considerations.

Was this that Ricochet article (along with the “whitepaper” it links to) that you were referring to?

I started a new topic here, and would love any input:

It was that link yes, thanks for all the info we should talk more! I love FPS games have you seen the latest unreal engine?

Cool! Sure! Here I am. :slight_smile:

I’ve seen it, but I haven’t dug into its implementations. My intent is to make the best thing possible for web. Unity and Unreal (etc) are not web-first, but native-first, platforms. But I’d like to make something for web, and later make compiling to native a secondary option. I’ve got some things in motion for this, but it will take some time.

2 Likes

Hi,

The link to download the white paper is broken. Do you know where is it possible to access it?

Thanks

The problem has always been oplog tailing, there’s no official solution - vendor-supported or third party.

Redis-Oplog seemed to have done wonders for many companies - but it’s pretty much a deprecated project. Even if works well now, nobody would want to stake a company on it.

6 Likes

Is this a problem only for server performance, and there might be a delay from when the server sends a message to the next time it does?

If I understand correctly, this doesn’t have any effect on the speed of the actual communication from the server to the client, right?

It places a hard limit on how much Meteor can scale - i.e. even as you add more servers, your application wont be able to handle many more concurrent users

1 Like

I’m not sure, but I think that Meteor Community Packages actually overtook this package (or will do so): Update redis package version to 3.0.2 by dovydaskukalis · Pull Request #354 · cult-of-coders/redis-oplog · GitHub. It’d be best if @storyteller could shed some light on this topic.

1 Like

Sorry I don’t know where that white paper is now bud

I tried oplog but performance was worsened so it was a nothing burger for me

Yes, I have the rights to merge PRs and release new versions. But right now I’m too overworked to be able to develop it myself.

1 Like