Free preview

Scaling with a Hybrid Hierarchy

In one line: the design so far works for one data center and fails for a fleet. The fix — pull locally, push globally — is a general scaling pattern worth carrying beyond monitoring.

What the current design gets right and wrong

Detail
ProsDetects signs of impending problems early · Prevents network congestion by controlling data flow via the pull model · Provides high availability for monitoring data
ConsA dedicated monitoring server is a SPOF — a failover helps, but one server cannot scale indefinitely · Storing high-resolution data indefinitely is resource-intensive, requiring retention policies

Both problems have the same root: everything funnels into one place.

The hybrid hierarchy

We initially used pull to avoid network congestion and decouple applications from monitoring logic. To scale, combine both strategies by level:

  1. Local pull — assign "secondary" monitoring servers to specific clusters, for example one server monitoring 5,000 nodes. These pull data from local nodes.
  2. Global push — secondary servers push aggregated data to a primary data center server, which pushes to a global monitoring service responsible for all data centers.

The hierarchy distributes the load. Blob storage holds bulk data, Elasticsearch provides search, and a visualizer handles analytics. As servers increase, simply add more secondary monitoring nodes.

Why pull locally and push globally

The two levels have genuinely different constraints, and each strategy fits one of them.

Locally, targets are numerous, close, and churning. Pull wins: the collector controls the rate, and a failed scrape tells you a node is gone. Network cost within a cluster is cheap.

Globally, the links are long, expensive, and shared. Pull would mean a global server reaching across the WAN to thousands of secondaries — enormous fan-out over the most constrained links. Push wins: each secondary sends aggregated data upward, so what crosses the WAN is a summary rather than raw samples.

The general rule: pull where fan-out is high and links are cheap; push where fan-out is high and links are expensive.

What if a monitoring system goes down?

We can store the data locally and wait for the system to be back up. But there's a limit to local storage. So either we delete previous data, or we don't store new data. To decide, relevant policies need to be created.

That is an honest statement of a genuine dilemma. When the upstream is unreachable, a secondary buffers — and buffers are finite:

Choice when the buffer fillsConsequence
Delete previous dataKeep the most recent — you lose history but retain what's happening now
Stop storing new dataKeep the older window — you lose visibility into the ongoing incident

Monitoring the thing you depend on

The sharpest question in this chapter: how can a monitoring system work reliably if it runs on the same infrastructure it monitors? A data center network failure can knock out the monitoring components along with everything else.

The answer, per the design:

MitigationDetail
Isolated networkAn internal, monitoring-specific network separate from the common network
Separate instancesA separate instance of blob stores and other services, not shared with production
External componentsComponents external to the monitored environment — potentially an independent service provider's infrastructure

However, designing such a system is complex and more expensive.

This is the circular-dependency problem, and it's the best deep-dive in the chapter

The watchdog does not need to be sophisticated — it needs to fail independently. A handful of signals is enough: is the pipeline accepting writes, how far behind is it, and is anything at all arriving from each region.

If monitoring shares fate with the thing it monitors, it goes dark exactly when you need it — and worse, the silence is ambiguous. Is the fleet healthy and quiet, or is everything down including the observer?

Full isolation is expensive, so the realistic posture is tiered: run the bulk of monitoring on shared infrastructure, and keep a small, independent external check — a third-party prober hitting your service from outside — as the answer to "is anything alive at all?"

That external check is cheap, and it is the one signal you can trust when your own data center stops reporting. This is the failure-independence principle from the Foundations module applied to the observer itself.

Key takeaway

Pull locally, push globally, aggregate at each level. And keep at least one observer outside the system it watches — otherwise silence is indistinguishable from health.

Interview signal by level

LevelWhat a strong answer sounds like
L4"Add more monitoring servers as the fleet grows."
L5Describes the hierarchy: "secondary servers pull from local clusters and push aggregates up to a per-DC primary, then to a global service."
Staff+Explains the pull/push split and the circular dependency: "pull locally because links are cheap and a failed scrape is a signal; push globally because the WAN can't take that fan-out, and we send aggregates not raw samples. And I'd keep an external prober outside our infrastructure — otherwise a data center failure takes out the monitoring too, and silence becomes ambiguous."

Next: showing millions of servers on one screen.

Enjoying the preview?

Create a free account to unlock the rest of this course, the in-browser judge, and live AI mock interviews.

Sign up free to continue