DevOps & CI/CD Nathan Geeksman

Estratégias de Deploy: Blue/Green, Canary e Rolling

Estratégias de Deploy: Blue/Green, Canary e Rolling

Estratégias de Deploy: Blue/Green, Canary e Rolling

Introdução

O desenvolvimento de software tem se tornado cada vez mais complexo e rápido, exigindo soluções inovadoras para atender às necessidades dos usuários em tempo real. Uma das principais desafios enfrentados pelos times de tecnologia é a implementação eficaz de mudanças no código ou na infraestrutura do sistema sem interrupção da funcionalidade. Nesse contexto, estratégias de deploy eficientes se tornaram cruciais para garantir a disponibilidade e a escalabilidade dos sistemas.

Neste artigo, abordaremos três estratégias de deploy amplamente utilizadas atualmente: Blue/Green, Canary e Rolling. Essas técnicas permitem que os desenvolvedores implantem mudanças no sistema sem interrupção do serviço para os usuários, reduzindo assim o risco associado a erros ou problemas inesperados.

Ao final desta leitura, você terá uma compreensão clara sobre como essas estratégias funcionam e quando aplicar cada uma delas, permitindo que você adote a abordagem mais adequada para o seu projeto. Além disso, serão apresentadas as principais vantagens e desafios associados a cada técnica, ajudando-o a tomar decisões informadas sobre como melhorar a sua estratégia de deploy.

O que é e por que importa

Deploy é o processo de implantar mudanças no código ou na infraestrutura de um sistema, tornando-o disponível para os usuários. Com o aumento da complexidade dos sistemas e a necessidade de atualizações frequentes, uma estratégia de deploy eficiente se tornou fundamental para garantir a disponibilidade e escalabilidade do sistema.

Uma das principais motivações para adotar uma estratégia de deploy é minimizar os riscos associados à interrupção do serviço. Downtime ou interrupção do serviço pode resultar em perda de receita, baixa qualidade da experiência do usuário e danos à reputação da empresa.

Além disso, as estratégias de deploy permitem que os desenvolvedores implantem mudanças gradualmente, reduzindo assim o impacto sobre os usuários. Isso é especialmente importante em sistemas com grande volume de tráfego ou que necessitam manter a integridade dos dados.

A falta de uma estratégia de deploy eficaz pode levar a problemas como:

  • Downtime prolongado
  • Perda de receita e oportunidades
  • Baixa qualidade da experiência do usuário
  • Dificuldades em identificar e resolver problemas

As estratégias de deploy, como Blue/Green, Canary e Rolling, são projetadas para mitigar esses riscos e garantir que as mudanças sejam implantadas com sucesso.

Como funciona na prática

Nesta seção, vamos explorar as estratégias de deploy Blue/Green, Canary e Rolling, descrevendo como funcionam internamente e etapas envolvidas.

Blue/Green Deploy

  • Preparação: O servidor de teste (Blue) é configurado para servir a versão atualizada do sistema.
  • Swap: O tráfego dos usuários é redirecionado para o servidor de teste, enquanto o servidor original (Green) continua operando com a versão anterior.
  • Validação: Os usuários são monitorados para garantir que não haja problemas ou bugs na nova versão.
  • Swap inverso: Se tudo ocorrer corretamente, o tráfego é redirecionado novamente para o servidor original (Green), enquanto o servidor de teste (Blue) volta a ser usado para testes futuros.

Canary Deploy

  • Preparação: Uma pequena porção do tráfico dos usuários é redirecionada para a versão atualizada do sistema.
  • Monitoramento: A performance da nova versão é monitorada em tempo real, buscando problemas ou bugs.
  • Rollback: Se problemas forem encontrados, o tráfego pode ser rapidamente revertido para a versão anterior, sem afetar os usuários que ainda estão usando a versão atualizada.
  • Escalabilidade: A porção do tráfico redirecionada para a versão nova é gradualmente aumentada até que todos os usuários estejam usando a versão atualizada.

Rolling Update

  • Preparação: A aplicação é dividida em componentes independentes, cada um com sua própria estratégia de deploy.
  • Atualização: Cada componente é atualizado individualmente, sem afetar os demais componentes ou o funcionamento geral da aplicação.
  • Monitoramento: A performance da aplicação é monitorada após a atualização de cada componente, garantindo que não haja problemas.
  • Rolagem contínua: O processo é repetido para todos os componentes, até que toda a aplicação esteja atualizada.

Exemplo real

Vamos considerar um exemplo de uma plataforma de e-commerce que usa o modelo de deploy Blue/Green para atualizar sua aplicação sem interrupções.

Suponha que a nossa plataforma seja composta por três componentes principais:

  • Componente 1: Frontend: responsável pela apresentação da interface do usuário.
  • Componente 2: Servidor de banco de dados: responsável pelo armazenamento e recuperação dos dados da aplicação.
  • Componente 3: API: responsável por fornecer acesso às funcionalidades da aplicação.

Nesse exemplo, a atualização da versão 1.0 para a versão 2.0 é realizada utilizando o modelo Blue/Green.

// Código comentado em Python

blue_green_config = {
    "server_blue": {"port": 8000},
    "server_green": {"port": 8001}
}

routes = [
    "/frontend/v2",
    "/db/v2",
    "/api/v2"
]

def blue_green_deploy(routes):
    # Redirecionamento do tráfego para o servidor de teste (Blue)
    for route in routes:
        # Comentário: Redirecionar o tráfego para o servidor Blue
        print(f"Redirecionando {route} para server_blue")

    # Monitoramento da aplicação após a atualização
    monitor_performance(routes)

def monitor_performance(routes):
    # Avaliar se os componentes foram atualizados corretamente
    for route in routes:
        # Comentário: Verificar se o componente foi atualizado com sucesso
        print(f"Avaliando {route}")

blue_green_deploy(routes)

Boas práticas

Priorizar a monitorização e teste contínuos

  • Realize testes de load para garantir que a aplicação possa lidar com o tráfego adicional.
  • Implemente ferramentas de monitoramento de desempenho, como métricas de resposta e taxa de erro, para garantir que a aplicação esteja funcionando corretamente.
  • Implemente um sistema de rollback rápido em caso de falha da atualização.

Utilizar uma estratégia de deploy incremental

  • Atualize apenas os componentes necessários, reduzindo o impacto na aplicação.
  • Utilize uma estratégia de deploy incremental para evitar problemas de concorrência.
  • Use um sistema de gestão de configuração para permitir a execução da atualização em diferentes ambientes.

Armadilhas comuns

Falha em testar as rotas

  • Fazer atualizações sem garantir que todas as rotas estejam funcionando corretamente.
  • Ignorar problemas de concorrência ou conflitos entre as atualizações dos componentes.

Sobrecarga no servidor de teste (Blue)

  • Falta de capacidade no servidor de teste, causando congestionamento do tráfego.
  • Não ajustar adequadamente os parâmetros da política de rotas para lidar com o aumento do tráfego.

Conclusão

Uma estratégia de deploy bem planejada é fundamental para garantir a estabilidade e confiabilidade da aplicação. Os principais pontos a considerar incluem a priorização da monitorização e teste contínuos, utilização de uma estratégia de deploy incremental e evitamento das armadilhas comuns como falha em testar as rotas e sobrecarga no servidor de teste.

Para implementar essas estratégias, é recomendável:

  • Implementar ferramentas de monitoramento de desempenho para garantir a aplicação esteja funcionando corretamente.
  • Utilizar uma gestão de configuração para permitir execução da atualização em diferentes ambientes.
  • Realizar testes de load para garantir que a aplicação possa lidar com o tráfego adicional.

Em termos de áreas relacionadas para aprofundamento, é recomendável explorar:

  • Tecnologias de deploy em nuvem como AWS e Azure
  • Ferramentas de monitoramento de desempenho como Prometheus e Grafana
  • Técnicas de deploy incremental como Blue/Green e Canary.

Referências

  • Fowler, M. Strategies for Deploying Software Systems. Disponível em: https://martinfowler.com/aps book/deployment.pdf. Acesso: 2024.
  • ThoughtWorks. Blue/Green Deployment. Disponível em: <https://www.thoughtworks.com/insights/blog/blue-green-deployment>. Acesso: 2024.
  • Google Cloud. Blue/Green Deployments with Kubernetes. Disponível em: https://cloud.google.com/kubernetes-engine/docs/how-to/bluegreen-deployments. Acesso: 2024.
  • 12factor.net. Deployments. Disponível em: <https://12factor.net/deployments>. Acesso: 2024.
  • OWASP. Application Security in the Cloud. Disponível em: https://owasp.org/www-pdf/2015/OWASP_Cloud_Computing_Top_10.pdf. Acesso: 2024.