Como o Incidente de Tempo de Inatividade da OpenAI Nos Ensina a Construir Sistemas Mais Resilientes

Em 11 de dezembro de 2024, os serviços da OpenAI tiveram uma significativa queda devido a um problema originado de uma nova implantação de serviço de telemetria. Este incidente impactou os serviços API, ChatGPT e Sora, resultando em interrupções que duraram várias horas. Como uma empresa que visa fornecer soluções de IA precisas e eficientes, a OpenAI compartilhou um detalhado relatório pós-mortem para discutir de forma transparente o que deu errado e como eles planejam evitar ocorrências semelhantes no futuro.

Neste artigo, descreverei os aspectos técnicos do incidente, detalharei as causas raiz e explorarei lições-chave que desenvolvedores e organizações que gerenciam sistemas distribuídos podem aprender com este evento.

Cronologia do Incidente

Aqui está um resumo de como os eventos se desenrolaram em 11 de dezembro de 2024:

Time (PST) Event
15h16
Impacto leve no cliente começou; degradação do serviço observada
15h27 Engenheiros começaram a redirecionar o tráfego dos clusters afetados
15h40 Impacto máximo no cliente registrado; grandes interrupções em todos os serviços
16h36 Primeiro cluster Kubernetes começou a se recuperar
17h36 Recuperação substancial para os serviços de API começaram
17h45 Recuperação substancial para o ChatGPT observada
19h38 Todos os serviços totalmente recuperados em todos os clusters

Figura 1: Linha do Tempo do Incidente OpenAI – Degradação do Serviço até a Recuperação Total.

Análise da Causa Raiz

A raiz do incidente estava em um novo serviço de telemetria implantado às 15h12 PST para melhorar a observabilidade dos planos de controle do Kubernetes. Este serviço, inadvertidamente, sobrecarregou os servidores de API do Kubernetes em vários clusters, levando a falhas em cascata.

Desmembrando-o

Implantação do Serviço de Telemetria

O serviço de telemetria foi projetado para coletar métricas detalhadas do plano de controle do Kubernetes, mas sua configuração acionou involuntariamente operações de API do Kubernetes que demandavam muitos recursos em milhares de nós simultaneamente.

Plano de Controle Sobrecarregado

O plano de controle do Kubernetes, responsável pela administração do cluster, ficou sobrecarregado. Enquanto o plano de dados (que lida com as solicitações dos usuários) permaneceu parcialmente funcional, ele dependia do plano de controle para a resolução de DNS. À medida que os registros de DNS em cache expiraram, os serviços que dependiam da resolução de DNS em tempo real começaram a falhar.

Testes Insuficientes

A implantação foi testada em um ambiente de pré-produção, mas os clusters de pré-produção não refletiram a escala dos clusters de produção. Como resultado, o problema de carga do servidor de API não foi detectado durante os testes.

Como a Questão Foi Mitigada

Quando o incidente começou, engenheiros da OpenAI rapidamente identificaram a causa raiz, mas enfrentaram desafios para implementar uma correção porque o plano de controle do Kubernetes sobrecarregado impediu o acesso aos servidores API. Uma abordagem multifacetada foi adotada:

  • Redução do Tamanho do Cluster: A redução do número de nós em cada cluster diminuiu a carga do servidor API.
  • Bloqueio do Acesso à Rede para APIs Administrativas do Kubernetes: Impediu solicitações adicionais de API, permitindo que os servidores se recuperassem.
  • Aumento dos Servidores API do Kubernetes: A provisão de recursos adicionais ajudou a limpar solicitações pendentes.

Essas medidas permitiram que os engenheiros recuperassem o acesso aos planos de controle e removesse o serviço de telemetria problemático, restaurando a funcionalidade do serviço.

Lições Aprendidas

Este incidente destaca a criticidade de testes robustos, monitoramento e mecanismos de segurança em sistemas distribuídos. Aqui está o que a OpenAI aprendeu (e implementou) com a interrupção:

1. Implementações Fases Robustas

Todas as mudanças de infraestrutura agora seguirão implementações em fases com monitoramento contínuo. Isso garante que os problemas sejam detectados precocemente e mitigados antes de serem escalados para toda a frota.

2. Testes de Injeção de Falhas

Ao simular falhas (por exemplo, desabilitando o plano de controle ou implementando mudanças ruins), a OpenAI verificará se seus sistemas podem se recuperar automaticamente e detectar problemas antes de impactar os clientes.

3. Acesso de Emergência ao Plano de Controle

Um mecanismo de “quebra de vidro” garantirá que os engenheiros possam acessar os servidores da API do Kubernetes mesmo sob carga pesada.

4. Desacoplamento dos Planos de Controle e Dados

Para reduzir dependências, a OpenAI irá desacoplar o plano de dados do Kubernetes (que gerencia as cargas de trabalho) do plano de controle (responsável pela orquestração), garantindo que serviços críticos possam continuar em execução mesmo durante as interrupções do plano de controle.

5. Mecanismos de Recuperação Mais Rápidos

Novas estratégias de cache e limitação de taxa irão melhorar os tempos de inicialização do cluster, garantindo uma recuperação mais rápida durante falhas.

Código de Exemplo: Exemplo de Implementação de Implantação Gradual

Aqui está um exemplo de implementação de uma implantação gradual para o Kubernetes usando Helm e Prometheus para observabilidade.

Implantação do Helm com implantações graduais:

Shell

 

Consulta Prometheus para monitorar a carga do servidor de API:

YAML

 

Esta consulta ajuda a rastrear os tempos de resposta para solicitações ao servidor de API, garantindo a detecção precoce de picos de carga. 

Exemplo de Injeção de Falhas

Usando chaos-mesh, a OpenAI poderia simular interrupções no plano de controle do Kubernetes.

Shell

 

api-server-fault.yaml

YAML

 

Esta configuração mata intencionalmente um pod do servidor de API para verificar a resiliência do sistema.

O Que Isso Significa Para Você

Esse incidente destaca a importância de projetar sistemas resilientes e adotar metodologias de teste rigorosas. Seja você gerenciando sistemas distribuídos em grande escala ou implementando o Kubernetes para suas cargas de trabalho, aqui estão algumas lições:

  • Simular Falhas Regularmente: Use ferramentas de engenharia do caos como o Chaos Mesh para testar a robustez do sistema em condições do mundo real.
  • Monitorar em Múltiplos Níveis: Assegure-se de que sua pilha de observabilidade rastreie tanto as métricas de nível de serviço quanto as métricas de saúde do cluster.
  • Desacoplar Dependências Críticas: Reduza a dependência de pontos únicos de falha, como descoberta de serviço baseada em DNS.

Conclusão

Embora nenhum sistema seja imune a falhas, incidentes como este nos lembram do valor da transparência, remediação rápida e aprendizado contínuo. A abordagem proativa da OpenAI ao compartilhar este post-mortem fornece um modelo para outras organizações melhorarem suas práticas operacionais e confiabilidade.

Ao priorizar implementações robustas em fases, testes de injeção de falhas e design de sistema resiliente, a OpenAI está estabelecendo um forte exemplo de como lidar e aprender com interrupções em larga escala.

Para equipes que gerenciam sistemas distribuídos, este incidente é um ótimo estudo de caso de como abordar a gestão de riscos e minimizar o tempo de inatividade para processos de negócios essenciais.

Vamos aproveitar essa oportunidade para construir juntos sistemas melhores e mais resilientes.

Source:
https://dzone.com/articles/what-we-should-learn-from-openais-downtime-incident