Erlang OTP: Distributed & Fault-Tolerant Systems Programming · Aula

Contrapressão e Padrões de Regulação de Carga

Mantenha os sistemas estáveis sob sobrecarga usando contrapressão, limitação de taxa e padrões de eliminação de carga baseados em primitivas OTP.

Aula 4 de 413 etapas

Contrapressão e Padrões de Regulação de Carga é uma aula grátis de Erlang OTP: Distributed & Fault-Tolerant Systems Programming no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Erlang OTP: Distributed & Fault-Tolerant Systems Programming, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Erlang OTP: Distributed & Fault-Tolerant Systems Programming inclui 4 aulas no total.

Partes desta aula ainda não foram traduzidas e aparecem em inglês.

What Is Backpressure?

When work arrives faster than a system can process it, queues grow and latency explodes. Backpressure is the practice of signalling producers to slow down so the system stays stable instead of melting down.

The Unbounded Queue Problem

An async gen_server:cast never blocks the caller, so its mailbox can grow without limit under load — the system runs out of memory before it ever rejects work.

Synchronous Calls as Backpressure

Using gen_server:call instead of cast makes the caller wait until the server is ready, naturally throttling producers to the server speed.

Reply = gen_server:call(worker, {process, Job}, 5000).

Bounded Queues

Maintain an explicit counter of in-flight work and reject or block new requests once a limit is reached, rather than letting the mailbox grow.

handle_call({job, J}, _From, #{n := N} = S) when N < 100 ->
    {reply, ok, S#{n := N + 1}};
handle_call({job, _}, _From, S) ->
    {reply, {error, overloaded}, S}.

Load Shedding

Under extreme load, the best move can be to shed low-priority work fast — returning an error immediately — to protect the system for high-priority requests.

Rate Limiting with Tokens

A token-bucket limiter grants a fixed number of permits per interval; requests beyond that wait or fail. This caps throughput predictably.

case take_token(Bucket) of
    ok -> do_work();
    empty -> {error, rate_limited}
end.

Measuring Pressure

The mailbox length of a bottleneck process is a live pressure gauge. Monitor it and trigger shedding before it grows dangerous.

process_info(Worker, message_queue_len).

Pooling for Throughput

A pool of worker processes (e.g. via poolboy) bounds concurrency: requests queue for a free worker, giving natural backpressure with controlled parallelism.

Circuit Breakers

When a downstream dependency is failing, a circuit breaker opens to stop sending requests for a cooldown period, preventing pileups and giving the dependency time to recover.

Timeouts as Protection

Always give gen_server:call a finite timeout. An unbounded wait lets a stuck server block callers indefinitely; a timeout converts a hang into a fast, recoverable error.

case catch gen_server:call(srv, req, 2000) of
    {ok, R} -> R;
    _ -> {error, busy}
end.

Choosing a Strategy

Combine patterns: synchronous calls for natural throttling, bounded queues to cap memory, rate limiting for fairness, and load shedding plus circuit breakers as last-resort protection.

Quick Check

Test your load regulation knowledge.

Recap

You learned to keep systems stable under overload:

  • Backpressure signals producers to slow down
  • Synchronous call throttles naturally; bounded queues cap memory
  • Rate limiting enforces fairness; load shedding protects priority work
  • Worker pools bound concurrency; circuit breakers stop downstream pileups
  • Monitor mailbox length as a live pressure gauge
Grátis para começar

Aprenda Erlang com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
12
Aulas
48

Perguntas Frequentes

A aula “Contrapressão e Padrões de Regulação de Carga” é grátis?

Sim — o texto completo de “Contrapressão e Padrões de Regulação de Carga” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Erlang OTP: Distributed & Fault-Tolerant Systems Programming, atualize para CoddyKit PRO. O curso de Erlang OTP: Distributed & Fault-Tolerant Systems Programming inclui 4 aulas no total.

O que vou aprender em “Contrapressão e Padrões de Regulação de Carga”?

Mantenha os sistemas estáveis sob sobrecarga usando contrapressão, limitação de taxa e padrões de eliminação de carga baseados em primitivas OTP. Você pratica Erlang OTP: Distributed & Fault-Tolerant Systems Programming com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Erlang OTP: Distributed & Fault-Tolerant Systems Programming?

Nenhuma experiência prévia é necessária. Erlang OTP: Distributed & Fault-Tolerant Systems Programming no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Contrapressão e Padrões de Regulação de Carga”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Erlang OTP: Distributed & Fault-Tolerant Systems Programming?

Sim. Cada aula de Erlang OTP: Distributed & Fault-Tolerant Systems Programming inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Projetando para alta disponibilidade
  2. Padrões de consenso distribuído
  3. Estudos de caso de Erlang OTP
  4. Contrapressão e Padrões de Regulação de Carga
← Voltar para Erlang OTP: Distributed & Fault-Tolerant Systems Programming