Skip to content

RockaLabs/ladder

 
 

Repository files navigation

Ladder Build Status Go Report Card codecov


Ladder is a simple and flexible general purpose autoscaler.

The idea behind Ladder is to autoscale anything configuring and combining reusable blocks of different types in a yaml file. These blocks are flexible and easy to extend, so anyone can use or develop any kind of scaling targets, policies or inputs.

Some examples that Ladder can do at this moment:

  • Get number of messages in a SQS queue, apply a constant factor to this input, then use this quantity to upscale or downscale the EC2 machines of an AWS AutoscalingGroup
  • Get the latency of a service from a Prometheus metric, if this latency is greater than 800ms, add one more instance to the actual number of instances of that service running on ECS, if is less than 200ms remove one instance to the running ones instead.

We want to add more blocks to the ones that Ladder provides by default (ECS & EC2 ASG), for example:

  • Inputs:
    • Get metrics from Datadog
    • Get number of messages from Rabbitmq queue
  • Filters:
    • Apply statistic prediction based on a metric, previous autoscaling result, etc
  • Scalers:
    • Kubernetes replicas
    • Instance VMs on GCE
    • Azure virtual machines

Features

  • Very flexible and configurable
  • Simple, light and fast
  • Reliable
  • Easy to configure and extend
  • Metrics ready (Prometheus)
  • Easy to deploy and set up running
  • Tons of third party blocks ready to use (AWS, Prometheus...)

Architecture

  • Inputter: Gets data and returns an scaling quantity result
    • Gatherer: Gets the data from any resource
    • Arranger: Applies logic to convert the input to an scaling quantity result
  • Solver: Takes one of the multiple results the inputters return.
  • Filter: Applies logic and changes(or not) the result of the Solver
  • Scaler: Scales on a target the desired quantity received from the last filter applied, or from the solver if no filters where applied.

Status

Ladder has been autoscaling TheMotion platform in production for more than 6 months. Is stable and production ready although it needs more blocks like scalers or gatherers.

Documentation

Check out the online documentation at https://themotion.github.io/ladder or offline:

$ make serve_docs

Go to http://127.0.0.1:1313 on the browser

Prometheus metrics

Changelog

See changelog

License

Authors

See authors & contributors

Maintainers

See maintainers to know who is/are the person/people you need to contact.

About

A general purpose extensible autoscaler for the cloud

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 98.9%
  • Other 1.1%