2010-01-13 10 views
15

Spesso mi viene chiesto di eseguire il dimensionamento e la pianificazione della capacità per i nostri clienti. Quando i nostri clienti acquistano i nostri prodotti (fondamentalmente le applicazioni web J2EE), spesso chiedono quale hardware avranno bisogno per eseguire tali prodotti. Le nostre raccomandazioni spesso si traducono in acquisizioni hardware ad alto costo.Suggerimenti per il dimensionamento e la pianificazione della capacità e soluzioni pratiche

Finora, la migliore euristica che ho sviluppato è quella di confrontare le proiezioni di utilizzo (numero di utenti registrati e concorrenti a cui l'applicazione dovrebbe partecipare) con i dati raccolti nelle installazioni esistenti. Qualcosa come: Se l'installazione A è rivolta a 100 utenti simultanei con hardware X, l'installazione B avrà bisogno di hardware 2 * X per partecipare a 200 utenti simultanei.

Questo approccio, tuttavia, presenta una serie di problemi. I client utilizzano spesso diverse piattaforme hardware e software. Il set di prodotti che comprano da noi non è generalmente mai lo stesso e generalmente le parti dell'applicazione sono costruite su ordine per un cliente specifico. Tieni presente che le versioni del software stanno cambiando, ecc. E ci sono così tanti parametri che possono rendere molto difficile il compito del dimensionamento.

Ho studiato alcuni libri sull'argomento e alcuni propongono l'uso di modelli matematici complessi. Il numero di parametri che questi approcci richiedono come input (ad esempio la classificazione dettagliata delle caratteristiche dell'applicazione) mi fa pensare che questi siano difficilmente utili. L'hardware viene generalmente ordinato prima che vengano definiti anche i requisiti di base, per non parlare del fatto che questi varieranno durante lo sviluppo e il ciclo di vita delle applicazioni. Quindi, come si fa a dimensionare e pianificare la capacità? Qualsiasi consiglio e how-to apprezzato.

risposta

3

Se l'hardware deve essere ordinato prima che i requisiti di base siano definiti, beh, il meglio che si può fare è fare il ballparking della capacità guardando la base installata per un set di progetti simile (come si fa ora). Tieni traccia dell'esperienza dei tuoi clienti esistenti in termini di scalabilità e capacità in fase di crescita delle installazioni, e se disponi di una base sufficientemente grande, puoi probabilmente eseguire una curva approssimativa raggruppando progetti simili con hardware simile e considerando le esigenze di capacità. Guarda come cambiano le esigenze di capacità dei clienti esistenti durante la crescita e per ulteriori punti di dati.

Idealmente, l'acquisto HW/SW iniziale è per un'installazione pilota e si stabilisce il benchmark dell'impostazione pilota una volta che è attiva e si incontrano le specifiche. Utilizza questi risultati per progettare le esigenze di capacità per il passaggio dal pilota alla produzione. Ovviamente, questo richiede tempo nel programma da pilota a produzione per confrontare l'app, quindi ordinare e prendere in consegna l'attrezzatura. Ma fornirà una stima della capacità più accurata rispetto a fare tutto in anticipo.

0

Se l'applicazione è scalabile orizzontalmente in modo aggraziato, una stima iniziale approssimativa è ok come punto di partenza. Aggiungere o rimuovere caselle aggiuntive come richiesto dovrebbe essere facile una volta che l'app viene eseguita in produzione.

+0

Il problema è commerciale, non tecnico. I clienti devono avere un'idea dell'inizio e del TCO in anticipo. Inoltre, negoziare con i fornitori di hardware è più semplice se si conosce il prodotto esatto di cui si ha bisogno. Stimare troppo grande e il cliente è bloccato con HW di cui non ha bisogno; stimare troppo poco e hai sconvolto il suo budget, non avere una leva con il venditore ecc. – Dan

4

Non esiste una formula semplice o matematica per prevedere la scala nella descrizione che hai dato, se tu (o la tua azienda) fai sul serio allora il modo migliore è costruire un ambiente di test di scalabilità & dove puoi facilmente impostare & abbattere varie configurazioni del client e inviare il carico a loro per vedere come faranno. Poiché stai costruendo componenti personalizzati, un componente scritto male o un indice mancante può rovinare tutto, quindi avere un ambiente come questo è dove puoi stirare queste cose prima di dare al cliente. Una volta che si dispone di questo tipo di ambiente, è possibile aggiungere memoria & CPU ai server delle applicazioni & per vedere come l'applicazione viene ridimensionata.

Vorrei suggerire un ambiente VM in cui è possibile aggiungere facilmente la memoria della CPU & in base alle esigenze dell'applicazione, accoppiato con alcuni test di carico/scala esterni realistici utilizzando un servizio come watchmouse o browsermob.

Problemi correlati