BK cloud / sistemas Artigos
PT-BR
English ENDeutsch DEEspañol ES中文 ZHFrançais FRPortuguês (Brasil) PT-BR日本語 JA
Vamos conversar ↗
← Voltar aos artigos

A bomba-relógio de seis meses: quando acabaram os créditos de burst do EFS

Por quase seis meses, tudo parecia funcionar perfeitamente. Esse longo período de tranquilidade era justamente o perigo.

Uma aplicação web usava o Amazon Elastic File System (EFS) como armazenamento compartilhado. Várias instâncias acessavam os mesmos arquivos, o deploy era simples e não havia um motivo evidente para questionar a arquitetura.

Então, aparentemente sem aviso, o site ficou extremamente lento e acabou parecendo parar de funcionar. A carga dos servidores subiu, as requisições expiravam e os processos da aplicação se acumulavam.

À primeira vista, parecia um problema de processamento. Não era. A causa real era o esgotamento dos créditos de burst do EFS.

Por que parecia um problema de CPU

Um dos sintomas enganosos era o load average alto no Linux. Um load average elevado não significa necessariamente CPUs no limite. Ele também inclui processos em espera ininterruptível, algo comum quando ficam bloqueados aguardando I/O de armazenamento.

Os workers esperavam as operações do EFS terminarem. Novas requisições continuavam chegando, mais workers ficavam bloqueados e a fila crescia:

  1. O throughput do EFS ficou limitado.
  2. As operações de arquivo demoravam mais.
  3. Os workers da aplicação continuavam ocupados esperando I/O.
  4. As requisições recebidas se acumulavam.
  5. A carga do sistema aumentava.
  6. O site acabou praticamente indisponível.

Adicionar CPU não teria resolvido a causa do problema.

Por que a falha levou seis meses para aparecer

O sistema de arquivos EFS estava configurado no modo Bursting Throughput . Nesse modo, o throughput básico sustentável depende da quantidade de dados na classe EFS Standard. Quando a carga fica abaixo dessa taxa, o sistema acumula créditos de burst. Quando passa dela, consome esses créditos.

Em sistemas de arquivos relativamente pequenos, isso pode criar uma situação enganosa:

  • O volume armazenado permite uma taxa básica sustentável baixa.
  • O saldo existente libera temporariamente um throughput muito maior.
  • A aplicação funciona normalmente, mesmo com uma carga de longo prazo acima da capacidade sustentável.
  • Enquanto há créditos, o desequilíbrio fica escondido.
  • Quando o saldo chega a zero, o desempenho cai drasticamente.

Neste caso, os créditos acumulados duraram cerca de seis meses. A arquitetura já estava subdimensionada em throughput, mas o saldo escondia o problema. Era um déficit de capacidade que avançava devagar — uma bomba-relógio de seis meses.

Desempenho temporário de burst nunca deve ser confundido com throughput sustentável.

Escolher o modo de throughput adequado

Bursting Throughput

Bursting Throughput pode fazer sentido quando a necessidade de throughput cresce com o volume armazenado e há períodos tranquilos depois dos picos. Exige monitoramento cuidadoso. Um saldo que cai continuamente mostra que a carga não é sustentável nesse modo.

Elastic Throughput

Elastic Throughput costuma atender melhor a cargas imprevisíveis ou muito variáveis. O throughput acompanha a demanda, sem depender de um saldo finito de créditos. Isso aumenta a resiliência operacional, mas o custo por uso precisa ser avaliado quando o throughput é alto de forma constante.

Provisioned Throughput

Provisioned Throughput é útil quando a necessidade é conhecida e maior do que o volume armazenado permitiria. Ele oferece capacidade previsível, independente do tamanho do sistema de arquivos, mas o valor configurado precisa ser revisto conforme a demanda muda.

Também é importante não confundir o modo de throughput do EFS com seu modo de desempenho. Os modos de throughput definem como a capacidade é fornecida; os modos de desempenho tratam de características como latência e paralelismo.

O monitoramento que deveria existir

A métrica mais importante do CloudWatch para um EFS em Bursting Throughput é BurstCreditBalance. Um conjunto básico de monitoramento também deve incluir:

  • BurstCreditBalance para detectar consumo contínuo dos créditos
  • PercentIOLimit para identificar aproximação do limite de I/O
  • PermittedThroughput para entender o throughput disponível naquele momento
  • MeteredIOBytes e nas TotalIOBytes para observar o consumo de I/O
  • latência da aplicação, duração das requisições, timeouts e taxas de erro
  • processos esperando I/O, correlacionados com load average e uso real de CPU

Monitorar apenas CPU, memória e códigos HTTP não basta. O armazenamento compartilhado é uma dependência crítica da aplicação e precisa ser acompanhado como parte do serviço, não apenas como componente de infraestrutura.

O alarme deve disparar muito antes de o saldo chegar a zero. Mais importante ainda é observar a tendência. Um saldo que cai por semanas já revela um déficit estrutural de throughput, mesmo que o número absoluto pareça confortável.

O que eu faria diferente

  1. Estimar o throughput sustentável ainda no projeto.
  2. Escolher o modo de throughput a partir do padrão real de acesso.
  3. Tratar créditos de burst como folga temporária, não como capacidade normal.
  4. Criar alarmes no CloudWatch para saldo de créditos e limites de I/O.
  5. Monitorar a velocidade de consumo dos créditos.
  6. Incluir throughput e latência do EFS nos testes de carga.
  7. Correlacionar load average do Linux, uso de CPU e espera por I/O.
  8. Reavaliar se arquivos acessados com frequência realmente precisam de armazenamento de rede compartilhado.
  9. Testar a aplicação com limitação de throughput e latência alta no armazenamento.
  10. Documentar o procedimento operacional para trocar o modo de throughput.

O aprendizado que ficou

O EFS pode ser uma excelente solução de armazenamento compartilhado, mas seu comportamento depende muito do modo de throughput e do perfil da carga.

O perigo deste incidente não foi só a perda de desempenho. Foi o sistema funcionar bem por seis meses antes dela. Os créditos atrasaram o sintoma visível por tempo suficiente para gerar confiança em uma arquitetura que não se sustentava.

A melhor proteção não é um saldo maior. É escolher o modo adequado, entender a capacidade sustentável e monitorar as métricas que mostram o desequilíbrio antes de o usuário perceber.

Referências