Os métodos tradicionais de desenvolvimento de software, conhecidos como “big bang”, mostram-se inadequados para atender às demandas atuais por alta flexibilidade, agilidade e implantação contínua, características essenciais das plataformas de software em nuvem e DevOps.
Não é suficiente elaborar uma simples lista de passos manuais para a implementação de uma versão em produção. Proceder dessa maneira impede a verdadeira adoção de práticas ágeis e de uma cultura DevOps autêntica.
Implantação Azul-Verde: Uma Análise Detalhada
A estratégia de implantação Azul-Verde destaca-se como uma metodologia para a implementação de software que visa minimizar o tempo de inatividade e os riscos associados a novas versões. Isso é alcançado através da criação de dois ambientes idênticos: um ativo (azul) e outro inativo (verde).
O ambiente ativo é responsável pela execução da versão atual do software, sendo o ponto de acesso dos usuários para o tráfego de produção. Paralelamente, o ambiente inativo serve como local de implementação e testes da nova versão do software.
Após a nova versão ser devidamente testada e aprovada, o fluxo de tráfego é redirecionado do ambiente ativo para o inativo, que assume então o papel de novo ambiente ativo. Este processo pode ser repetido conforme a necessidade.
Fonte: docs.aws.amazon.com
O Papel da Implantação Azul-Verde no Contexto DevOps
A implantação Azul-Verde se integra de forma harmoniosa com a filosofia e os processos DevOps, facilitando a entrega e implementação contínua de software. Ao fazer isso, ela minimiza a interrupção para os usuários em produção e elimina o perigo de falhas nas novas versões.
A existência de dois ambientes idênticos viabiliza a experimentação e a implementação de novas versões de software sem afetar o ambiente de produção atual. Esta característica é fundamental para a realização de lançamentos mais rápidos e frequentes, um dos pilares do DevOps.
Adicionalmente, a capacidade de alternar o tráfego entre ambientes com agilidade é indispensável para uma reversão eficiente em caso de problemas, um aspecto igualmente crucial em um ambiente DevOps.
Princípios Fundamentais da Implantação Azul-Verde
#1. Dois Ambientes Espelhados
A metodologia Azul-Verde exige a montagem de dois ambientes completamente idênticos, tanto em termos de dados quanto de processos. Um deles opera como ambiente ativo (azul), enquanto o outro permanece inativo (verde).
No ambiente azul, os usuários de produção realizam suas atividades diárias. O ambiente verde, por sua vez, está em constante sincronia com o azul, sendo utilizado pelos testadores para a execução de casos de teste. Mesmo não sendo o ambiente de produção em si, os testes são realizados em condições muito próximas à realidade, devido à similaridade entre os ambientes.
#2. A Chave da Mudança de Tráfego
Assim que a nova versão do software é testada e confirmada como pronta para uso, o tráfego é redirecionado do ambiente ativo para o inativo, que assume o novo status de ambiente ativo.
A transição é instantânea e sem interrupções, representando um avanço em relação aos métodos de implementação tradicionais. Os usuários não precisam realizar nenhuma ação, pois são automaticamente redirecionados para o novo ambiente, tudo simultaneamente.
Fonte: aws.amazon.com
#3. Reversão Rápida e Eficaz
A facilidade de alternar o tráfego entre ambientes permite uma reversão imediata em caso de problemas, garantindo um tempo de inatividade mínimo e a manutenção da alta disponibilidade do aplicativo.
Se ocorrerem falhas no ambiente verde, todos os usuários são automaticamente reconduzidos ao ambiente azul original, sem qualquer tipo de confusão ou interrupção.
#4. Testes Automatizados: A Base da Confiança
A automação dos testes é um componente essencial da implantação Azul-Verde, assegurando que a nova versão do software seja minuciosamente avaliada antes de sua implementação no ambiente ativo.
A ausência de um conjunto substancial de testes automatizados (incluindo testes de unidade, testes funcionais e testes de regressão) pode tornar a adoção da implantação Azul-Verde pouco prática.
A falta de automação nos testes pode causar atrasos significativos. O tempo dedicado à avaliação do novo ambiente (verde) pode ser tão extenso que, ao final do processo, o ambiente já poderá ser considerado “obsoleto” em relação ao ciclo de vida de desenvolvimento do software.
#5. Entrega Contínua: Um Fluxo Constante de Melhorias
A implantação Azul-Verde é parte integrante de um pipeline de entrega contínua, o que resulta em lançamentos de software mais frequentes e rápidos no ambiente de produção.
A troca de ambientes pode ser efetuada assim que a nova versão do software estiver pronta para testes no ambiente verde. Como a implementação já foi realizada e o que resta é apenas a mudança de tráfego, o processo é tão ágil que pode ser repetido diariamente, desde que as atividades de teste também sejam executadas com rapidez.
Ciclo de Vida Típico
A plataforma que viabiliza a implantação Azul-Verde possui um ciclo de vida particular, com etapas e processos específicos a serem seguidos. Este ciclo geralmente compreende os seguintes passos:
- Criação de uma nova versão do software, que envolve a compilação do código, execução de testes automatizados e a geração de um artefato implementável.
- Implementação da nova versão no ambiente inativo (verde), incluindo a configuração do ambiente, a implementação do artefato e a definição das configurações necessárias.
- Execução de testes automatizados no ambiente verde para garantir o funcionamento correto da nova versão, abrangendo testes funcionais, testes de regressão, testes de integração e, em casos ideais, testes de desempenho.
- Redirecionamento do tráfego do ambiente ativo (azul) para o inativo (verde), por meio da atualização do balanceador de carga ou das configurações de DNS para direcionar o tráfego ao ambiente verde. Este processo deve ser, preferencialmente, automatizado.
- Monitoramento do aplicativo após a troca, com foco na identificação de erros, problemas de desempenho e outras questões.
- Reversão do tráfego para o ambiente azul, caso sejam detectados problemas significativos, garantindo uma reversão imediata e sem interrupções para os usuários. Esta etapa é opcional.
- Redirecionamento do tráfego para o ambiente verde, após a resolução dos problemas e a confirmação de que a nova versão está pronta.
- Desativação da versão antiga do software no ambiente azul após a estabilização da nova versão. Este ambiente será utilizado para a criação de uma nova versão do sistema.
Implementação em Pipelines de CI/CD
A integração da implantação Azul-Verde em um pipeline DevOps CI/CD deve ser um processo natural e sem complicações.
Um pré-requisito essencial é a existência de dois ambientes idênticos em pleno funcionamento. Para automatizar este processo, pode-se empregar ferramentas de infraestrutura como código, como AWS CloudFormation ou o Terraform, para criar, recriar ou atualizar os ambientes de forma automatizada nos pipelines.
Após essa configuração, o processo de implantação automatizada torna-se mais simples. Os pipelines já existentes para a criação dos ambientes azul e verde podem ser reutilizados, incluindo agora também os processos de teste.
A mudança de tráfego pode ser automatizada com ferramentas como o Elastic Load Balancer da AWS ou NGINX. Isso envolve a atualização do balanceador de carga ou das configurações de DNS para redirecionar o tráfego ao ambiente verde assim que a nova versão do software estiver testada e aprovada.
O próximo passo é o monitoramento, que pode ser feito com o uso de ferramentas como AWS CloudWatch, New Relic ou Datadog.
Por fim, os pipelines já existentes podem ser reutilizados para desativar o antigo ambiente azul. A escolha entre destruir todos os serviços e componentes e recriá-los do zero, ou simplesmente atualizar os scripts, é sua. Destruir e recriar geralmente é a opção mais segura, pois a atualização pode apresentar mais casos a serem considerados.
Melhores Práticas para a Implantação Azul-Verde
Deseja saber como otimizar a implantação Azul-Verde? Aqui estão algumas dicas práticas:
Uma Estratégia de Migração de Banco de Dados Sólida
Ao implementar uma nova versão do software, é fundamental assegurar que o esquema do banco de dados seja atualizado de forma correta. Ferramentas de migração como Flyway ou Liquibase são recomendadas para gerenciar as alterações no esquema do banco de dados.
Utilização de Ferramentas de Análise Canary
Embora a implantação Canary seja uma abordagem diferente, algumas de suas técnicas podem ser utilizadas para otimizar a implantação Azul-Verde.
Ferramentas de análise Canary, como Kayenta ou Spinnaker podem ser usadas para avaliar o desempenho da nova versão do software em um cenário real, comparando-o com o desempenho da versão anterior.
O uso de estruturas de alternância de recursos, como o Togglz permite ativar ou desativar recursos na nova versão do software, possibilitando o lançamento gradual de novas funcionalidades e a reversão rápida, se necessário.
Balanceadores de Carga com Verificações de Saúde
O uso de balanceadores de carga, como o AWS Elastic Load Balancer ou NGINX, com verificações de saúde garante que o tráfego seja direcionado apenas para instâncias em funcionamento, mantendo a alta disponibilidade e minimizando o tempo de inatividade do aplicativo.
Plano de Reversão com Reversão Automatizada
É essencial ter um plano de reversão para problemas, automatizando este processo com ferramentas como AWS CodeDeploy ou Octopus Deploy. Isso garante a minimização do tempo de inatividade e a manutenção da alta disponibilidade do aplicativo.
Essa prática é principalmente aplicável ao ambiente verde, sempre que surgirem problemas significativos com a nova versão.
Para o ambiente azul, um plano de reversão não é necessário, pois ele permanece inalterado durante a troca e pode ser utilizado instantaneamente em caso de necessidade.
Desafios da Implantação Azul-Verde
A implementação da implantação Azul-Verde pode apresentar desafios para as equipes de desenvolvimento. Alguns dos desafios mais comuns incluem:
- A configuração e gestão de dois ambientes idênticos pode ser complexa e demandar muito tempo. Isso requer experiência em ferramentas de infraestrutura como código, como Terraform ou CloudFormation, e uma equipe de desenvolvimento experiente para lidar com esses desafios técnicos.
- É fundamental garantir que o esquema do banco de dados seja atualizado corretamente durante a implementação de uma nova versão do software. Esse processo pode ser desafiador, especialmente se o esquema do banco de dados for complexo. É necessária a implementação de processos robustos de implantação de banco de dados, capazes de lidar com atualizações de esquema de forma automática e confiável.
- A análise do desempenho da nova versão do software em um ambiente real pode ser complexa e exigir experiência em ferramentas de análise canary, como Kayenta ou Spinnaker.
- A implementação de alternância de recursos pode ser desafiadora, especialmente em aplicativos com um grande número de recursos, exigindo planejamento e coordenação entre as equipes de desenvolvimento.
- Testar a nova versão do software em um ambiente real pode ser complexo, especialmente em aplicativos com grande número de usuários ou servidores. É fundamental ter o máximo de casos de teste automatizados e promover a coordenação entre as equipes de desenvolvimento e teste.
- Um sistema de monitoramento eficaz é essencial para operações DevOps adequadas, sendo recomendado investir tempo e recursos para criar uma solução robusta com serviços comprovados (AWS CloudWatch, New Relic, Datadog).
A Diferença entre Implantação Azul-Verde e Canary
Embora a diferença entre a implantação Azul-Verde e os processos de implantação tradicionais seja evidente, a distinção em relação à implantação Canary pode ser um pouco mais sutil.
A implantação Azul-Verde envolve dois ambientes (azul e verde) que permanecem em constante sincronia em relação aos dados. Após a nova versão ser testada e considerada pronta, o tráfego é direcionado do ambiente ativo para o inativo, que se torna o novo ambiente ativo. Não há tempo de inatividade e os usuários continuam trabalhando no ambiente ativo sem perceber a mudança.
A implantação Canary envolve a implementação da nova versão do software para um pequeno subconjunto de usuários, enquanto a maioria continua utilizando a versão atual. A implementação é gradual, e os testadores são usuários de produção que avaliam ativamente a nova versão, que é posteriormente disponibilizada para os demais usuários.
Qual a Melhor Opção?
A resposta do consultor “depende” é a mais adequada aqui, embora possa soar frustrante.
Se a alta disponibilidade do sistema é sua prioridade máxima, então a implantação Azul-Verde deve ser sua escolha.
Se sua preferência for um feedback mais rápido e uma implementação mais controlada da nova versão do sistema (embora mais lenta), então a implantação Canary oferece vantagens sobre a Azul-Verde.
O importante é que ambas as metodologias são consideradas suficientemente ágeis e adequadas para a criação de sistemas DevOps.
Estudos de Caso
A Netflix utiliza a implantação Azul-Verde para implementar novas versões de seu serviço de streaming, garantindo que a experiência do usuário não seja afetada durante o processo. A empresa também utiliza a implantação Canary para outros casos, mostrando que é possível combinar diferentes abordagens de implantação DevOps.
Empresas como Amazon e Etsy também utilizam a implantação Azul-Verde para implementar novas versões de suas plataformas de comércio eletrônico.
O LinkedIn também faz uso da implantação Azul-Verde para implementar novas versões de sua plataforma de rede social.
A IBM usa essa metodologia para implementar novas versões de sua plataforma em nuvem.
Essas empresas demonstram que a implantação Azul-Verde pode ser aplicada com sucesso em diversas infraestruturas de plataforma, servindo como bons exemplos para outros.
Considerações Finais
Assim como a implantação Canary, a implantação Azul-Verde busca otimizar os processos e metodologias ágeis para entregar novas versões de software de forma transparente. O objetivo final é entregar novas funcionalidades com frequência, sem que os usuários percebam qualquer interrupção.
Embora possa ser frustrante para a equipe de desenvolvimento que seus últimos lançamentos passem despercebidos, esse é o melhor serviço que se pode oferecer. As novas funcionalidades são usadas no dia a dia sem que ninguém precise pensar nelas.
Para mais informações, veja as perguntas e respostas frequentes das entrevistas de DevOps.