2010-12-31 9 views
14

Suppongo che ci sia una buona ragione, ma non capisco perché a volte mettiamo per esempio 5 istanze aventi le stesse applicazioni web sullo stesso server fisico.Perché utilizziamo istanze di server di applicazioni multiple sullo stesso server

Ha qualcosa a che fare con l'ottimizzazione di un'architettura multiprocessore? Il limite massimo consentito della ram per JVM o qualcos'altro?

+3

Chi è questo "noi"? Non l'ho mai visto prima, non ha senso. – skaffman

+1

Un famoso sito di e-commerce con 10 milioni di visitatori unici al mese e 99.89% di disponibilità, e alcuni altri che ho visto –

+0

Quindi stai dicendo che ci sono 5 istanze di esattamente la stessa app Web in esecuzione su app server separati (e quindi JVM)? Sono tutti in esecuzione su macchine virtuali? –

risposta

17

Hmmm ... Dopo un lungo periodo di tempo sto vedendo ancora una volta questa domanda :)

Beh un più istanze JVM su una singola macchina risolve un sacco di problemi. Prima di tutto dobbiamo affrontare questo: sebbene JDK 1.7 sia in arrivo, molte applicazioni legacy sono state sviluppate usando JDK 1.3 o 1.4 o 1.5. E ancora una grande fetta di JDK è divisa tra di loro.

Ora alla tua domanda:

Storicamente, ci sono tre problemi principali che gli architetti di sistema sono affrontati implementando più JVM su una singola scatola:

  1. Garbage collection inefficiencies: Come dimensioni di heap crescono, i cicli di raccolta dei rifiuti - soprattutto per le collezioni principali - tendeva a introdurre ritardi significativi nell'elaborazione, grazie al GC a filettatura singola. Le JVM multiple combattono questo consentendo dimensioni di heap più piccole in generale e consentendo una certa misura della concorrenza durante i cicli di GC (ad es., Con quattro nodi, quando si entra in GC, ne vengono ancora elaborati altri tre).

  2. Resource utilization: Le JVM precedenti non sono state in grado di scalare in modo efficiente oltre quattro CPU o così. La risposta? Esegui una JVM separata per ogni 2 CPU nella scatola (il chilometraggio può variare a seconda dell'applicazione, ovviamente).

  3. 64-bit issues: Le JVM precedenti non sono state in grado di allocare dimensioni heap oltre il limite massimo di 32 bit. Ancora una volta, più JVM ti consentono di massimizzare l'utilizzo delle risorse.

  4. Availability: Un'ultima ragione per cui le persone a volte eseguono più JVM su una singola casella è per la disponibilità. Sebbene sia vero che questa pratica non risolve i problemi hardware, risolve un errore in una singola istanza di un server delle applicazioni.

tratto da (http://www.theserverside.com/discussions/thread.tss?thread_id=20044)

ho visto per lo più weblogic. Ecco un link per ulteriori letture:

http://download.oracle.com/docs/cd/E13222_01/wls/docs92/perform/WLSTuning.html#wp1104298

Spero che questo vi aiuterà.

+0

Grazie. Nel mio esempio era anche weblogic;) –

6

Immagino che tu ti stia riferendo al clustering delle applicazioni.

AFAIK, JVM generato con dimensioni heap molto grandi hanno problemi quando si tratta di garbage collection, anche se sono sicuro che da playing around with the GC algorithm and parameters è possibile ridurre il danno al minimo. Inoltre, le applicazioni cluster non hanno un singolo punto di errore. Se un nodo si interrompe, i nodi rimanenti possono continuare a servire i client. Questo è uno dei motivi per cui le "architetture basate su messaggi" sono adatte alla scalabilità. Ogni richiesta viene mappata su un messaggio che può quindi essere rilevato da qualsiasi nodo in un cluster.

Un altro punto sarebbe quello di servire più richieste simultaneamente nel caso in cui la tua applicazione sfortunatamente utilizzi la parola chiave sincronizzata con giudizio. Al momento disponiamo di un'applicazione legacy che ha un sacco di stato condiviso (sfortunatamente) e quindi la gestione simultanea delle richieste viene effettuata generando circa 20 processi JVM con un'unità di dispacciamento centrale che esegue tutto il lavoro di dispacciamento. ;-)

2

Ti suggerirei di utilizzare almeno JVM per NUMA. Se una singola JVM utilizza più di una regione NUMA (spesso una singola CPU), le prestazioni possono peggiorare significativamente, a causa di un significativo aumento del costo di accesso alla memoria principale di un'altra CPU.

Inoltre utilizzando più server possono permettere di

  • utilizzano diverse versioni di Java o il vostro server di applicazioni.
  • isolare diverse applicazioni che potrebbero interferire (non dovrebbero, ma potrebbero)
  • limitare i tempi di pausa GC tra i servizi.

EDIT: Potrebbe essere storico. Potrebbero esserci stati diversi motivi per avere JVM separate in passato, ma poiché non sai cosa fossero, non sai se si applicano ancora e potrebbe essere più semplice lasciare le cose come sono.

1

Un ulteriore motivo per utilizzare un'istanza più ampia è l'utilità.

Ad esempio, se più applicazioni diverse per più clienti, le istanze separate del server delle applicazioni per ciascuna applicazione possono semplificare la vita quando si deve eseguire un riavvio dell'appserver durante un rilascio.

0

Supponiamo di disporre di un host di configurazione medio e di istanza singola installata del server Web/app. Ora la tua applicazione diventa più popolare e il numero di visite aumenta di 2 volte. Cosa fai adesso?

Aggiungere un altro server fisico della stessa configurazione e installare l'applicazione e bilanciare il carico questi due host.

Questo non è fine vita per la vostra applicazione. La tua applicazione continuerà a diventare più popolare e quindi la necessità di ridimensionarla. Quale sarà la tua strategia?

  • continuare ad aggiungere più host della stessa configurazione
  • comprare una macchina più potente in cui è possibile creare server applicativi più logici

Quale opzione andrai lontano?

Farete analisi dei costi, che coinvolgerà fattori come-costi hardware effettivo, costo di gestione di questi server (costo di potere, lo spazio occupato nel data center) ecc

A quanto pare, si tratta che la decisione non è molto facile. E nella maggior parte dei casi è più conveniente avere una macchina più potente.

Problemi correlati