Meu entendimento de um release canário é que é um release parcial para um subconjunto de nós de produção com sessões fixas ativadas. Dessa forma, você pode controlar e minimizar o número de usuários / clientes afetados se você acabar lançando um bug incorreto.
Meu entendimento de uma versão azul / verde é que você possui 2 ambientes de produção espelhados ("azul" e "verde") e envia as alterações para todos os nós de azul ou verde de uma só vez e depois usa a magia da rede para controlar para qual ambiente os usuários são roteados via DNS.
Portanto, antes de começar, se alguma coisa que eu disse até agora estiver incorreta, comece me corrigindo!
Supondo que eu esteja mais ou menos no caminho certo, duas perguntas sobre as duas estratégias:
- Existem cenários em que o canário é preferido em vez de azul / verde e vice-versa?
- Existem cenários em que um modelo de implantação pode implementar as duas estratégias ao mesmo tempo?
deployment
production-environment
release-management
blue-green-deployment
canary-deployment
IAmYourFaja
fonte
fonte
Respostas:
A liberação azul esverdeado é mais simples e rápida.
Você pode executar uma versão azul esverdeada se tiver testado a nova versão em um ambiente de teste e tiver certeza de que a nova versão funcionará corretamente na produção. Sempre usar alternâncias de recursos é uma boa maneira de aumentar sua confiança em uma nova versão, uma vez que a nova versão funciona exatamente como a antiga até que alguém vire uma alternância de recurso. Dividir seu aplicativo em serviços pequenos e liberáveis de forma independente é outro, pois há menos para testar e menos que podem ser interrompidos.
Você precisa fazer um lançamento canário se não tiver certeza absoluta de que a nova versão funcionará corretamente na produção. Mesmo se você for um testador completo, a Internet é um lugar grande e complexo e sempre apresenta desafios inesperados. Mesmo se você usar alternâncias de recursos, uma poderá ser implementada incorretamente.
A automação da implantação exige esforço, portanto a maioria das organizações planeja usar uma estratégia ou outra sempre.
O mesmo ocorre com a implantação azul esverdeado, se você se comprometer com práticas que permitem confiar em fazê-lo. Caso contrário, envie o canário.
A essência do azul esverdeado é implantada de uma só vez e a essência da implantação do canário é implantada de forma incremental, portanto, dado um único pool de usuários, não consigo pensar em um processo que descreveria como fazendo as duas coisas ao mesmo tempo. Se você tivesse vários pools de usuários independentes, por exemplo, usando diferentes datacenters regionais, seria possível fazer azul esverdeado em cada datacenter e canário nos datacenters. Embora se você não precisasse da implantação de canários em um datacenter, provavelmente não precisaria dela nos datacenters.
fonte
Escrevi um ensaio detalhado sobre este tópico aqui: http://blog.itaysk.com/2017/11/20/deployment-strategies-defined
Na minha opinião, a diferença é se a nova versão 'verde' é ou não exposta a usuários reais. Se for, então eu chamaria de Canário. Uma maneira comum de implementar o Canary é o azul / verde comum, com a adição de roteamento inteligente de usuários específicos à nova versão. Leia o post para uma comparação detalhada
Azul verde:
Canário:
fonte
Embora ambos os termos pareçam bastante próximos, eles têm diferenças sutis. Um confia na liberação da funcionalidade e o outro confia na maneira como você libera.
Canário
O release canary é uma técnica para reduzir o risco de introduzir uma nova versão de software em produção, lançando lentamente a alteração em um pequeno subconjunto de usuários antes de lançá-la em toda a infraestrutura.
Está prestes a ter uma idéia de como a nova versão será executada (integre-se a outros aplicativos, CPU, memória, uso de disco, etc.).
Azul verde:
fonte
Aqui estão algumas definições em linha -
Implantação azul esverdeado - Ao implantar uma nova versão de um aplicativo, um segundo ambiente é criado. Depois que o novo ambiente é testado, ele substitui a versão antiga. O ambiente antigo pode ser desativado.
fonte
Um bom começo de definições. Eu acho que também ajuda a tomar uma decisão para sua estratégia se você dividir sua definição de "release" em "deploy" e "release (funcionalidade)".
Implantar (binários)
A ação da implantação binária do seu produto em um sistema (de produção).
Liberação (funcionalidade)
A ação de gerenciar a disponibilidade da funcionalidade para (grupos de) usuários.
Por quê? Você normalmente tem (várias) duas preocupações ao "liberar": 1) Bugs / compatibilidade com versões anteriores / etc 2) Verificando a validade / usabilidade dos novos recursos
Em seguida, pergunte a si mesmo, antes de escolher uma estratégia de modo Canário ou Azul / verde ou qualquer que seja o modo cinza / misto: Que preocupação (s) temos ao lançar / implantar a nova versão? E só então, se você conhece suas preocupações, escolha sua estratégia.
Além disso, é possível executar estratégias de implantação / liberação mais complexas. Por exemplo, em algumas nuvens / infra, é possível ter vários servidores de produção, e retransmitir a carga em diferentes proporções para diferentes servidores e versões do seu produto, além de monitorar a integridade antes de escalar uma versão / implantação para todos os usuários.
Sinalização de recursos
A ação de "configurar" (frio ou até quente) qual funcionalidade está (não) disponível para qual (grupo) de usuários
Se você também fizer algo como "sinalização de recurso", poderá implantar primeiro, medir a solidez do seu lançamento na compatibilidade com versões anteriores / perspectiva de bug e liberar novas funcionalidades gradualmente para diferentes usuários, ou vice-versa (reduzir ou até mesmo a funcionalidade de reversão e / ou binários ) A sinalização de recursos permite dividir a disponibilidade da funcionalidade da implantação de binários e fornece muito mais informações detalhadas sobre a tomada de decisões do que apenas "implantar / reverter"
fonte