Create your own
Lesson illustration

Estimating Throughput, Storage Growth, and Bandwidth Needs

Welcome back. The container diagram from the previous lesson established the pilot’s operational boundaries: a Telemetry Connector collects Microsoft Entra ID events, a durable event log separates ingestion from detection, a Detection Worker creates alert summaries, PostgreSQL holds investigation state, and object storage retains evidence.

This lesson tests whether that design is plausible at scale. You will turn a stated workload into three kinds of numbers:

  • throughput: events or requests per second that each path must sustain;
  • storage growth: bytes per day, retention footprint, replicas, and operating reserve;
  • bandwidth: byte rates over external, service, and broker-network links.

The goal is not fake precision. It is a transparent model with explicit assumptions, rounded conservatively, that exposes the next engineering questions.

Back-Of-The-Envelope Estimation / Capacity Planning

Watch “Back-Of-The-Envelope Estimation / Capacity Planning” from ByteByteGo for a compact introduction to rough system-design math. Its key point is useful here: an estimate that reveals the correct order of magnitude and limiting resource is more valuable than a deceptively precise guess.

Watch the purpose for the role of informal estimates in architecture decisions. Then watch the rate model, which derives a peak event rate from daily activity and a peak multiplier. Finish with rough math for the scientific-notation and unit-conversion habits that prevent common calculation errors.


Capacity planning is an assumptions contract

A capacity model has two parts:

  1. Inputs that product, security, engineering, and operations can challenge.
  2. Derived values that follow mechanically from those inputs.

Do not begin with an instance type, number of Kafka brokers, or a database SKU. Those are decisions made after you know the workload to be served.

The capacity-planning flowchart below captures the right broad order: workload assumptions drive storage, network, and compute estimates; the most demanding constraint, plus fault tolerance and headroom, informs the eventual broker or node count.

The flowchart shows workload requirements—message rate, message size, retention, and replication factor—feeding separate storage, network, and compute calculations, which then inform a broker-count estimate with headroom.

For the Tenant Behavioral Detection Platform, use the following planning scenario. These are deliberately assumptions for a pilot, not claims about Microsoft Entra ID or an eventual customer base.

AssumptionValueWhy it matters
TenantsEstablishes the multi-tenant population.
Active identities per tenantCreates a total monitored identity population.
Security events per identity per dayIncludes sign-ins and other selected audit events.
Normal peak multiplierModels diurnal concentration and connector polling behavior.
Attack burst times normal peak for minutesModels an abuse or incident-driven traffic surge.
Raw source event size KBUsed for external ingest and evidence archival traffic.
Normalized event size KBUsed for the event log and Detection Worker path.
Durable event-log retention daysSupports replay after processing failure.
Event-log replication factor total copiesProtects against broker loss.
Evidence retention daysSupports investigation and retention needs for the pilot.
Compressed evidence size of rawA planning assumption to validate with real samples.
Alert rate of eventsSupports a PostgreSQL investigation-store estimate.
Alert and investigation state KB per alertIncludes alert metadata and associated state, before database overhead.
Investigation retention daysA separate lifecycle from raw evidence.

Use decimal units throughout this lesson:

This avoids mixing decimal cloud-storage pricing units with binary memory units. The difference is not the important uncertainty at this stage; undocumented event size, index expansion, retry behavior, and retention policy are.


Derive event throughput before estimating machines

First, calculate daily event volume.

The mean event rate is therefore:

A system designed only for this mean rate will fail during ordinary daily concentration. Applying the fourfold normal peak multiplier gives:

Round up for planning:

During the assumed attack burst:

These three rates serve different purposes:

RateValuePrimary use
Daily average events/sDaily storage growth and long-run cost.
Normal peak events/sRoutine service and network capacity.
Attack peak events/sAdmission controls, durable buffering, source protection, and recovery behavior.

A frequent architecture mistake is using the peak rate for all retention calculations. That can overstate normal storage by a large factor. The reverse mistake—using the daily average to size links, queues, or processing capacity—is much more dangerous operationally.

Google SRE - System Design: Non-Abstract Large System Design

Read the Google SRE workbook’s worked log-processing example. It demonstrates the discipline of assigning a conservatively rounded record size, converting a rate into daily growth, and then treating disk and network as separate constraints.

In the “One Machine” discussion, begin at the “Calculations” subsection. Read the record sizing logic, noting why the example rounds records upward. Continue with the daily volume calculation. Then, in the later “Basic LogJoiner design” subsection, read the first bandwidth calculation. Focus on the unit conversion from records per second and bytes per record into a link rate.


Convert event rates into daily storage growth

The normalized event-log payload generated in a normal day is:

The attack is not merely a momentary network concern. If it represents additional events rather than traffic shifted from another time of day, it increases daily data volume.

During the fifteen-minute burst, the additional event rate above the expected normal peak is:

So an attack-day volume is:

Replication and headroom are different multipliers

For a durable event log with replication factor , each retained event occupies three physical copies. Here, replication factor means total copies, not three additional replicas.

With three days of retention and one such attack burst each day:

The number above is stored data, not allocatable disk capacity. Operating a log cluster at nearly full disk is unsafe: partition rebalancing, a failed broker, delayed retention cleanup, and recovery all need free space.

If the operating policy is to keep utilization at or below , calculate provisioned storage by dividing by :

This is more precise than casually “adding thirty percent.” Adding to used space leaves less than free capacity. State which convention you are using.

Evidence archive

The connector archives raw source evidence, so use the larger raw event size.

With a compression factor and ninety-day retention:

If the evidence storage budget should retain free capacity or equivalent cost reserve:

For managed object storage, this is mainly a logical capacity and cost estimate. Do not multiply it by an assumed internal replication factor: the cloud provider’s durability implementation is opaque and normally already reflected in its service model and price. Do account separately for features you enable, such as object versioning, cross-region replication, legal holds, or replication to a customer-controlled archive.

PostgreSQL investigation state

The Investigation Store should not contain every raw event. It retains alert summaries, dispositions, cases, source health, and detection state. With the stated alert rate:

Assume a factor of for indexes, row versioning, and expected database overhead, then a second physical copy for high availability:

This does not include independently retained backups or point-in-time recovery logs. Those need their own retention assumptions.

The resulting storage model is intentionally separated by lifecycle and technology:

Storage responsibilityPlanning footprintWhat the figure means
Durable Event Log TBPhysical replicated broker disk with three-day retention and free-space policy.
Evidence Archive TBLogical compressed evidence capacity and budget reserve for ninety days.
Investigation Store TBPostgreSQL data, estimated overhead, high-availability copy, and free-space policy.

Do not sum these and call the result “database storage.” They have different durability models, hardware constraints, query patterns, and cost structures.

Benchmarking and sizing your Elasticsearch cluster for logs and metrics | Elastic Blog

Read this Elastic sizing guide for a useful general storage-sizing pattern: start with daily raw volume, make retention and replica count explicit, reserve operational disk capacity, and validate assumptions with representative benchmarks. The numerical ratios in the article are Elasticsearch-specific; the method is broadly applicable.

Under “Sizing by data volume,” first scan the questions that identify raw daily volume, hot and warm retention, and replica count. Then read the formula and operating margin. In “Indexing benchmark,” read the benchmark sequence. Notice that the reported throughput belongs to that dataset and test environment, not to Elasticsearch in general.

The current container diagram does not include a dedicated search-index container, so do not silently invent one just because it is familiar. When the platform later adds a security-event search index, its storage model will need an explicit index expansion or compression factor in addition to retention and replica count.


Map the byte rates onto actual network paths

Throughput in events per second is not sufficient for network planning. Convert each path’s event rate using the size of the payload that crosses that particular boundary.

At attack peak, the connector receives raw source events:

It emits normalized events to the durable event log:

With replication factor , each leader copy produces two follower-copy transfers. The aggregate inter-broker replication rate is:

The Detection Worker consumes the normalized stream once:

The aggregate payload through the Kafka cluster’s data paths is therefore:

With a operating margin:

This is aggregate cluster traffic, not a per-broker NIC requirement. The per-broker rate depends on partition count, leader distribution, replica placement, consumer-group assignment, cross-zone topology, and recovery activity. Those are architectural choices that need their own model and benchmark.

The connector has a different profile:

Connector direction at attack peakPayload ratePlanning implication
Receive from Microsoft Entra ID Gb/sSource API, TLS handling, batching, and connector ingress must withstand this rate.
Send raw evidence to archive Gb/sEvidence retention can be as network-intensive as collection.
Send normalized events to event log Gb/sThis is separate from raw archival traffic.

Ignoring protocol overhead, the connector receives Gb/s and sends Gb/s concurrently. A ten-gigabit interface may look sufficient on paper, but it is not a capacity decision by itself. Measure the effect of TLS, serialization, object-store request behavior, retry storms, and uneven assignment of tenants to connector instances.

Also keep user-facing evidence retrieval separate from ingestion bandwidth. The workload brief gives no analyst-search rate, result-size distribution, or concurrent investigation count, so it cannot support a credible estimate for the Web Console and Investigation API query path yet. “Unknown” is better than a fabricated number.


Throughput capacity must reflect the latency objective

The Durable Event Log absorbs a burst only if its storage and network can accept the messages. It does not make detection timely by itself.

Suppose the detection path can process events per second during the attack. It is slower than incoming traffic, so a queue forms:

At a normalized size of one kilobyte:

Once attack traffic returns to the events-per-second normal peak, the detector drains the backlog at a net rate of events per second. It clears the queue in fifteen minutes. The longest queueing delay is roughly:

That may be acceptable for a pilot that promises detection within ten minutes, but it would violate a five-minute end-to-end detection objective. The capacity requirement is therefore an SLO decision, not merely an infrastructure calculation.

If the chosen queue-delay budget permits this recovery behavior, events per second is the minimum functional processing rate. A benchmark target with operational headroom is:

Similarly, the ingestion system should prove that it can accept the full attack peak with headroom:

These are not instance counts. They are measurable acceptance and processing targets. To turn them into deployment capacity, benchmark representative production-like data and determine safe throughput per connector instance, consumer worker, and broker.

A useful benchmark should include:

  • real or sanitized Entra-shaped event distributions, not only tiny synthetic JSON;
  • TLS, authentication, validation, normalization, compression, and serialization;
  • writes to the actual chosen event log, PostgreSQL configuration store, and evidence archive;
  • p95 and p99 processing latency, not only average throughput;
  • CPU, memory, disk latency, disk utilization, NIC utilization, and queue lag;
  • sustained normal peak plus the attack-burst profile;
  • degraded operation, such as a worker restart or broker loss.

The model tells you what to test. The benchmark reveals whether the model’s assumptions remain credible.


A reusable capacity-model template

For future architecture briefs, keep the arithmetic in a version-controlled spreadsheet, notebook, or small script. The core formulas are compact.

For event volume:

For a payload crossing one boundary:

For retained data with a storage transformation factor and total physical copies:

For allocated capacity with a target maximum utilization:

The terms must be named in the model. In particular, distinguish:

  • raw versus normalized record size;
  • logical object storage versus physically replicated broker disk;
  • total copy count versus number of additional replicas;
  • normal peak versus an attack burst;
  • retained event volume versus transient consumer lag;
  • throughput target versus a measured per-node capacity.

A reviewer should be able to change one assumption, such as evidence retention from ninety to one hundred eighty days, and see exactly which result changes and why.


Key takeaways

A capacity estimate begins with an explicit workload model, not a preferred infrastructure product. For the stated behavioral-detection pilot:

  • the normal workload is approximately billion events per day;
  • normal peak ingestion is planned at events per second;
  • the attack scenario reaches events per second;
  • a three-day, replication-factor-three event log needs roughly TB of allocated broker disk under the stated attack and free-space assumptions;
  • ninety days of compressed raw evidence requires roughly TB of logical archive capacity and budget;
  • broker-network payload at attack peak is approximately Gb/s after the planning margin;
  • detection capacity must be derived from the allowed queueing delay, not only from steady-state traffic.

The capacity model does not prove the platform can meet its objectives. It identifies the quantities that must be benchmarked, the assumptions that require product validation, and the trade-offs that deserve an explicit architecture decision.

Next, you will record one consequential choice in an architecture decision record: the decision, context, alternatives, consequences, and evidence needed to make the architecture reviewable over time.

Can't find a good explanation? Sign up and we'll make it for you

Sign up