Quão semelhantes devem ser os ambientes do PreProd e Prod?

10

Eu estive recentemente em um projeto e, durante o lançamento, percebemos que ele não funcionava na produção. Funciona em todos os outros ambientes, mas, como temos uma equipe de lançamento separada e não podemos configurar os servidores e os ambientes, não temos visibilidade da configuração neles.

Suspeitamos que o Prod tenha algumas permissões de usuário em sua conta ou configurações do IIS diferentes, por isso estamos trabalhando agora.

Então, acho que tudo isso foi uma experiência de aprendizado para mim e não quero que a mesma coisa seja repetida novamente. Eu gostaria de perguntar, quão diferentes devem ser esses ambientes? Eu sempre pensei que o PreProd deveria ser uma cópia idêntica ao ambiente Prod, usando uma cópia do mesmo banco de dados, usando uma cópia da mesma conta de usuário, deveria ser instalada nos mesmos servidores etc.

Mas até onde devo levá-lo? Se o site estiver voltado para o exterior, o PreProd deve estar voltado para o exterior? E se o site tiver componentes que não exijam uma conta de usuário ou senha para navegar? Ainda é bom expô-lo ao mundo exterior?

RoboShop
fonte
Em todos os lugares em que trabalhei, o Pre-Prod era uma cópia direta da produção, exceto que os bancos de dados teriam uma semana de duração.
Nickz
@ Nick: Eu não quero dizer apenas a base de código, quero dizer como toda a configuração de todo o ambiente.
RoboShop

Respostas:

6

Você certamente deve testar em um ambiente idêntico aos seus servidores de produção, na medida do possível. Caso contrário, você não está testando o que seus clientes usarão. Se nada mais, você precisa desse ambiente para testar quaisquer relatórios de erros.

Obviamente, haverá coisas que você não desejará idênticas - vêm à mente links para sistemas de pagamento, mas eles devem ser ridicularizados como se fossem reais . Também há coisas que você não pode replicar - a escala do sistema.

Convém testar por meio de um URL externo. Novamente, você está testando o que seus usuários verão. Além disso, o teste por meio de um URL externo usará a rede de maneira diferente do uso interno do sistema. Permissões (por exemplo) desempenharão um papel, assim como largura de banda disponível, firewalls etc. Todos os usuários terão acesso, mas você pulará se acessar o sistema diretamente.

Não vejo problemas com componentes que não exigem uma conta e senha. Se ele não precisa de uma senha, não é vital / sensível; se é sensível, por que não possui uma senha?

ChrisF
fonte
Uau, essa é uma resposta boba. Portanto, em seu ambiente de teste, se você fizer uma compra, ele deverá cobrar o cartão de crédito e enviar o que você comprou? Se o ambiente de produção consistir em 150 servidores, o ambiente de teste também deve? Eu diria "obviamente" que deve haver diferenças entre prod e test, mas não era óbvio para ChrisF.
Malvolio
@Malvolio - no. Eu não quis dizer isso. Eu estava pensando mais sobre os pontos levantados na questão com permissões, conexões etc.
ChrisF
11

Acho que a melhor prática para isso é a abordagem Blue Green Deployment, criada por Jez Humble e David Farley em seu livro Continuous Delivery e descrita por Martin Fowler em seu blog Blue Blue Deployment .

A premissa é muito simples. Do post de Martin Fowler:

Implantação Blue Green

A abordagem de implantação azul-verde ... [garante] que você tem dois ambientes de produção, o mais idêntico possível. A qualquer momento, um deles, digamos azul, por exemplo, está ativo. Ao preparar uma nova versão do seu software, você realiza seu estágio final de teste no ambiente verde. Depois que o software estiver funcionando no ambiente verde, você alterna o roteador para que todas as solicitações recebidas passem para o ambiente verde - o azul fica ocioso.

A implantação azul esverdeado também oferece uma maneira rápida de reverter - se algo der errado, você muda o roteador de volta ao seu ambiente azul.

Essa abordagem resolveria o problema de não ter ambientes idênticos de pré-produção e produção, além de otimizar sua estratégia de implantação.

Paddyslacker
fonte
1+ para o diagrama legal
Nickz 30/06
mmm não tem certeza de manter o banco de dados sincronizado. Seria difícil. E se a transação viesse através do seu servidor de pré-produção? Isso seria refletido na produção db?
RoboShop
Está escrito, isso é muito caro. Você precisa duplicar todo o hardware necessário para a produção ao vivo apenas para teste. Mas sim, diagrama legal.
Malvolio
11
TÉCNICA, n. Em um tribunal inglês, um homem chamado Home foi julgado por difamação por ter acusado seu vizinho de assassinato. Suas palavras exatas foram: "Sir Thomas Holt pegou um cutelo e golpeou o cozinheiro sobre a cabeça, de modo que um lado da cabeça caiu sobre um ombro e o outro lado sobre o outro ombro". O réu foi absolvido por instrução do tribunal, os juízes instruídos sustentando que as palavras não acusavam de assassinato, pois não afirmavam a morte do cozinheiro, sendo apenas uma inferência. - Ambrose Bierce
Malvolio
11
Sim, tecnicamente, não preciso duplicar o hardware, mas mesmo que você evite esse requisito brincando com a virtualização, você (a) alocará recursos, como largura de banda e CPU, para cada ambiente, o que teria o mesmo custo que duplicar o hardware ou (b) compartilhar recursos, o que significa que os problemas de teste podem prejudicar o sistema de produção.
Malvolio
3

Nosso ambiente final de pré-produção é simplesmente um dos servidores ativos retirados do balanceador de carga. Implementamos nossa compilação de pré-produção (que é basicamente idêntica à compilação ao vivo, exceto as seqüências de conexão do banco de dados e algumas outras alterações de configuração) e testamos isso. Se tudo der certo, implantamos o código ativo e, finalmente, se isso for aprovado, devolvemos o servidor ao balanceador de carga e implantamos a construção de produção nos servidores restantes, um por um.

FinnNk
fonte
1

Eles devem ser o mais semelhante possível, para que você possa identificar problemas em qualquer ponto do sistema, com a possível exceção de uma incapacidade de escalar. Se possível, a única diferença entre o ambiente de produção e o ambiente de pré-produção / preparação / teste seria o tamanho - eu esperaria que um ambiente de produção consistisse em muito mais máquinas em um ambiente de larga escala. Você deve até espelhar as dedicações das máquinas que possui, como servidores de banco de dados, servidores da Web etc.

No entanto, uma replicação exata pode não ser possível no seu orçamento atual. Quanto mais próximo estiver, mais eficaz será o teste e menos prováveis ​​os problemas surgirão durante um impulso à produção.

Eu adoto uma postura diferente da do ChrisF se esse ambiente for voltado para o público. Eu digo que não deveria ser. Eu optaria por executar uma cópia dos bancos de dados reais ou, pelo menos, uma cópia de um subconjunto dos bancos de dados ativos reais e de um ambiente voltado para dentro. Dessa forma, você pode testar dados reais e realistas e não se preocupar com falhas de segurança que levem a um vazamento. Obviamente, você pode limpar os dados, mas isso pode remover alguns "dados sujos" do ambiente que podem levar à descoberta de um defeito em um sistema ativo.

Thomas Owens
fonte
11
Se você estiver fazendo testes de segurança, concordo que não deve ser público, mas convém que seja para testes de aceitação final (por exemplo).
ChrisF
Esse é um ponto válido também. Normalmente, sou mais focado em segurança do que em usabilidade, mas se você deseja expor uma nova versão do seu sistema para testes de aceitação (talvez por clientes ou como parte de uma versão beta pública), então sim, um direcionamento público ambiente seria necessário.
Thomas Owens
Sim, costumávamos ter um concorrente que testava todas as suas coisas em um computador público por uma semana ou mais antes de ir ao ar. Eles nunca descobri características como nós sempre com a direita antes que eles fizeram ...
Malvolio
1

Em todos os lugares em que trabalhei em bancos, telecomunicações e etc., o pré-prod foi uma cópia direta da produção, exceto que o banco de dados teria uma semana ou mais. Foi um processo massivo para manter os dados no pré-produto, mas foi considerado essencial para as empresas nas quais trabalhei e que implementaram o pré-produto.

Na seção bancária da UA, o governo multa os bancos por falhas no serviço, por exemplo, caixas eletrônicos de sites e etc, caem a cada minuto. Não é incomum ouvir uma equipe de desenvolvimento / teste demitida por um incidente. O pré-prod não é para todas as empresas ou processos de desenvolvimento, mas é essencial para alguns.

Nickz
fonte
3
"Não é incomum ouvir sobre uma equipe de desenvolvimento / teste demitida por um incidente" - sim, isso ajudará. Os espancamentos continuarão até que o moral melhore.
Malvolio