Hi
I have the following requirement for my work, and I'd like to hear
opinions on the possible inclusion of such features on whirr.
I need an elastic scaling monitor and coordinator, i.e. a whirr process
that would be running on some or all of the nodes that:
- would collect load metrics (both generic and specific to each
application)
- would feed them through an elastic decision making engine (also
specific to each application as it depends on the specific metrics)
- would then act on those decisions by either expanding or contracting
the cluster.
Some specifics:
- it must not be completely distributed, i.e. it can have a specific
assigned node that will monitor/coordinate but this node must not be fixed,
i.e. it could/should change if the previous coordinator leaves the cluster.
- each application would define the set of metrics that it emits and
use a local monitor process to feed them to the coordinator.
- the monitor process should emit some standard metrics (Disk I/O, CPU
Load, Net I/O, memory)
- the coordinator would have a pluggable decision engine policy also
defined by the application that would consume metrics and make a decision.
- whirr would take care of requesting/releasing nodes and
adding/removing them from the relevant services.
Some implementation ideas:
- it could tun on top of zookeeper. zk is already a requirement for
several services and would allow to reliably store coordinator state so that
another node can pickup if the previous coordinator leaves the cluster.
- it could use Avro to serialize/deserialize metrics data
- it should be optional, i.e. simply another service that the whirr cli
starts
- it would also be nice to have a monitor/coordinator web page that
would display metrics and view cluster status in an aggregated view.
What do you think?
Is this something you envision as possible, and if yes are there any
use cases other that mine?
I'd, of course, be willing to do and contribute work on this.
Cheers
David