Pular para o conteúdo

Incidente · Pleno

AWS S3 2017: um comando digitado errado

Incidente real. Pontos centrais: deploy progressivo e arquitetura em células.

12 min de leitura · Incidente em 2017, durou · Fonte: AWS · Conteúdo revisado em 23 de outubro de 2026

Resposta curta

Incidente real. Pontos centrais: deploy progressivo e arquitetura em células. Na manhã de 28 de fevereiro de 2017, o Amazon S3 da região US-EAST-1, na Virgínia do Norte, ficou sem atender requisições por horas. O resumo oficial da AWS é a fonte deste caso.

01 · CONTEXTO

Um armazenamento que o resto da AWS usa

Na manhã de 28 de fevereiro de 2017, o Amazon S3 da região US-EAST-1, na Virgínia do Norte, ficou sem atender requisições por horas. O resumo oficial da AWS é a fonte deste caso. A equipe investigava por que o sistema de cobrança do S3 andava mais devagar do que o esperado, e foi nesse trabalho de rotina que o incidente começou.

Dois subsistemas importam aqui. O índice guarda os metadados e a localização de todos os objetos da região, e é necessário para atender leituras, listagens, gravações e remoções. O subsistema de alocação decide onde guardar objetos novos, é usado nas gravações e só funciona direito com o índice funcionando.

  1. Clientes enviam leituras, listagens, gravações e remoções à API de objetos.

    Diagrama da arquitetura: Camadas do armazenamento de objetos regional
    CLClientes
    NWAPI de objetos
    CPSubsistema de índice
    CPSubsistema de alocação
    DBArmazenamento dos objetos
  2. Leituras, listagens e remoções consultam o índice, que sabe onde cada objeto está.

    Diagrama da arquitetura: Camadas do armazenamento de objetos regional
    CLClientes
    NWAPI de objetos
    CPSubsistema de índice
    CPSubsistema de alocação
    DBArmazenamento dos objetos
  3. Uma gravação passa pela alocação, que escolhe onde guardar o objeto novo.

    Diagrama da arquitetura: Camadas do armazenamento de objetos regional
    CLClientes
    NWAPI de objetos
    CPSubsistema de índice
    CPSubsistema de alocação
    DBArmazenamento dos objetos
  4. A alocação precisa do índice em funcionamento. Se o índice cai, as gravações caem junto.

    Diagrama da arquitetura: Camadas do armazenamento de objetos regional
    CLClientes
    NWAPI de objetos
    CPSubsistema de índice
    CPSubsistema de alocaçãodepende do índice
    DBArmazenamento dos objetos

02 · O COMANDO

Uma entrada errada num procedimento conhecido

Às 9:37 da manhã, horário do Pacífico, um membro autorizado da equipe seguiu um procedimento estabelecido e executou um comando para retirar poucos servidores de um subsistema usado pela cobrança. Uma das entradas do comando foi digitada errada, e um conjunto maior de servidores do que o pretendido foi removido.

  1. O comando deveria retirar uma pequena quantidade de servidores do subsistema usado pela cobrança.

    Diagrama da arquitetura: Alvo pretendido e alcance real do comando
    CPFerramenta de remoção de capacidade
    CPSubsistema da cobrançaalvo pretendido
    CPSubsistema de índice
    CPSubsistema de alocação
  2. Com a entrada errada, o comando também retirou servidores que sustentavam o índice e a alocação.

    Diagrama da arquitetura: Alvo pretendido e alcance real do comando
    CPFerramenta de remoção de capacidade
    CPSubsistema da cobrança
    CPSubsistema de índiceservidores removidos
    CPSubsistema de alocaçãoservidores removidos
  3. Sem uma parte significativa da capacidade, cada um dos dois subsistemas precisou de reinício completo, e o serviço não conseguiu atender requisições enquanto isso.

    Diagrama da arquitetura: Alvo pretendido e alcance real do comando
    CPFerramenta de remoção de capacidade
    CPSubsistema da cobrança
    CPSubsistema de índicereinício completo
    CPSubsistema de alocaçãoreinício completo
  4. Como a alocação depende do índice, a recuperação teve uma ordem: primeiro o índice, depois a alocação.

    Diagrama da arquitetura: Alvo pretendido e alcance real do comando
    CPFerramenta de remoção de capacidade
    CPSubsistema da cobrança
    CPSubsistema de índicevolta primeiro
    CPSubsistema de alocação

O sistema era feito justamente para isso: os subsistemas do S3 foram projetados para suportar a remoção ou a falha de capacidade significativa com pouco ou nenhum impacto aos clientes. O que falhou não foi a ideia de tirar capacidade, e sim o limite do quanto se podia tirar de uma vez.

03 · CASCATA

Quem dependia do armazenamento caiu junto

Outros serviços da AWS na região que dependem do S3 para armazenamento também foram afetados enquanto as APIs estavam fora: o console do S3, o lançamento de novas instâncias do EC2, volumes do EBS quando os dados vinham de um snapshot guardado no S3, e o AWS Lambda.

  1. As APIs do armazenamento de objetos ficaram indisponíveis.

    Diagrama da arquitetura: Quem dependia do armazenamento
    DBArmazenamento de objetos regionalAPIs fora
    CPConsole do armazenamento
    CPLançamento de instâncias
    CPVolumes de bloco
    CPFunções sem servidor
    CPConsole do painel de status
    NWPainel de status
  2. O console, o lançamento de instâncias, os volumes restaurados de snapshots e as funções sem servidor dependiam dele e foram afetados.

    Diagrama da arquitetura: Quem dependia do armazenamento
    DBArmazenamento de objetos regional
    CPConsole do armazenamentoafetado
    CPLançamento de instânciasafetado
    CPVolumes de blocoafetado
    CPFunções sem servidorafetado
    CPConsole do painel de status
    NWPainel de status
  3. O console de administração do painel de status também dependia do armazenamento. Por isso o estado de cada serviço não podia ser atualizado no painel.

    Diagrama da arquitetura: Quem dependia do armazenamento
    DBArmazenamento de objetos regional
    CPConsole do armazenamento
    CPLançamento de instâncias
    CPVolumes de bloco
    CPFunções sem servidor
    CPConsole do painel de statusdependência oculta
    NWPainel de status

Até as 11:37 da manhã, a AWS não conseguiu atualizar o status individual dos serviços no painel de status, por causa de uma dependência do console de administração do painel no S3. Nesse intervalo, o aviso aos clientes foi feito pelo Twitter da AWS e por um texto de banner. Depois do evento, o console de administração do painel passou a rodar em várias regiões.

04 · RECUPERAÇÃO

Um reinício que não era feito havia anos

Remover e repor capacidade é uma prática central de operação do S3 desde o lançamento. Já o reinício completo do índice e da alocação, nas regiões maiores, não acontecia havia muitos anos. Com o crescimento enorme do serviço, reiniciar e rodar as verificações de segurança que validam a integridade dos metadados levou mais tempo do que a AWS esperava.

O que aconteceuHorário (Pacífico)
Comando executadoEntrada incorreta remove mais servidores do que o previsto9:37 da manhã
Índice começa a atenderCapacidade suficiente para leituras, listagens e remoções12:26 da tarde
Índice recuperadoLeituras, listagens e remoções normais1:18 da tarde
Alocação recuperadaGravações voltam e o serviço opera normalmente1:54 da tarde

Mesmo com o armazenamento de volta, alguns serviços que dependiam dele tinham acumulado uma fila de trabalho durante a interrupção e precisaram de tempo extra para se recuperar por completo.

05 · CORREÇÕES E LIÇÕES

Salvaguardas na ferramenta e células menores

A própria AWS apontou que a ferramenta permitia remover capacidade demais e rápido demais. Ela foi alterada para remover capacidade mais devagar e para barrar a remoção quando isso levaria qualquer subsistema abaixo do nível mínimo de capacidade exigido. As demais ferramentas operacionais também passaram por auditoria em busca de salvaguardas semelhantes.

Uma das técnicas mais importantes da AWS para recuperar serviços é dividi-los em partições pequenas, chamadas de células, o que permite avaliar e testar a recuperação até do maior serviço e reduz o raio de explosão. Mesmo assim, o índice demorou mais do que o esperado para voltar. O particionamento adicional dele, que já estava planejado, foi repriorizado para começar imediatamente.

  1. Em vez de um bloco único, o serviço é fatiado em células independentes, e um roteador leva cada requisição à célula responsável.

    Diagrama da arquitetura: Ilustração: serviço dividido em células
    NWRoteador de partições
    CPCélula A
    CPCélula B
    CPCélula C
  2. Se uma célula precisa de reinício completo, as outras seguem atendendo. O estrago fica limitado a uma fração do todo.

    Diagrama da arquitetura: Ilustração: serviço dividido em células
    NWRoteador de partições
    CPCélula Areinício
    CPCélula B
    CPCélula C
  3. Cada célula é pequena o bastante para ter o reinício e a validação ensaiados e cronometrados com frequência.

    Diagrama da arquitetura: Ilustração: serviço dividido em células
    NWRoteador de partições
    CPCélula Arecuperação ensaiada
    CPCélula B
    CPCélula C
ProblemaMudança
Ferramenta de remoçãoRemovia capacidade demais e rápido demaisPassou a remover mais devagar e a barrar remoções abaixo do mínimo
Outras ferramentasPodiam ter o mesmo riscoForam auditadas em busca de salvaguardas semelhantes
ÍndiceRecuperação mais lenta do que o esperadoParticionamento adicional repriorizado
Painel de statusConsole de administração dependia do S3Passou a rodar em várias regiões

Perguntas frequentes

O que é AWS S3 2017: um comando digitado errado?

Incidente real. Pontos centrais: deploy progressivo e arquitetura em células.

O que o design de AWS S3 2017: um comando digitado errado cobre?

Ele está organizado nestas seções: Um armazenamento que o resto da AWS usa, Uma entrada errada num procedimento conhecido, Quem dependia do armazenamento caiu junto, Um reinício que não era feito havia anos e Salvaguardas na ferramenta e células menores.

Quanto tempo leva AWS S3 2017: um comando digitado errado e qual é o nível?

Leva cerca de 12 minutos para ler e tem nível Pleno.

Agora projete você mesmo

Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.