RFC cluster: make scheduler pluggable
- Version: Future versions
- Platform: All
- Subsystem: cluster
I believe a few people have asked for this directly and indirectly in the past. It would be nice to be able to customize the cluster master's scheduling policy. For example, I've seen people request the ability to "pause" a worker.
One possibility is to define a custom scheduling policy, and let the user pass in a constructor like our existing SharedHandle
or RoundRobinHandle
. Users would need to define a constructor function, add()
method, and remove()
method. I put together a small proof of concept, including example usage, in https://github.com/cjihrig/node-1/commit/427beec00cea49e7199eac065eb596224ad18677.
The downside is that it exposes some internal ugliness like the constructor function taking key
, address
, port
, addressType
, fd
, and flags
arguments. A simpler alternative might be to only require the user to define a scheduling function like RoundRobinHandle#distribute()
and then use that with the RoundRobinHandler
unless the SharedHandle
is used.
Thoughts?