Implantações Canário
Implantação Canário (ou Canary Release) é uma técnica para reduzir o risco da introdução de uma nova versão do software em produção, fazendo o lançamento gradual da mesma para uma pequena parte do conjunto de usuários antes de implantá-la em toda a infraestrutura e torná-la acessível a todos.
De forma similar às Implantações Azul-Verde, você começa com a implantação da nova versão do seu software em uma parte da infraestrutura para a qual nenhum usuário é roteado.
Quando você estiver satisfeito com a nova versão, você pode começar a rotear alguns usuários selecionados para ela. Existem diversas estratégias para escolher quais são os usuários que verão a nova versão: uma estratégia simples é usar uma amostra aleatória; algumas empresas optam por liberar a nova versão para seus usuários internos e funcionários antes de liberá-la para seu público geral; outra abordagem mais sofisticada é escolher os usuários com base em seu perfil ou outros dados demográficos.
Conforme você ganha mais confiança na nova versão, você pode começar a liberá-la para mais servidores em sua infraestrutura e rotear mais usuários para estes servidores. Uma boa prática para a implantação da nova versão é reaproveitar sua infraestrutura existente utilizando Servidores Phoenix ou provisionar uma nova infraestrutura para substituir a antiga usando Servidores Imutáveis.
A Implantação Canário é uma aplicação do padrão Mudança Paralela, na qual a fase de migração dura até que todos os usuários sejam direcionados para a nova versão. Nesse momento, você pode desativar a infraestrutura antiga. Se você encontrar qualquer problema na nova versão, a estratégia de reversão é simples: basta redirecionar os usuários de volta para a versão antiga até que o problema seja resolvido.
Uma vantagem de usar Implantações Canário é a possibilidade de realizar testes de capacidade na nova versão em um ambiente de produção com uma estratégia de reversão segura se problemas forem encontrados. Incrementando lentamente a carga, você pode capturar e monitorar métricas de como a nova versão impacta o ambiente de produção. Esta é uma abordagem alternativa à criação de um ambiente para testes de capacidade totalmente separado, pois o ambiente será o mais próximo possível do ambiente de produção.
Apesar do nome para esta técnica não soar familiar [1], a prática da Implantação Canário vem sendo adotada há algum tempo. É também conhecida como lançamento em fases (ou phased rollout) ou lançamento incremental (ou incremental rollout).
Em cenários distribuídos e de grande porte, ao invés de usar um roteador para decidir quais usuários serão redirecionados para a nova versão, é comum usar diferentes estratégias de particionamento. Por exemplo: se seus usuários estiverem geograficamente espalhados, você pode fazer o lançamento inicial da nova versão para uma região ou país específico. Se sua empresa possui diferentes marcas, você pode inicialmente lançar a primeira versão para uma única marca, etc. O Facebook opta pela adoção de uma estratégia com múltiplos canários, o primeiro sendo visível apenas para seus funcionários internos e com todas as FeatureToggles ligadas, assim eles podem detectar eventuais problemas com as novas funcionalidades mais rapidamente.
A Implantação Canário pode ser utilizada como uma forma de implementar testes A/B devido às semelhanças na implementação técnica. No entanto, é melhor não confundir estas duas técnicas que possuem objetivos diferentes: enquanto as Implantações Canário são uma boa maneira de detectar problemas de regressão, testes A/B são uma maneira de validar uma hipótese usando variações na implementação. Se você monitorar métricas de negócios para detectar regressões em um canário [2], usá-lo também para a realização de testes A/B pode interferir nos resultados. Um detalhe pouco mais prático: pode-se levar dias para reunir dados suficientes para demonstrar significância estatística em um teste A/B, enquanto uma Implantação Canário idealmente termina em alguns minutos ou horas.
Uma desvantagem do uso da Implantação Canário é que você precisa gerenciar várias versões do software ao mesmo tempo. Você pode inclusive optar por ter mais de duas versões em produção ao mesmo tempo. No entanto, é melhor manter um nível mínimo do número de versões simultâneas.
Outro cenário onde o uso da Implantação Canário é difícil é quando você distribui software que é instalado nos computadores dos usuários ou em dispositivos móveis. Neste caso, você tem menos controle sobre quando a atualização para a nova versão acontece. Se o software distribuído se comunica com um serviço central (ou backend), você pode usar a Mudança Paralela para dar suporte à ambas as versões e monitorar quais versões estão sendo utilizadas pelo cliente. Assim que o uso cair a um certo nível, você pode contrair o backend para suportar apenas a nova versão.
O gerenciamento de mudanças no banco de dados também requer atenção ao realizar Implantações Canário. Novamente, usar a Mudança Paralela é uma técnica para mitigar este problema. Ela permite que o banco de dados suporte as duas versões da aplicação ao mesmo tempo durante a fase de implantação.
Leitura Adicional
A técnica da Implantação Canário é descrita por Jez Humble e Dave Farley no livro Continuous Delivery.
Nesta apresentação, Chuck Rossi descreve o processo de release do Facebook e como utilizam Implantações Canário com mais detalhes.
Agradecimentos
Aos muitos colegas da Thoughtworks pelos seus comentários: Jez Humble, Rohith Rajagopal, Charles Haynes, Andrew Maddison, Mark Taylor, Sunit Parekh e Sam Newman.
Notas
- O nome para esta técnica tem origem na prática usada por mineradores que carregavam um canário para as minas de carvão. Se houvesse algum vazamento de gases tóxicos na mina, o canário morreria primeiro, antes de contaminar e eventualmente matar os mineradores. A Implantação Canário proporciona uma forma semelhante de alerta precoce para potenciais problemas antes de impactar toda sua infraestrutura de produção ou base de usuários.
- A técnica de monitorar métricas de negócio e fazer a reversão automática quando acontece uma regressão estatisticamente significante é conhecida como sistema de imunidade do cluster, criada e usada de forma pioneira na IMVU. Eles descrevem esta a outras práticas na sua abordagem de Implantação Contínua neste post.
Este post foi originalmente publicado em inglês no Bliki do Martin Fowler.
Aviso: As afirmações e opiniões expressas neste artigo são de responsabilidade de quem o assina, e não necessariamente refletem as posições da Thoughtworks.