Soneto Shakespeare ++ Postmortem (incidente #465)

Data: 2015-10-21

Autores: jennifer, martym, agoogler

Estado: Completo, itens de ação em andamento

Resumo: Pesquisa de Shakespeare por 66 minutos durante um período de muito grande interesse em Shakespeare devido à descoberta de um novo soneto.

Impacto: Estimativa de 1,21 bilhão de consultas perdidas, sem impacto na receita.

Causas raiz: Falha em cascata devido à combinação de carga excepcionalmente elevada e uma fuga de recursos quando as buscas falharam devido a termos que não estavam no Shakespeare corpus. O soneto recentemente descoberto utilizou uma palavra que nunca tinha aparecido antes numa das obras de Shakespeare, que por acaso era o termo procurado pelos usuários. Em circunstâncias normais, a taxa de falhas de tarefas devido a fugas de recursos é suficientemente baixa para passar despercebida. 

Gatilho: Bug latente acionado por aumento repentino no tráfego.

Resolução: Tráfego direcionado para o cluster sacrificial e capacidade 10x adicionada para mitigar a falha em cascata. Índice atualizado implantado, resolvendo a interação com o bug latente. Manutenção de capacidade extra até ao aumento do interesse público em novas passagens de soneto. Vazamento de recursos identificado e correção implantada.

Detecção: Borgmon detectou um nível elevado de HTTP 500s e paginou de plantão.

Itens de Ação:

Item de Ação

Tipo

Dono

Bug

Atualizar playbook com instruções para responder a falhas em cascata

mitigar

jennifer

n/a CONCLUÍDO

Usar condensador de fluxo para equilibrar a carga entre os clusters

prevenir

martym

Bug 5554823 TODO

Programar teste de falha em cascata durante o próximo DiRT

processo

docbrown

n/a TODO

Investigar continuamente o índice de funcionamento MR/fusão

prevenir

jennifer

Bug 5554824 TODO

Fugas de descritor de arquivo no subsistema de classificação de busca

prevenir

agoogDONEler

Bug 5554825 

Adicionar recursos de redução de carga à pesquisa de Shakespeare




prevenir

agoogler

Bug 5554826 TODO

Construir testes de regressão para assegurar que os servidores respondam de forma sensata aos queries of death

prevenir

clarac

Bug 5554827 TODO

Implementar subsistema de classificação de pesquisa atualizado para produzir

prevenir

jennifer

n/a CONCLUÍDO

 

Congelar a produção até 2015-11-20 devido ao esgotamento do orçamento por erro ou buscar exceção devido a circunstâncias grotescas, inacreditáveis, bizarras e sem precedentes

outros

docbrown

n/a TODO

Lições aprendidas

O que ocorreu bem

  • O monitoramento nos alertou rapidamente para a elevada taxa (atingindo ~100%) de HTTP 500s
  • Rápida distribuição de Shakespeare corpus atualizado para todos os clusters

O que ocorreu mal

  • Estamos sem prática na resposta a falhas em cascata
  • Excedemos o nosso orçamento de erros de disponibilidade (em várias ordens de grandeza) devido ao aumento excepcional de tráfego que, essencialmente, resultou em falhas

Onde tivemos sorte

  • A lista de e-mail dos aficionados de Shakespeare tinha uma cópia do novo soneto disponível
  • Os logs do servidor tinham rastreamentos de pilha apontando para a exaustão do descritor de arquivo como causa da falha
  • Query-of-death foi resolvido ao enviar um novo índice contendo um termo de pesquisa popular

Timeline

2015-10-21 (todos os horários UTC)

  • 14:51 Notícias relatam que um novo soneto shakespeariano foi descoberto no porta-luvas de um Deloriano

  • 14:53 O tráfego para a pesquisa de Shakespeare aumenta 88 vezes depois que a postagem em /r/shakespeare aponta para o mecanismo de pesquisa de Shakespeare como local para encontrar um novo soneto (exceto que ainda não temos o soneto)

  • 14:54 INÍCIO DA INTERRUPÇÃO – Os backends de pesquisa começam a derreter sob carga 

  • 14:55 docbrown recebe pager storm, ManyHttp500s de todos os clusters 

  • 14:57 Todo o tráfego para a busca de Shakespeare está falhando: ver https://monitor

  • 14:58 docbrown começa a investigar, encontra taxa de falhas backend muito elevada

  • 15:01 COMEÇA O INCIDENTE docbrown declara incidente #465 devido a falha em cascata, coordenação em #shakespeare, nomeia jennifer comandante do incidente

  • 15:02 alguém por coincidência envia um e-mail para shakespeare-discuss@ re descoberta de soneto, que por acaso está no topo da caixa de entrada do martym

  • 15:03 jennifer notifica shakespeare-incidents@ a lista do incidente 

  • 15:04 martym rastreia o texto do novo soneto e procura documentação sobre a atualização do corpus

  • 15:06 docbrown descobre que os sintomas de falha são idênticos em todas as tarefas em todos os clusters, investigando a causa com base nos logs de aplicação

  • 15:07 martym encontra documentação, inicia trabalho de preparação para atualização do corpus

  • 15:10 martym adiciona soneto às obras conhecidas de Shakespeare, começa o trabalho de indexação

  • 15:12 docbrown contata clarac e agoogler (da equipe de desenvolvimento de Shakespeare) para ajudar a examinar a base de código em busca de possíveis causas

  • 15:18 clarac encontra uma arma do crime nos logs apontando para a exaustão do descritor de arquivo, confirma contra o código que existe vazamento se o termo que não está no corpus for pesquisado

  • 15:20 O trabalho MapReduce do índice de martym é concluído

  • 15:21 jennifer e docbrown decidem aumentar a contagem de instâncias o suficiente para baixar a carga em instâncias que são capazes de fazer um trabalho apreciável antes de morrerem e serem reiniciadas

  • 15:23 docbrown a carga equilibra todo o tráfego para o cluster USA-2, permitindo o aumento da contagem de instâncias em outros clusters sem falha imediata dos servidores

  • 15:25 martym começa a replicar o novo índice a todos os clusters

  • 15:28 docbrown começa 2x aumento da contagem de instâncias

  • 15:32 jennifer muda o equilíbrio de carga para aumentar o tráfego para clusters não sacrificiais

  • 15:33 as tarefas em clusters não sacrificiais começam a falhar, os mesmos sintomas que antes

  • 15:34 encontrado erro de ordem de grandeza nos cálculos do quadro branco, por exemplo aumento da contagem

  • 15:36 jennifer reverte o equilíbrio de carga para resacrificar o cluster USA-2 em preparação para um aumento adicional global de 5x na contagem de instâncias (para um total de 10x na capacidade inicial)

  • 15:36 INTERRUPÇÃO MITIGADA, índice atualizado e replicado para todos os clusters

  • 15:39 docbrown inicia a segunda onda de aumento da contagem de instâncias para 10x a capacidade inicial

  • 15:41 jennifer restabelece o equilíbrio de carga em todos os clusters para 1% do tráfego

  • 15:43 taxas HTTP 500 de clusters não sacrificiais a taxas nominais, falhas de tarefas intermitentes a níveis baixos

  • 15:45 jennifer equilibra 10% do tráfego através de clusters não sacrificiais

  • 15:47 as taxas dos clusters não superficiais HTTP 500 permanecem dentro do SLO, não se observam falhas nas tarefas

  • 15:50 30% do tráfego equilibrado através de clusters não sacrificiais

  • 15:55 50% do tráfego equilibrado através de clusters não sacrificiais

  • 16:00 TERMINA A INTERRUPÇÃO, todo o tráfego balanceado em todos os clusters

  • 16:30 TERMINA O INCIDENTE, atingiu o critério de saída de 30 minutos de desempenho nominal

Informação de apoio:

  • Painel de controle,

https://monitor/shakespeare?end_time=20151021T160000&duração=7200



Fonte: Google SRE Book 

Rolar para cima