Will NodeJS 'cluster' package for scaling clash with Railway autoscale?
If I wrap my express code in cluster code starting multiple workers to utilise the CPUs available, will this have any detrimental effects in relation to / will it clash with the general Railway setup and any Railway autoscaling capabilities?
10 Replies
Project ID:
71f5f58c-00cc-432f-abe7-316387a73153
it shouldn't, try it out
Thanks, will do.
But in terms of the Railway autoscale capability (and I'm not completely sure what the right question to ask is here...) -> I'm trying to figure out how much I can load up with workers without breaking without actually breaking anything...of course I'll be doing some tests but I'd like to have a little bit of clarity beforehand if possible.
for example, what's the worker pool in the default Railway Mongo setup, it looks like I can't change it via the UI, is it the default 5?
And assuming I/O loads (not compute loads), and 8vCPUs, would you say >8 workers on the machine would utilise the Railway scaling successfully or would it actually cause problems?
railway doesnt have autoscale yet, its only a fixed number you define.
you cant replicate databases yet.
the math for the max amount of workers is
(2 * num_cpu) + 1
so 17 workers on the dev plan.
but using the max amount of workers is not the right approach, you want to keep cpu usage to a max of 80% (6.4 vcpu) before you add a railway replica.
you could reach 80% cpu use with 2 workers, i dont know, its something you will have to play around with, num of workers per replica vs num of replicasmakes sense, thanks so much, this was very helpful!
no problem 🙂
If you can I would highly suggest using replicas over cluster as this prevents a single node of the cluster taking the whole app down.
Thanks for the suggestion @ImLunaHey ! That's definitely something I'm looking to do. For now looking to at least utilise each single node a bit more before I use replicas -> do you have any tips on how I can set up (++/--) the replica count programmatically during runtime e.g. through an env var (rather than from the railway cli) ?
maybe have a look at the railway API? you might be able todo something with that to automatically scale but im not certain since replicas are a new feature.
auto scaling is on the to-do list anyway, so personally I wouldn't bother rolling my own solution in favour of waiting for when railway adds a checkbox that says "enable auto replication"