O que são padrões de implantação?
- 5 minutos
Um padrão de implantação é uma maneira automatizada de distribuir sem problemas novos recursos de aplicativo para seus usuários. Um padrão de implantação apropriado ajuda você a minimizar o tempo de inatividade. Alguns padrões também permitem que você implemente novos recursos progressivamente. Dessa forma, você pode validar novos recursos com usuários selecionados antes de disponibilizar esses recursos para todos.
Nesta seção, você aprenderá sobre alguns padrões comuns de implantação. Você também aprenderá como o Serviço de Aplicativo do Azure ajudará a implementar o padrão escolhido pela equipe da Tailspin.
Reunião matinal
A equipe Tailspin está se sentindo bem. Seu pipeline acelera seu processo. A equipe tem um ambiente de desenvolvimento em que pode integrar o aplicativo Web a um banco de dados. Tanto Tim quanto Amita estão felizes por ter testes automatizados que simplificam seus trabalhos. Em geral, eles veem menos atrasos e menos bugs.
Mas há, como sempre, um problema. Vamos entrar na reunião da equipe, onde Tim está falando.
Tim: É tão difícil manter todos felizes. Irwin acha que leva muito tempo para lançar novos recursos. Não posso fazer nada até que a gerência aprove o lançamento e, no momento, não há nenhuma maneira suave de distribuir os recursos depois que eles dão o OK. O processo não é apenas longo, mas confuso. É manual e há tempo de inatividade. Todo o processo pode levar cinco dias. Sei que é muito tempo, mas o que devo fazer? Talvez se eu beber mais café, a solução virá até mim.
Andy: O café é essencial para uma solução eficaz de problemas, sem dúvida.
Acho que a solução que precisamos é de um bom padrão de implantação. Um padrão de implantação é uma forma automatizada de fazer a substituição. É como movemos o software do estágio final de pré-produção para a produção ao vivo.
Escolher o padrão certo definitivamente o ajudaria, como minimizando o tempo de inatividade. Outra vantagem de um padrão de implantação é que ele nos dá a chance de executar testes que realmente devem acontecer na produção.
Andy começa a escrever no quadro branco.
Aqui estão as possibilidades que devemos considerar:
- Implantação blue-green
- Versões canário.
- Alternâncias de funcionalidades
- Inicializações escuras
- Teste A/B
- Implantação de exposição progressiva
Vamos discutir brevemente cada padrão.
Implantações azul-verde
Uma implantação azul-verde reduz o risco e o tempo de inatividade executando dois ambientes idênticos. Esses ambientes são chamados de azul e verde. A qualquer momento, apenas um dos ambientes está ativo. Uma implantação azul-verde normalmente envolve um roteador ou balanceador de carga que ajuda a controlar o fluxo de tráfego.
Digamos que o azul esteja ativo. Enquanto preparamos uma nova versão, fazemos nossos testes finais no ambiente verde. Depois que o software estiver funcionando no ambiente verde, basta alternar o roteador para que todas as solicitações de entrada acessem o ambiente verde.
A implantação azul-verde também nos dá uma forma rápida de fazer uma reversão. Se algo der errado no ambiente verde, basta mudar o roteador de volta para o ambiente azul.
Versões canário.
Uma versão canário é uma forma de identificar possíveis problemas cedo, sem expor todos os usuários ao problema. A ideia é que exponhamos um novo recurso a apenas um pequeno subconjunto de usuários antes de disponibilizá-lo para todos.
Em uma versão canário, monitoramos o que acontece quando liberamos o recurso. Se a versão tiver problemas, aplicaremos uma correção. Depois que comprovarmos que a versão canário é estável, a moveremos para o ambiente de produção real.
Alternadores de funcionalidades
Use alternâncias de funcionalidades para "virar uma chave" no runtime. Podemos implantar novos softwares sem expor nenhuma outra funcionalidade nova ou alterada para nossos usuários.
Nesse padrão de implantação, Clara e eu criamos recursos por trás de uma alternância. Quando ocorre uma versão, o recurso está "desativado" para que ele não afete o software de produção. Dependendo de como configurarmos a alternância, podemos virar a chave para “ativado” e expor o recurso conforme o desejado.
Por exemplo, poderíamos expor o recurso primeiro a alguns usuários para ver como eles reagem. Esse exemplo aleatório de usuários vê o recurso. Ou poderíamos simplesmente deixar o recurso ir ao ar para todos.
Mas esse padrão de implantação pode beneficiar Mara e mim mais do que qualquer outra pessoa. A grande vantagem do padrão de alternâncias de funcionalidades é que ele ajuda a evitar a ramificação excessiva. Mesclar branches pode ser doloroso.
Inicializações escuras
Uma inicialização escura é semelhante a uma versão canário ou a mudar uma alternância de funcionalidades. Em vez de expor um novo recurso a todos, em um lançamento escuro, lançamos o recurso para um pequeno conjunto de usuários.
Esses usuários não sabem que estão testando o recurso para nós. Nós nem realçamos o novo recurso para eles. É por isso que é chamado de lançamento escuro. O software é liberado gradual ou discretamente para os usuários para que possamos obter comentários e testar o desempenho.
Teste A/B
O teste A/B compara duas versões de uma página da Web ou aplicativo para determinar qual delas tem um desempenho melhor. O teste A/B é como um experimento clássico.
Em testes A/B, mostramos aleatoriamente aos usuários duas ou mais variações de uma página. Em seguida, usamos a análise estatística para decidir qual variação tem melhor desempenho para nossas metas.
Implantação de exposição progressiva
A implantação de exposição progressiva às vezes é chamada de implantação baseada em anel. É outra maneira de limitar como as alterações afetam os usuários, garantindo que essas alterações sejam válidas em um ambiente de produção.
Os anéis são basicamente uma extensão da fase canário. A própria versão canário é lançada em uma fase para medir o efeito. Adicionar outro anel é essencialmente a mesma ideia.
Em uma implantação baseada em anel, implantamos as alterações em clientes tolerantes a riscos primeiro. Em seguida, redistribuímos progressivamente para um conjunto maior de clientes.
Implementação da implantação azul-verde
Andy olha para Tim.
Andy: Isso é muito, eu sei. Você quer ter algum tempo para pensar sobre isso? Ou você e eu poderíamos...
Tim: Azul-verde.
Todos na sala riem.
Clara: Isso é o café falando?
Tim: As alternâncias de recursos envolvem uma alteração na forma como você e o Andy funcionam. Vamos fazer uma coisa de cada vez. Os métodos que expõem gradualmente uma funcionalidade exigem análise estatística ou alternâncias de funcionalidades.
Uma implantação azul-verde é algo que posso controlar. Alternar um roteador é simples. É fácil e parece seguro. E em uma implantação azul-verde, o gerenciamento tem um ambiente para avaliar. Quando eles dão o OK, podemos facilmente mudar. Vamos começar por aí.
Então, a pergunta é: como implementamos uma implantação azul-verde em nosso pipeline?
O que são slots de implantação?
Andy: Como estamos usando o Serviço de Aplicativo do Azure, podemos aproveitar os slots de implantação. Os slots de implantação executam aplicativos que possuem seus próprios nomes de host.
Sei que ainda não estamos prontos para implantar o site do Space Game para produção como parte do pipeline automatizado. Mas, como um teste, podemos adicionar um slot de implantação ao nosso ambiente de preparo.
Em vez de configurar um balanceador de carga ou um roteador, podemos apenas adicionar um segundo slot à instância do Serviço de Aplicativo que usamos em nosso ambiente de preparo existente. Podemos chamar o slot primário de azul e o slot secundário de verde.
Dessa forma, podemos implantar novos recursos sem nenhum tempo de inatividade. Trocamos um aplicativo e sua configuração entre os dois slots de implantação. Basicamente, estamos trocando os endereços IP dos dois slots.
Tim: Eu gosto disso! Você pode chamar essa variação de implantação azul-verde em uma implantação sem tempo de inatividade.
Paulo: Ótimo! Tim e eu trabalharemos na implementação desse padrão de implantação. Todos nós podemos nos reunir mais tarde para ver os resultados.
Recomendações para usar sinalizadores de recurso
Os sinalizadores de recurso foram um dos métodos de cadência de versão que a equipe considerou. A equipe decidiu não usar feature flags, mas muitas pessoas os consideraram úteis. Esta seção fornece mais informações sobre os sinalizadores de recurso.
Os sinalizadores de recursos, em algum momento chamados de alternâncias de recursos, permitem que você altere como um sistema funciona sem alterar o código. Essas flags permitem que você envie um novo código para seu ramo principal de desenvolvimento e tenha o código implantado, mas não necessariamente funcional. Os sinalizadores geralmente são implementados como o valor das variáveis que controlam a lógica condicional.
Imagine que sua equipe está trabalhando na filial de desenvolvimento central de um aplicativo bancário. Você decidiu fazer todo o trabalho na ramificação principal para evitar operações de mesclagem confusas mais tarde. Mas você enfrenta um problema. Você está alterando substancialmente os cálculos de juros, e as pessoas dependem desse código todos os dias. Pior, as alterações levarão semanas para serem concluídas. Você não pode deixar o código principal quebrado por tanto tempo.
Nesse cenário, um sinalizador de recurso pode ser uma boa solução. Você pode alterar o código para que os usuários que não têm o sinalizador de recurso ativado possam continuar usando o código de cálculo de juros original. Enquanto isso, sua equipe define o sinalizador de recurso, para que possa ver o código que está alterando.
Outro tipo de sinalizador de recurso é um sinalizador de versão. Imagine que depois de concluir o trabalho no código de cálculo de juros, você deseja experimentá-lo antes de liberá-lo publicamente. Você tem um grupo de usuários que estão bem posicionados para lidar com o novo código e quaisquer possíveis problemas. Você permitirá que eles experimentem o recurso primeiro. Você altera a configuração para que ele também tenha o sinalizador de recurso definido e possa testar o novo código. Se ocorrerem problemas, você poderá desabilitar rapidamente o sinalizador.