A implementação do método Canary consiste em liberar, de forma controlada, novas funcionalidades ou atualizações de software para uma pequena amostra de utilizadores, antes de disponibilizá-las a toda a base de utilizadores.
Este processo envolve a criação de uma versão inédita do software, que é implementada para um grupo reduzido de utilizadores, enquanto a versão anterior continua a ser utilizada pelo restante. A equipa de desenvolvimento acompanha de perto o desempenho da nova versão, garantindo a sua estabilidade e funcionamento adequado.
Se tudo correr conforme o esperado, a nova versão é progressivamente disponibilizada a mais utilizadores, até abranger a totalidade da base. Desta forma, a equipa minimiza o risco de introduzir erros ou outros problemas que possam afetar todos os utilizadores simultaneamente.
O objetivo principal da implementação Canary é reduzir o perigo de introduzir novas funcionalidades para uma grande base de utilizadores. Ao divulgar as alterações gradualmente, os desenvolvedores têm a possibilidade de monitorizar o desempenho e a estabilidade da nova versão. Eles efetuam todos os ajustes necessários antes de alargar a atualização para toda a base. A transição para a nova versão torna-se, portanto, mais suave.
Princípios Fundamentais e Vantagens
Fonte: martinfowler.com
Os princípios básicos da implantação Canary incluem:
- Inicialmente, a nova versão é disponibilizada para um pequeno grupo de utilizadores, e depois gradualmente expandida para mais utilizadores.
- A nova versão é cuidadosamente monitorizada para garantir a sua estabilidade e desempenho esperado.
- Em caso de problemas, a implementação pode ser rapidamente revertida para a versão anterior.
- O processo de implementação deve ser o mais automatizado possível para reduzir o risco de erros humanos.
As vantagens da implantação Canary no contexto DevOps incluem:
- Ao implementar as alterações de forma gradual, minimiza-se o risco de introduzir bugs ou outros problemas que possam afetar todos os utilizadores de uma só vez.
- Os desenvolvedores podem obter feedback sobre a nova versão rapidamente, permitindo que façam ajustes antes de implementá-la para toda a base de utilizadores.
- Através do monitoramento do desempenho e estabilidade da nova versão, os desenvolvedores podem garantir que ela atenda aos padrões de qualidade exigidos antes de a disponibilizar a todos os utilizadores.
- A implementação Canary ajuda a aumentar a confiança dos desenvolvedores e stakeholders no processo de implementação, uma vez que reduz o risco de apresentar problemas que possam afetar a experiência do utilizador.
Implementação Canary baseada em conceito e terminologia
Fonte: cncf.io
Vamos analisar o ciclo de vida típico deste processo.
Tudo começa com o grupo “Canary”, os primeiros utilizadores da nova versão do sistema. Em paralelo, existe o grupo “Baseline”, que engloba todos os utilizadores que não fazem parte do grupo “Canary”.
À medida que os utilizadores do grupo “Canary” continuam a utilizar a nova versão, a implementação do Canary é expandida para um número cada vez maior de utilizadores. Isso representa uma Mudança de Tráfego. O grupo “Canary” cresce, enquanto o grupo “Baseline” diminui, e o sistema distribui a nova versão gradualmente.
Ao longo do processo, o monitoramento regista todas as atividades e resultados de uso, gerando métricas que os desenvolvedores utilizam como feedback. Os desenvolvedores, então, reagem e corrigem o que for necessário. Ou revertem para a linha de base caso não seja possível solucionar os problemas nesse momento.
É crucial automatizar todas as atividades de monitoramento e implementação. Isso permite que os desenvolvedores se concentrem exclusivamente na resolução de problemas.
É possível que o grupo “Canary” descubra que certas funcionalidades da nova versão são problemáticas, enquanto outras funcionam perfeitamente. Desta forma, os desenvolvedores podem desativar as funcionalidades problemáticas nos processos de implementação.
Os desenvolvedores monitorizam ambos os grupos simultaneamente – o “Canary” e o “Baseline”. Os utilizadores estão a gerar resultados de Teste A/B. Isso representa o comportamento do sistema antigo e do novo sistema nas mesmas condições. Também são realizados testes automáticos de forma contínua na nova versão do sistema para garantir que o Health Check do grupo “Canary” esteja estável.
Diferenças em relação às estratégias de implementação tradicionais
Após entender o ciclo de vida do processo, as diferenças entre este e os processos de implementação tradicionais tornam-se evidentes.
- A implementação é feita de forma gradual e controlada, ao invés de disponibilizar tudo de uma só vez para todos e aguardar problemas que afetem toda a produção.
- O risco de novos erros é limitado ao grupo “Canary”, ao invés de expor todos os utilizadores aos problemas simultaneamente.
- A nova versão é monitorizada antes de ser disponibilizada aos utilizadores, ao invés de monitorizá-la após esse momento e investir um grande esforço na fase de “hipercuidado” do processo de lançamento.
- É possível decidir sobre a reversão da implementação antes de disponibilizar totalmente a nova versão em produção. Nas abordagens tradicionais, é necessário agendar outra janela de lançamento para reverter a produção após a conclusão do lançamento.
- A implementação Canary naturalmente incentiva o investimento em ferramentas e processos automatizados. Em contrapartida, as estratégias de implementação tradicionais tendem a despriorizar iniciativas de automação.
Pipelines de CI/CD na implementação Canary
Fonte: aws.amazon.com
Num pipeline típico de CI/CD, as alterações são criadas, testadas e implementadas automaticamente num ambiente de preparação para testes adicionais, antes de serem implementadas em produção. Isso é um caso de uso perfeito dentro de uma implementação Canary.
Depois que as alterações são implementadas no ambiente de preparação e aprovadas em todos os testes necessários, o pipeline de CI/CD implementa automaticamente a versão Canary para um pequeno subconjunto de utilizadores no ambiente de produção.
Se algo correr mal, basta executar outro pipeline para reverter. Ou sinalizar funcionalidades problemáticas e excluí-las do processo de implementação do pipeline. Tudo de forma automática, sem necessidade de preocupações adicionais.
Como a versão Canary é submetida a verificações de saúde automatizadas, elas são naturalmente incorporadas aos recursos básicos dos pipelines de CI/CD. Elas são uma parte obrigatória de qualquer bom pipeline de CI/CD.
Fluxo de Trabalho e Fases da Implementação Canary
Resumindo as informações, este é o fluxo de trabalho normal de uma implementação Canary que pode ser usada no seu projeto.
#1. Planeamento e Preparação
Nesta fase, a equipa de desenvolvimento planeia e prepara a implementação Canary. Isto envolve a identificação das alterações ou atualizações a serem efetuadas, a criação de uma nova versão do software e a definição das métricas e verificações de integridade que serão usadas para monitorizar o desempenho da nova versão. A equipa também identifica o subconjunto de utilizadores que receberá a nova versão primeiro e define o plano de implementação.
#2. Implementação de Roteamento e Monitoramento de Tráfego
A nova versão do software é implementada para o subconjunto de utilizadores identificados na fase de planeamento. O roteamento de tráfego é implementado para direcionar parte do tráfego de utilizadores para a nova versão, mantendo a versão antiga em execução para os restantes. O desempenho e a estabilidade da nova versão são monitorizados de perto através de métricas e verificações de integridade para garantir o seu funcionamento correto.
#3. Análise e Avaliação do Desempenho da Implementação
O desempenho da nova versão é analisado e avaliado com base nas métricas e verificações de saúde definidas na fase de planeamento. Se a nova versão apresentar um bom desempenho, a sua implementação é gradualmente expandida para mais utilizadores. Se surgirem problemas, a implementação pode ser rapidamente revertida para a versão anterior.
#4. Promoção ou Reversão da Implementação
A equipa de desenvolvimento decide se deve promover a nova versão para toda a base de utilizadores ou reverter para a versão anterior. Se a nova versão apresentar um bom desempenho e atender aos padrões de qualidade exigidos, ela é promovida para toda a base de utilizadores. Caso contrário, a implementação é rapidamente revertida para a versão anterior.
Fonte: aws.amazon.com
Melhores Práticas e Estratégias
Ao implementar a estratégia Canary na sua plataforma, comece por definir objetivos claros e como será o sucesso no final. Utilize métricas de desempenho, critérios de feedback do utilizador e impacto nos negócios para auxiliar neste processo.
Crie um pequeno subconjunto de utilizadores para testar a nova versão (Canary) do software. O grupo maior inicialmente não é uma vantagem real. É importante ser o mais flexível possível, especialmente no começo.
Monitorize o desempenho e a estabilidade da nova versão usando métricas e verificações de saúde, e reaja sempre que notar algo suspeito. É melhor reagir de forma exagerada do que não reagir o suficiente quando se trata de uma implementação gradual.
Aumente gradualmente o lançamento da nova versão para mais utilizadores. Isso garante uma transição mais suave para a nova versão.
Utilize ferramentas e processos de automação para simplificar o processo de implementação e monitoramento, incluindo-os nos pipelines de CI/CD. Isso reduz o risco de erro humano e garante que o processo de implementação seja consistente e repetível.
Implemente sinalizadores de recursos para ativar ou desativar funcionalidades específicas no software, obtendo maior controlo sobre os processos de implementação futuros. Isto permite aos desenvolvedores concentrar-se em resolver os problemas.
Utilize o teste A/B para comparar o desempenho de duas versões diferentes do software, atribuindo utilizadores aleatórios a uma versão ou outra. Identifique qual versão apresenta melhor desempenho e utilize essa informação para futuras decisões de desenvolvimento.
Certifique-se de que é possível reverter a implementação rapidamente caso surjam problemas. Isso minimiza o impacto de problemas e permite uma recuperação rápida.
Desafios e Estudos de Caso
Apesar das vantagens, existem alguns desafios associados à implementação do Canary.
Um dos desafios é a latência da rede, que pode afetar o desempenho da nova versão do software. Para lidar com este problema, os desenvolvedores podem usar ferramentas como balanceadores de carga e redes de entrega de conteúdo para melhorar o desempenho da rede. Além da latência para o sistema de uso externo, é preciso considerar a latência para processos internos, como implementações ou execuções de Pipelines de CI/CD. Estes devem ser concluídos o mais rápido possível. Caso contrário, haverá uma fila de desenvolvedores ociosos à espera que os pipelines concluam a sua execução.
Outro desafio é garantir a consistência dos dados entre as versões antiga e nova do software. Para enfrentar este desafio, os desenvolvedores podem usar técnicas como replicação e sincronização de base de dados para garantir que os dados sejam consistentes em todas as versões. A existência de utilizadores de produção a operar em versões antigas e novas ao mesmo tempo aumenta a expetativa de que ambas as versões estejam sincronizadas o tempo todo. Os utilizadores não podem perder dados de produção devido ao facto de estarem no grupo Canary/Baseline. Por isso, é essencial ter processos robustos implementados.
A Netflix é um exemplo bem conhecido de empresa que usa a estratégia Canary para implementar alterações no seu serviço de streaming. A empresa usa uma combinação de testes automatizados, sinalizadores de funcionalidades e testes A/B para implementar as alterações de forma gradual.
O Google também usa a implementação Canary para implementar alterações nos seus serviços na nuvem. Semelhantemente, a empresa usa os benefícios dos testes automatizados, divisão de tráfego e monitoramento para implementar gradualmente as alterações para um pequeno subconjunto de utilizadores antes de as disponibilizar para todos. Esta abordagem ajudou o Google a melhorar a qualidade e a estabilidade dos seus serviços.
Considerações Finais
Tal como acontece com todos os processos, abordagens ou estratégias, a implementação Canary não é uma solução para todos os problemas. Existem casos em que é quase impossível implementá-la devido a restrições ambientais, falta de conhecimento ou compreensão concetual.
É mais adequada para projetos da nova era, onde uma mentalidade ágil é fundamental, a automação de todos os processos é uma prioridade e existe um alto nível de confiabilidade por parte dos stakeholders.
Nesse caso, a implementação Canary representa um avanço nas práticas de desenvolvimento ágil e pode elevar as equipas a um nível que os projetos não alcançaram antes.
Recomenda-se verificar também dimensionamento e otimização de CI/CD.