No passado, eu trabalhei em uma variedade de ambientes. Aplicativos de desktop, jogos, itens incorporados, serviços da Web, trabalhos de linha de comando, sites, relatórios de banco de dados e assim por diante. Todos esses ambientes compartilhavam a mesma característica: independentemente de sua complexidade, tamanho e tamanho, eu sempre poderia ter um subconjunto ou fatia do aplicativo na minha máquina ou em um ambiente de desenvolvimento para testar.
Hoje eu não. Hoje me encontro em um ambiente cujo foco principal é a escalabilidade. A reprodução do meio ambiente é proibitivamente cara. Tomando uma fatia do ambiente, embora plausível (algumas peças precisariam ser simuladas ou usadas em um modo de instância única para as quais não foram feitas), meio que derrota o objetivo, pois obscurece a simultaneidade e o carregamento que o sistema real encontra. Até um pequeno sistema de "teste" tem suas falhas. As coisas se comportarão de maneira diferente quando você tiver 2 nós e quando você tiver 64 nós.
Minha abordagem usual à otimização (medir, tentar algo, verificar a correção, medir diferenças, repetir) não funciona realmente aqui, pois não consigo executar as etapas 2 e 3 com eficiência nas partes do problema que são importantes (robustez de concorrência e desempenho em carga). Este cenário não parece único. Qual é a abordagem comum para realizar esse tipo de tarefa nesse tipo de ambiente?
Existem algumas perguntas relacionadas:
Reproducing the environment is prohibitively costly.
- Quanto custa um bug de produção que interrompe a exibição? Que tal 2 bugs? Em momentos imprevisíveis (provavelmente quando você tem a maioria dos usuários colocando carga no sistema ao mesmo tempo). Pese isso contra o custo de configurar um ambiente de reprodução mínimo - você pode achar que não é tão proibitivamente caro, afinal.
prohibitively costly
.