for solace cloud brokers
A single Solace broker can only grow so far. Once you're on the biggest one and traffic keeps climbing, the question changes from "pick a bigger broker" to "how many brokers, and when?" solace-autoscale answers that using capacity numbers you measure from your own brokers, and shows the reason behind every recommendation, never just a number. It advises by default; turning on automatic scaling is a separate, deliberate switch.
how it works
Nothing is guessed and nothing is hidden. The capacity numbers come from your own brokers, not from us. The recommendation is worked out the same way every time, and it comes with the full reasoning - so you can still explain it to someone weeks later.
Feed it a spreadsheet of how your brokers actually perform. It saves that as a dated file it reads later, so you always know which numbers produced which answer.
It checks four things a broker can run out of - message rate, data rate, connections, and stored messages - and tells you which one you'll hit first.
Out of the box it just gives advice - it can't touch your brokers. Letting it scale for you is a separate, deliberate switch, with safety checks that block anything risky.
why it's not obvious
One broker can handle about 44,000 small (1 KB) messages a second - but only about 439 a second when each message is 200 KB. That's why "just add more brokers" is sometimes the wrong call: with big messages you run out of data capacity, and shrinking the message is usually the cheaper fix than buying more brokers.
three examples
These are real results from the tool. For each workload, the bars show how full one broker would be on each of the four things it can run out of. The amber line is the safe limit; the highlighted bar is the one you'd hit first - and the reason for the advice.
the smart shim
Once a workload spans several brokers, where each message goes stops being arbitrary. The
shim wraps the app's existing AMQP client and makes a per-message decision from rules that combine
the topic and the payload, picks the target broker, and stamps a partition key
on the wire (AMQP group-id plus a saas_partition_key property). The
listener side runs the same rules in reverse to demultiplex a coherent per-key stream, so routing
is deterministic and verifiable end to end. Type a message below and watch a rule fire.
When the fleet scales, the shim does not poll to find out. The autoscaler publishes a topology
snapshot as an event on the brokers' own reserved control topics, and the shim reacts to
the push. A scale-up moves only a small fraction of partition keys (rendezvous hashing), and each
moved key is reassigned ordering-first: it keeps draining on its old broker until in-flight
messages clear, then cuts over to the new owner, stamped with a generation (saas_gen)
so the listener releases the key's stream in order. Per-key order survives the scale event.
The rules driving this demo (first match wins; else the default broker):
dispatch:
enabled: true
default_broker: broker-bulk
rules:
- name: vip-orders # topic AND payload
when:
topic: "orders/>"
payload:
- { path: priority, op: in, value: [high, urgent] }
route:
broker: broker-vip
key: "vip.{region}" # partition key = ordering group
topic: "vip/{topic}" # optional address rewrite
- name: large-orders
when:
topic: "orders/>"
payload:
- { path: amount, op: gt, value: 1000 }
route: { broker: broker-big, key: "big.{region}" }
cost & planning
A recommendation you can take to a budget meeting needs a price tag and a look ahead. Give it your own prices and it shows the monthly cost. Ask "what if traffic doubles?" and it shows how many brokers you'd need - and where you'd run out of room.
| Group | Brokers | USD / mo | Change / mo |
|---|---|---|---|
| orders | 1 → 5 | 4,200 → 21,000 | +16,800 |
| plus 1 standby | +1 idle | 25,200 | +21,000 |
A standby broker still costs money while it sits idle. You supply your own prices - the tool ships none.
| Traffic | Brokers needed | Runs out of | Room left? |
|---|---|---|---|
| today | 5 | data rate | yes |
| 2× | 8 | data rate | full |
| 4× | 8 | data rate | full |
| 8× | 8 | data rate | full |
At just 2× today's traffic, this workload already maxes out an 8-broker limit. Better to plan for that now than be surprised by it next quarter.
quickstart
Before you add your own numbers, it runs on clearly-labelled sample data that can never trigger a real change. Install it, get a recommendation, then look ahead.
# install (Python 3.11+)
python -m venv .venv && . .venv/bin/activate
pip install -e '.[dev]'
# 1. turn your performance spreadsheet into numbers the tool can read
solace-autoscale compile --workbook performance.xlsx \
--service-classes models/service-classes.json --out models/mymodel.json
# 2. get a recommendation, with the reasoning and the cost
solace-autoscale recommend --config config.example.yaml --metrics metrics.json
# 3. see what you'd need if traffic doubles or quadruples
solace-autoscale whatif --config config.example.yaml --metrics metrics.json --multipliers 1,2,4
There's more it can do: simulate (stress-test the numbers across many workloads), monitor (watch a live broker and track how accurate its advice was), accuracy (predicted vs. what actually happened), shard-advise (suggest how to split traffic into groups), and serve (point clients at the right broker).
settings
Everything lives in one settings file, and it warns you about typos instead of ignoring them. The defaults are cautious on purpose. Here are a few settings you're most likely to touch:
fleet.min_brokers / max_brokers
Set a floor and a ceiling. If a workload needs more than the ceiling, it says so clearly rather than quietly pretending it fits.
topology.mode: sharded | mesh | hybrid
If your brokers talk to each other (mesh), it counts that extra traffic - so a setup that's costly with big messages looks costly, as it should.
policy.headroom.mode: derived | fixed
It can work out the margin for you - leaving room for traffic that keeps rising while a new broker spins up - or you can set a fixed number.
billing.model · per_broker_monthly
Add your own prices to see monthly cost. If you pay a fixed yearly rate, it won't suggest scaling down (you're paying either way). No prices ship with the tool.
metrics.source: semp | prometheus | cloud-api | static
Read live stats straight from a broker, from Prometheus, from the Cloud API, or from a file. The live-broker reader is checked against a real broker.
actuation.mode: recommend | scale-up-only | full
Advice-only by default, and it stays that way. Letting it make changes is a deliberate switch - with an off switch, rate limits, and checks before anything is removed.