Arquitetura real · Sênior
Netflix Kayenta (canary automatizado)
Arquitetura real em produção. Pontos centrais: comparação estatística entre baseline e canário.
Resposta curta
Arquitetura real em produção. Pontos centrais: comparação estatística entre baseline e canário. O Kayenta é uma plataforma de análise automática de canário (ACA), aberta ao público pela Netflix em parceria com o Google. O post de lançamento o descreve como componente crucial da entrega na empresa, porque reduz o risco de mudanças no ambiente de produção.
01 · CONTEXTO
Reduzir o risco de uma mudança em produção
O Kayenta é uma plataforma de análise automática de canário (ACA), aberta ao público pela Netflix em parceria com o Google. O post de lançamento o descreve como componente crucial da entrega na empresa, porque reduz o risco de mudanças no ambiente de produção.
Um canário é uma nova versão do software implantada para um pequeno subconjunto de usuários, ao lado da versão estável. O tráfego é dividido de modo que parte das requisições vá ao canário, o que permite descobrir problemas rapidamente sem afetar a maioria dos usuários.
A qualidade do canário é avaliada comparando métricas-chave das versões antiga e nova. Havendo degradação significativa, o canário é abortado e todo o tráfego volta à versão estável.
Ponto de partida: os usuários chegam ao balanceador, que encaminha as requisições ao serviço em produção.
O serviço publica métricas, e a entrega contínua implanta novas versões. Falta decidir como uma versão nova seria comparada com a atual.
O restante do caso mostra como a Netflix responde a essa pergunta: quais clusters ela cria, o que compara e quem decide.
02 · O PROBLEMA
Quando o canário era uma análise manual
A análise de canário começou como um processo manual. Um desenvolvedor ou engenheiro de release olhava gráficos e logs dos servidores de baseline e canário para ver quão próximas estavam as métricas, como códigos de status HTTP, tempos de resposta e contagem de exceções. Se os dados pareciam razoáveis, a pessoa decidia manualmente avançar ou reverter.
A Netflix escreve que a abordagem não escalava e não era confiável. Cada canário significava várias horas olhando gráficos e vasculhando logs, o que dificultava implantar mais de uma ou duas vezes por semana, e comparar gráficos visualmente dificultava ver diferenças sutis entre canário e baseline.
A primeira tentativa de automação foi um script específico para a aplicação medida. A empresa tentou então generalizar o processo e criou a primeira versão de análise automática de canário, da qual o Kayenta é uma evolução.
03 · TRÊS CLUSTERS
Produção, baseline e canário
No processo da Netflix, três clusters atendem ao mesmo tráfego em quantidades diferentes. Uma configuração típica usa um balanceador de carga para incluir as instâncias de baseline e canário no pool regular de instâncias.
Os usuários chegam ao balanceador, que reparte o tráfego entre os clusters.
A produção recebe a maior parte do tráfego e roda a versão atual, sem mudanças.
O baseline roda a mesma versão de código e configuração da produção e recebe uma pequena parte do tráfego.
O canário roda as mudanças propostas e recebe uma pequena parte do tráfego.
O Spinnaker cuida do ciclo de vida dos clusters de baseline e canário.
As métricas ficam num banco de séries temporais, com tags que identificam se o dado veio do canário ou do baseline.
| Cluster | O que roda | Instâncias |
|---|---|---|
| Produção | Versão atual, sem mudanças | Qualquer número de instâncias |
| Baseline | Mesma versão de código e configuração da produção | Tipicamente 3 |
| Canário | Mudanças propostas de código ou configuração | Tipicamente 3 |
Também seria possível usar o cluster de produção em vez de criar um baseline, mas comparar um canário recém-criado com uma produção de longa duração poderia dar resultados pouco confiáveis. Criar um baseline novo garante métricas livres de efeitos de processos de longa execução.
O Spinnaker, plataforma de entrega contínua da empresa, roda uma ou mais iterações da análise e decide continuar, reverter ou, em alguns casos, pedir intervenção manual. Se a versão é considerada segura, o deploy segue; se não, o Spinnaker aborta o canário e todo o tráfego vai à produção.
04 · KAYENTA
Recuperação de métricas e julgamento
O Kayenta é responsável por avaliar o risco de um canário e verificar se há degradação significativa entre baseline e canário. Ele se divide em duas etapas principais: recuperação de métricas e julgamento.
O pipeline do Spinnaker aciona a análise pelo endpoint REST do Kayenta.
O Kayenta lê a configuração das consultas e as combina com um escopo para consultar uma fonte de métricas.
Os resultados da recuperação são passados ao juiz para análise.
O juiz produz uma decisão: o canário passou ou falhou.
O Spinnaker usa a pontuação para decidir se o canário continua ou reverte.
A saída da recuperação e do julgamento é arquivada, permitindo rodar novos juízes sobre dados já coletados.
Na recuperação, o Kayenta lê um arquivo de configuração que define as consultas de métricas e combina cada uma com um escopo, ou seja, cluster e intervalo de tempo. As métricas ficam tipicamente num banco de séries temporais, com tags que identificam se o dado veio do canário ou do baseline. Entre as fontes suportadas à época do post estavam Prometheus, Stackdriver, Datadog e o Atlas da Netflix, e fontes diferentes podem ser combinadas numa mesma análise.
| Etapa do julgamento | O que faz |
|---|---|
| Validação de dados | Garante que há dados de baseline e canário antes da análise |
| Limpeza de dados | Trata valores ausentes conforme o tipo de métrica |
| Comparação de métricas | Classifica cada métrica como Pass, High ou Low |
| Cálculo da pontuação | Indica quão parecido o canário é do baseline |
O algoritmo principal de comparação usa intervalos de confiança, calculados pelo teste U de Mann-Whitney, para classificar se existe diferença significativa. A classificação High indica que a métrica do canário é significativamente maior que a do baseline.
A pontuação final é a razão entre as métricas classificadas como Pass e o total de métricas: por exemplo, 9 de 10 métricas em Pass resultam em pontuação de 90%. A Netflix diz que existem metodologias mais complexas, mas que prefere técnicas simples de entender.
O relatório de canário detalha o resultado por métrica e mostra os dados de entrada. Num exemplo do post, a pontuação é 58%, com várias métricas classificadas como High. Para a Netflix, ter visão detalhada de por que um canário falhou é crucial para dar confiança no sistema.
05 · RESULTADOS
Flexibilidade, adoção e o que levar para a entrevista
Como a saída da recuperação e do julgamento é arquivada, é possível rodar novos algoritmos de comparação e novos juízes sobre dados já coletados. Fontes de métricas, juízes, armazenamento de configuração e armazenamento de resultados são plugáveis.
O Kayenta oferece um endpoint REST para operações de CRUD sobre configurações e para obter resultados. Apesar da integração forte com o Spinnaker, ele consegue rodar sem os demais componentes dele, tendo apenas o Redis como dependência.
Segundo a Netflix, o Kayenta é bem mais flexível que a solução anterior e mais fácil de configurar. A empresa removeu boa parte da complexidade de definir limiares e ajustes manuais, apoiando-se em algoritmos melhores. À época do post, a migração do sistema legado estava em andamento, e o Kayenta rodava cerca de 30% dos julgamentos de canário em produção, em média 200 por dia.
Perguntas frequentes
O que é Netflix Kayenta (canary automatizado)?
Arquitetura real em produção. Pontos centrais: comparação estatística entre baseline e canário.
O que o design de Netflix Kayenta (canary automatizado) cobre?
Ele está organizado nestas seções: Reduzir o risco de uma mudança em produção, Quando o canário era uma análise manual, Produção, baseline e canário, Recuperação de métricas e julgamento e Flexibilidade, adoção e o que levar para a entrevista.
Quanto tempo leva Netflix Kayenta (canary automatizado) e qual é o nível?
Leva cerca de 17 minutos para ler e tem nível Sênior.
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.