Pular para o conteúdo

Incidente · Staff

Google Cloud jun/2025: ponteiro nulo replicado globalmente via Spanner

Incidente real. Pontos centrais: deploy progressivo e controle de sobrecarga.

15 min de leitura · Incidente em 2025-06, durou · Fonte: Google · Conteúdo revisado em 22 de outubro de 2026

Resposta curta

Incidente real. Pontos centrais: deploy progressivo e controle de sobrecarga. As APIs do Google e do Google Cloud são servidas por planos de gerenciamento e controle distribuídos por região. Eles garantem que cada requisição seja autorizada e passe pelas checagens de política e cota. O binário central desse sistema de verificação chama-se Service Control.

01 · CONTEXTO

Uma checagem no caminho de toda requisição

As APIs do Google e do Google Cloud são servidas por planos de gerenciamento e controle distribuídos por região. Eles garantem que cada requisição seja autorizada e passe pelas checagens de política e cota. O binário central desse sistema de verificação chama-se Service Control.

O Service Control é um serviço regional e lê informações de cota e política de um datastore regional. Os metadados desse datastore são replicados quase instantaneamente pelo mundo para gerenciar as políticas de cota do Google Cloud e dos clientes.

  1. A requisição de API passa pelo plano de gerenciamento, que a submete às checagens de política e cota do Service Control.

    Diagrama da arquitetura: Verificação de políticas nas APIs do Google
    CLCliente de API
    NWPlanos de gerenciamento e controle de API
    CPService Control (região A)
    DBDatastore regional (região A)
    DBDatastore regional (região B)
  2. O Service Control é regional e lê as informações de cota e política do datastore regional.

    Diagrama da arquitetura: Verificação de políticas nas APIs do Google
    CLCliente de API
    NWPlanos de gerenciamento e controle de API
    CPService Control (região A)
    DBDatastore regional (região A)
    DBDatastore regional (região B)
  3. Os metadados do datastore são replicados quase instantaneamente para as outras regiões.

    Diagrama da arquitetura: Verificação de políticas nas APIs do Google
    CLCliente de API
    NWPlanos de gerenciamento e controle de API
    CPService Control (região A)
    DBDatastore regional (região A)
    DBDatastore regional (região B)recebe a réplica

02 · A MUDANÇA LATENTE

Um caminho de código que ninguém exercitou

Em 29 de maio de 2025, uma nova funcionalidade foi adicionada ao Service Control para checagens adicionais de política de cota.

A mudança passou pelo lançamento região a região, mas o caminho de código que falhou nunca foi exercitado nesse lançamento, porque exigia uma mudança de política para acioná-lo.

Como precaução, a mudança veio com um botão vermelho para desligar aquele caminho de serviço de política. Mas ela não tinha tratamento de erro adequado nem proteção por feature flag, e, sem o tratamento de erro, o ponteiro nulo derrubou o binário.

Segundo o relatório, feature flags servem para habilitar a funcionalidade gradualmente, região por região e projeto por projeto, começando por projetos internos, para pegar problemas. Com proteção por flag, o problema teria sido pego em staging.

O que existiaO que o relatório diz
Lançamento região a regiãoA mudança passou por eleO caminho que falhou nunca foi exercitado nesse lançamento
Feature flagA mudança não estava protegida por flagCom proteção por flag, o problema teria sido pego em staging
Tratamento de erroNão era adequadoO ponteiro nulo derrubou o binário
Botão vermelhoVeio junto com a mudançaServia para desligar aquele caminho de serviço de política

03 · 12 DE JUNHO

Dados em branco, replicados para o mundo

Em 12 de junho de 2025, por volta das 10h45 PDT, uma mudança de política foi inserida nas tabelas Spanner regionais que o Service Control usa para políticas. Pela natureza global da gestão de cota, esses metadados foram replicados globalmente em segundos. Os dados da política continham campos em branco não intencionais.

O Service Control puxou os campos em branco e exercitou o caminho de código com o ponteiro nulo, o que levou os binários a um crash loop. Isso ocorreu globalmente, porque cada implantação regional foi afetada.

O resultado foi um aumento de erros 503 em requisições externas de API de produtos do Google Cloud, do Google Workspace e do Google Security Operations.

  1. Uma mudança de política é inserida nas tabelas Spanner regionais. Os dados da política trazem campos em branco não intencionais.

    Diagrama da arquitetura: Política com campos em branco replicada globalmente
    CPMudança de política
    DBTabelas Spanner (região A)campos em branco
    DBTabelas Spanner (região B)
    CPService Control (região A)
    CPService Control (região B)
    NWRequisições externas de API
  2. Como a gestão de cota é global, os metadados são replicados para as demais regiões em segundos.

    Diagrama da arquitetura: Política com campos em branco replicada globalmente
    CPMudança de política
    DBTabelas Spanner (região A)
    DBTabelas Spanner (região B)política replicada
    CPService Control (região A)
    CPService Control (região B)
    NWRequisições externas de API
  3. Em cada região, o Service Control puxa os campos em branco e aciona o caminho de código com o ponteiro nulo; os binários entram em crash loop.

    Diagrama da arquitetura: Política com campos em branco replicada globalmente
    CPMudança de política
    DBTabelas Spanner (região A)
    DBTabelas Spanner (região B)
    CPService Control (região A)crash loop
    CPService Control (região B)crash loop
    NWRequisições externas de API
  4. As requisições externas de API passam a receber mais erros de servidor.

    Diagrama da arquitetura: Política com campos em branco replicada globalmente
    CPMudança de política
    DBTabelas Spanner (região A)
    DBTabelas Spanner (região B)
    CPService Control (região A)
    CPService Control (região B)
    NWRequisições externas de APImais erros

04 · RESPOSTA E RECUPERAÇÃO

O botão vermelho e o efeito manada

Marco descrito no relatórioPrazo
Equipe de SRE fazendo a triagemEm até 2 minutos
Causa raiz identificada e botão vermelho sendo posto em práticaEm até 10 minutos
Botão vermelho pronto para implantaçãoCerca de 25 minutos após o início
Implantação do botão vermelho concluída e recuperação começando pelas regiões menoresEm até 40 minutos
Resolução completa em us-central-1Até cerca de 2h40

Em algumas das regiões maiores, como us-central-1, o reinício das tarefas do Service Control criou um efeito manada sobre a infraestrutura de que elas dependem, a tabela Spanner, e a sobrecarregou. O Service Control não tinha backoff exponencial randomizado para evitar isso.

A resolução completa em us-central-1 levou até cerca de 2h40, com limitação da criação de tarefas e roteamento de tráfego para bancos multirregionais para reduzir a carga.

  1. O botão vermelho desliga o caminho de serviço de política, e a recuperação começa pelas regiões menores.

    Diagrama da arquitetura: Recuperação e efeito manada no Spanner
    CPBotão vermelhodesliga o caminho
    CPTarefas do Service Control
    DBTabela Spanner regional (us-central)
    CPLimitador de criação de tarefas
    DBBancos multirregionais
  2. Em algumas das regiões maiores, o reinício das tarefas cria um efeito manada sobre a tabela Spanner de que elas dependem, sobrecarregando-a.

    Diagrama da arquitetura: Recuperação e efeito manada no Spanner
    CPBotão vermelho
    CPTarefas do Service Control
    DBTabela Spanner regional (us-central)sobrecarregada
    CPLimitador de criação de tarefas
    DBBancos multirregionais
  3. O Service Control não tinha backoff exponencial randomizado para evitar o efeito manada.

    Diagrama da arquitetura: Recuperação e efeito manada no Spanner
    CPBotão vermelho
    CPTarefas do Service Controlsem backoff randomizado
    DBTabela Spanner regional (us-central)
    CPLimitador de criação de tarefas
    DBBancos multirregionais
  4. O Google limitou a criação de tarefas e roteou tráfego para bancos multirregionais para reduzir a carga.

    Diagrama da arquitetura: Recuperação e efeito manada no Spanner
    CPBotão vermelho
    CPTarefas do Service Control
    DBTabela Spanner regional (us-central)
    CPLimitador de criação de tarefaslimita criação
    DBBancos multirregionaisrecebe tráfego

Logo após a recuperação, todas as mudanças na pilha do Service Control e os envios manuais de política foram congelados até a remediação completa do sistema.

05 · COMUNICAÇÃO E LIÇÕES

Quando o monitoramento cai junto

O primeiro relatório no Cloud Service Health saiu cerca de 1 hora após o início dos crashes, porque a própria infraestrutura do Cloud Service Health estava fora do ar por causa da falha. Para alguns clientes, o monitoramento que rodavam no Google Cloud também falhou, deixando-os sem sinal do incidente.

ÁreaRemediação anunciada
ArquiteturaModularizar o Service Control para que a funcionalidade seja isolada e falhe aberta, de modo que ele ainda atenda requisições se uma checagem falhar
Dados globaisPropagar a replicação de forma incremental, com tempo suficiente para validar e detectar problemas
MudançasExigir que mudanças em binários críticos tenham proteção por feature flag e venham desabilitadas por padrão
Tratamento de erroMelhorar análise estática e testes para tratar erros corretamente e, se preciso, falhar aberto
SobrecargaAuditar os sistemas para garantir backoff exponencial randomizado
ComunicaçãoManter a infraestrutura de monitoramento e comunicação operacional mesmo com o Google Cloud e os produtos primários de monitoramento fora do ar

Perguntas frequentes

O que é Google Cloud jun/2025: ponteiro nulo replicado globalmente via Spanner?

Incidente real. Pontos centrais: deploy progressivo e controle de sobrecarga.

O que o design de Google Cloud jun/2025: ponteiro nulo replicado globalmente via Spanner cobre?

Ele está organizado nestas seções: Uma checagem no caminho de toda requisição, Um caminho de código que ninguém exercitou, Dados em branco, replicados para o mundo, O botão vermelho e o efeito manada e Quando o monitoramento cai junto.

Quanto tempo leva Google Cloud jun/2025: ponteiro nulo replicado globalmente via Spanner e qual é o nível?

Leva cerca de 15 minutos para ler e tem nível Staff.

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.