# Backpressure

> A mechanism that lets a consumer signal its capacity, so a producer slows down when the consumer falls behind.

Record: `architecture:backpressure`
Kind: mechanism
Layer: [Correctness Core](https://banes-lab.com/records/layer/correctness-core.md)
Severity: contextual
Scope: stream, queue, service
Canonical: https://banes-lab.com/ontology#architecture-backpressure

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Bulkhead Pattern](https://banes-lab.com/records/architecture/bulkhead-pattern.md) and before [Assessment](https://banes-lab.com/records/architecture/assessment.md).

## Repair

- Refactored by: Add Rate Limit, Bounded Queue, Demand Signal
- Detected by: queue growth without throttling
- Violated by: unbounded queues, uncontrolled producers
- Measured by: queue depth, rejection/throttle rate
- Enforced by: load tests, runtime policies

## Requires

- [Capacity Signaling](https://banes-lab.com/records/lexicon/capacity-signaling.md)

## Reinforces

- [Resilience](https://banes-lab.com/records/architecture/resilience.md)
- [Stability](https://banes-lab.com/records/lexicon/stability.md)

## Enables

- [Overload Protection](https://banes-lab.com/records/lexicon/overload-protection.md)

## Conflicts with

- [Missing Backpressure](https://banes-lab.com/records/architecture/missing-backpressure.md)

## In tension with

- [Throughput](https://banes-lab.com/records/architecture/throughput.md)

## Tensions

- [Backpressure / Throughput](https://banes-lab.com/records/tension/backpressure-throughput.md)

## Severity

- [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)

## Category

- [Error Handling / Resilience](https://banes-lab.com/records/architecture-category/error-handling-resilience.md)

## Reinforced by

- [Message Queue](https://banes-lab.com/records/architecture/message-queue.md)
- [Circuit Breaker Pattern](https://banes-lab.com/records/architecture/circuit-breaker-pattern.md)
- [Rate Limiting](https://banes-lab.com/records/architecture/rate-limiting.md)

## Required by

- [Streaming Architecture](https://banes-lab.com/records/architecture/streaming-architecture.md)

## Linked from

- [Posting and waiting are one operation](https://banes-lab.com/disciplined-methodology/collaborate/posting-and-waiting-are-one-operation.md)
- [The canon is grouped twice](https://banes-lab.com/software-architecture/principles/the-canon-is-grouped-twice.md)
- [Separate, trade, or mitigate](https://banes-lab.com/software-architecture/principles/separate-trade-or-mitigate.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Event / Messaging / Asynchronous Architecture](https://banes-lab.com/ontology/principles/architecture-category-event-messaging-asynchronous-architecture.md)
- [Error Handling / Resilience](https://banes-lab.com/ontology/principles/architecture-category-error-handling-resilience.md)
- [Scalability / Performance / Optimization](https://banes-lab.com/ontology/principles/architecture-category-scalability-performance-optimization.md)
- [Streaming / Pipeline / Dataflow Processing](https://banes-lab.com/ontology/principles/architecture-category-streaming-pipeline-dataflow-processing.md)
- [Error Handling / Resilience](https://banes-lab.com/ontology/lexicon/lexicon-category-error-handling-resilience.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
