Domanda

È una domanda complicata che mi è stata posta l'altro giorno ... Stiamo lavorando a un'applicazione di telefonia (SIP) piuttosto complessa con codice C ++ e PHP misto con database MySQL e diversi componenti open source.

Un ingegnere delle telecomunicazioni ci ha chiesto di stimare le prestazioni dell'applicazione (che non è ancora pronta). Ha detto "Bene, sai quanti pacchetti possono passare attraverso il kernel Linux al secondo, inoltre potresti sapere quanto è veloce la tua app, quindi dimmi quante chiamate passeranno attraverso le tue cose al secondo".

Mi sembra assurdo, dato che ci sono un milione di scenari che potrebbero accadere (beh, letteralmente ...)

Tuttavia ... c'è un modo per stimare le prestazioni dell'applicazione (conoscendo l'hardware su cui verrà eseguito, essere in grado di eseguire benchmark standard su di esso, ecc.) prima del test effettivo?

È stato utile?

Soluzione

Sicuramente puoi limitare il problema con limiti massimi (throughput massimo). Non c'è nulla di assurdo in questo. In realtà, non sapere che le cose indicano un approccio piuttosto casuale a un problema, specialmente nel mondo della telefonia.

Puoi risolvere tu stesso il problema: qual è il "lavoro" minimo? devi eseguire una transazione o qualsiasi unità di attività hai nella tua app?

Alcuni messaggi da e verso, alcune elaborazioni e un colpo al database, ad esempio? Ottenere informazioni sui singoli pezzi ti darà un'idea del rendimento più veloce possibile. Se carichi il sistema e riscontri prestazioni significativamente inferiori, puoi dedicare del tempo a capire dove stai perdendo la velocità effettiva con algoritmi inefficienti, ecc.

Modifica

Per fare questo esercizio devi conoscere tutti i passaggi che la tua app esegue per ogni caso d'uso. Quindi è possibile identificare il throughput massimo per ciascun caso d'uso. Dovresti assolutamente conoscere queste cose prima di rilasciare e andare in diretta.

Sto ignorando l'analisi del caso peggiore in quanto - come hai sottolineato - è un po 'più difficile.

Altri suggerimenti

Vedi Pianificazione della capacità per prestazioni Web: metriche, modelli e metodi . Ci sono anche alcuni strumenti che possono eseguire questo tipo di simulazione di eventi discreti:

Questa roba non è facile e gli strumenti commerciali ti costeranno. Il libro Pianificazione della capacità viene fornito con un CD con molti modelli di cartelle di lavoro di Excel ed esempi di modelli che possono iniziare rapidamente.

Buona fortuna :)

Se devi davvero rispondere a questa domanda potresti dire qualcosa del genere:

" Non lo so dalla cima della mia testa. Sono disposto a stimarlo per te, ma ci vorrà del tempo. Ovviamente l'accuratezza della mia risposta dipende da quanto sforzo (tempo di E.E.) ho messo nel calcolare la mia stima. Quanto tempo devo dedicare al calcolo del mio preventivo? & Quot;

Rimetti l'onere su di loro. Se vogliono davvero una risposta precisa, dovranno lasciarti costruire almeno alcune applicazioni di test in grado di simulare l'ambiente reale.

È possibile eseguire un picco per misurare le prestazioni. L'intero sistema potrebbe non funzionare ancora, ma sai come le parti sono intese per adattarsi insieme. In poche ore puoi montare qualcosa che fa lo stesso tipo di lavoro dell'app finale, su tutti i livelli, e usarla per misurare le prestazioni del tuo design.

Ricorda: i prototipi sono ampi, i picchi sono profondi.

Dovresti fare il preventivo. Un preventivo non ti darà la risposta giusta. Ti farà comunque pensare al problema. In questo momento sembra che il tuo codice e la speranza che tutto andrà bene. Oppure sei in modalità panico e senti di non avere tempo per le stime.

Passa un po 'di tempo a pensarci. Analizzare i casi d'uso importanti. Pensa al ricordo che potresti aver bisogno; pensare all'accesso al database; pensa all'accesso alla rete (locale e remoto). Questi influenzeranno le prestazioni del tuo sistema. Metti insieme tutto il team per farlo.

Misura regolarmente le prestazioni del tuo sistema durante lo sviluppo per questi importanti casi d'uso. Mock up componenti / altri sistemi, se necessario. Analizza i risultati. Come si confrontano con il tuo preventivo. Forse i componenti sono associati a memoria / database / rete. Forse hai bisogno di più memoria; meno accesso al database; domande più semplici; caching. Non è necessario apportare immediatamente queste modifiche. Tuttavia, sai come funziona il tuo sistema e cosa devi fare.

Risultato: meno brutte sorprese al test di sistema. Meno panico mentre incombe la data di uscita.

Puoi sicuramente pianificare in anticipo la capacità, ma la qualità della stima dipenderà dalla qualità dei dati disponibili.

La migliore stima è costruire il sistema in prova, eseguire carichi di lavoro simulati, quindi prevedere la capacità in funzione dei requisiti di prestazione e del carico di lavoro. Questi 3 formano uno spazio di previsione: dato 2 dei 3, puoi prevedere il terzo:

  1. Dati i requisiti di prestazione e la capacità (ad es. hardware) puoi calcolare il carico di lavoro che puoi gestire.

  2. Dati i requisiti di prestazione e il carico di lavoro, puoi calcolare la capacità (cioè l'hardware) di cui hai bisogno.

  3. Dato il carico di lavoro e la capacità, è possibile prevedere le prestazioni previste.

Questo è vero in alcuni domini, ma a meno che tu non sia un esperto in quel dominio, non ne hai idea. Ad esempio scrivo codice per controllare robot industriali. La velocità è limitata dal movimento del robot, non dalla velocità di esecuzione del codice. Sapendo quanto è veloce il robot e quanto deve andare lontano, possiamo fare stime abbastanza buone di "velocità". Non avrei idea di come stimare il tempo per la tua candidatura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top