🆙
Lightward
  • 👉Start here
  • Context
  • Priorities: Recursive health
  • Product: Playing the game
    • 1. Load the game
    • 2. Play the game
      • How to play
      • When to stop
      • The customer's health is not your job
      • Don't sign up for custom work
    • 3. Save your game
      • 3a. Record what's new
      • 3b. Push the update
      • 3c. Prepare for next time
  • Publishing: Erring public
  • Glossary
    • Concepts
    • Applications
    • Sync
  • Technical
    • README
    • Screenshots
    • Cronitor
      • SSL certificate expiration warnings
    • Fly
      • Overview
      • Restarting apps
      • Fly ATC
      • Counting all org machines
      • Autoscaling
      • Environment variables
      • Deploys
        • Recovering from deploy failures
      • Rough edges
      • SSH
      • Unusual consoles
    • GitHub
      • Dependabot
    • Migrations
Powered by GitBook
On this page
  • Strategies
  • Sidekiq
  • Web

Was this helpful?

Edit on GitHub
Export as PDF
  1. Technical
  2. Fly

Autoscaling

Fly has some of its own autoscaling features, but we don't use them. (Their autoscaling only applies to process groups that serve HTTP connections, and it doesn't appear to work when websockets are mixed in.)

Strategies

Our homegrown autoscaler pays attention to individual process groups. Each process group can be configured for up to three strategies:

  • Utilization

    • Aiming for 80% utilization, allowing 10% on either side of that before scaling up or down

  • Latency

    • Latency in excess of x results in scaling up

  • History

    • Our load patterns are very regular, and because Mechanic in particular is highly latency-sensitive, we use this strategy to scale up in anticipation of higher load based on the historical record

Sidekiq

Scaling down is implemented as sending the "quiet" instruction to a Sidekiq process. In general, we run one Sidekiq process per Machine. When a quieted Sidekiq process that has finished its work, it's safe to stop the corresponding Machine.

Our Sidekiq leader is configured to monitor for quiet Sidekiq processes that are performing no work. Whenever such a process is detected, the leader uses flyctl to stop the corresponding Machine.

Web

We don't have this implemented for web stuffs yet. We're just very over-provisioned, instead. :)

PreviousCounting all org machinesNextEnvironment variables

Last updated 1 year ago

Was this helpful?