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:
# Deploy the telemetry service to 10% of clusters
helm upgrade --install telemetry-service ./telemetry-chart \
--set replicaCount=10 \
--set deploymentStrategy=phased-rollout
Consulta Prometheus para monitorar a carga do servidor de API:
# PromQL Query to monitor Kubernetes API server load
sum(rate(apiserver_request_duration_seconds_sum 1m )) by (cluster) /
sum(rate(apiserver_request_duration_seconds_count 1m )) by (cluster)
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.
# Inject fault into Kubernetes API server to simulate downtime
kubectl create -f api-server-fault.yaml
api-server-fault.yaml
:
apiVersion chaos-mesh.org/v1alpha1
kind PodChaos
metadata
name api-server-fault
spec
action pod-kill
mode one
selector
namespaces
kube-system
labelSelectors
app kube-apiserver
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