In passato, ho lavorato in diversi ambienti. App desktop, giochi, contenuti incorporati, servizi Web, lavori da riga di comando, siti Web, creazione di report di database e così via. Tutti questi ambienti condividevano lo stesso tratto: non importava la loro complessità, non importava la loro dimensione, potevo sempre avere un sottoinsieme o una fetta dell'applicazione sulla mia macchina o in un ambiente di sviluppo da testare.
Oggi no. Oggi mi trovo in un ambiente il cui obiettivo principale è la scalabilità. La riproduzione dell'ambiente è proibitivamente costosa. Prendendo una fetta di ambiente, mentre plausibile (alcuni dei pezzi dovrebbero essere simulati o utilizzati in una modalità a istanza singola che non sono fatti per fare), un po 'sconfigge lo scopo poiché oscura la concorrenza e caricando che il sistema reale incontra. Anche un piccolo sistema "di prova" ha i suoi difetti. Le cose si comporteranno in modo diverso quando hai 2 nodi e quando hai 64 nodi.
Il mio solito approccio all'ottimizzazione (misurare, provare qualcosa, verificare la correttezza, misurare le differenze, ripetere) non funziona davvero qui poiché non riesco effettivamente a fare i passaggi 2 e 3 per le parti del problema che contano (solidità della concorrenza e prestazioni sotto caricare). Questo scenario non sembra unico però. Qual è l'approccio comune per svolgere questo tipo di attività in questo tipo di ambiente?
Ci sono alcune domande correlate:
Reproducing the environment is prohibitively costly.
- Quanto costa un bug di produzione che interrompe lo spettacolo? Che dire di 2 bug? In momenti imprevedibili (molto probabilmente quando la maggior parte dei tuoi utenti carica contemporaneamente il sistema). Pesalo contro il costo di creare un ambiente di riproduzione minimo: potresti scoprire che non è poi così proibitivo in termini di costi.
prohibitively costly
.