2009-02-21 5 views
15

Ho sentito da varie fonti che Java EE è altamente scalabile, ma a me sembra che non si possa mai scalare un'applicazione Java EE al livello del motore di ricerca di Google o di qualsiasi altro sito web di grandi dimensioni.Perché Java EE è scalabile?

Mi piacerebbe sentire i motivi tecnici per cui è così scalabile.

+0

Mi piacerebbe vedere quelle "varie fonti" affermando che è scalabile. :) – cletus

+0

Sito Web di Sun: "Con semplicità, portabilità, scalabilità e integrazione legacy, la piattaforma J2EE è la piattaforma per le soluzioni aziendali". http://java.sun.com/j2ee/overview.html – Uri

+0

Bene, Sun non è affatto un avvocato imparziale. :) – cletus

risposta

23

Java EE è considerato scalabile perché se si considera l'architettura EJB ed è in esecuzione su un server delle applicazioni appropriato, include funzionalità per il cluster trasparente e consente l'utilizzo di più istanze dell'EJB per servire le richieste.

Se sei riuscito cose manualmente in plain-old-java, si dovrà capire tutto questo da soli, ad esempio aprendo le porte, la sincronizzazione dei membri, ecc

io non sono sicuro che si potrebbe definire di Google come un "grande sito web". Sarebbe come paragonare Internet alla LAN dell'ufficio. Java EE non è stato concepito per scalare a livello globale, motivo per cui siti come Amazon e Google utilizzano le proprie tecnologie (ad es. Con MapReduce).

Ci sono molti articoli che discutono dell'efficienza della scalabilità di Java EE. Ad esempio this

+0

Il documento citato è anche disponibile gratuitamente da http://www.cin.ufpe.br/~redis/middleware/brebner-j2se03.pdf – asmaier

+2

Dal riassunto del documento: abbiamo scoperto che la tecnologia J2EE è molto scalabile ... ** fino a il database dispone di risorse sufficienti per evitare che diventi un collo di bottiglia **. – asmaier

3

Si potrebbe osservare un'architettura scalabile dal punto di vista di ciò che fornisce il framework di base (come Java EE). Ma questo è solo l'inizio.

Progettare per un'infrastruttura scalabile è un'arte architettonica. È come l'arte della proiezione ... come si comporterà quando esploderà in modo reale. Le domande di base sono:

  • Dove Continuo comunemente accessibile roba così che, quando così tante persone stanno chiedendo, io non devo andare per esso tanti tempo (cache)?
  • Dove tengo le cose di ogni individuo in modo che quando ci sono così tante persone che hanno bisogno di materiale conservato, non avrò problemi a gestirle tutte.
  • Come ricordo cosa ha fatto una persona qui l'ultima volta che sono venuti qui, poiché potrebbero non tornare allo stesso nodo particolare che hanno visitato l'ultima volta.
  • Per quanto tempo dovrò attendere (bloccare) una procedura di lunga durata se così tante persone lo richiedono?

... questo genere di cose è oltre ciò che un framework può avvolgere. In altre parole, il framework potrebbe essere scalabile ma il prodotto è cablato troppo stretto per essere scalato.

Java EE, come framework è abbastanza scalabile, come la maggior parte dei moderni framework aziendali basati su microprocessori. Ma ho visto cose straordinarie (non in senso buono) costruite anche dal meglio di loro.

per una pletora di riferimenti, si prega di ricerca di Google per "Progettare per scalabilità"

1

I "scalabilità" cosa parla di "cosa farai quando l'applicazione non rientra in un singolo computer più?".

Le applicazioni scalabili possono crescere su più computer di uno.

noti che server di grandi dimensioni possono avere molto grandi applicazioni con molta memoria e un sacco di CPU - vedi http://www.sun.com/servers/highend/m9000/ o http://www-03.ibm.com/systems/i/hardware/595/index.html - ma di solito è più costoso di avere un sacco di piccoli server con l'applicazione si estende su di loro.

+0

In realtà, i mainframe sono meno costosi dei cluster di server PC sotto molti aspetti quando eseguono un calcolo straight-processing-over-cost. –

+0

Depends. Che scenario hai in mente? –

6

Ciò che rende scalabile Java EE è ciò che rende scalabile lo : separazione dei problemi. A mano a mano che le esigenze di elaborazione o di I/O aumentano, puoi aggiungere nuovo hardware e ridistribuire il carico in modo semitrasparente (per lo più trasparente per l'app, ovviamente meno per le scimmie di configurazione) perché i problemi isolati e separati non sanno o non importano se sono " ri sullo stesso hardware fisico o su diversi processori in un cluster.

È possibile rendere le applicazioni scalabili in qualsiasi linguaggio o piattaforma di esecuzione. (Sì, anche COBOL sugli antichi mainframe di System 370). Quali framework applicativi come Java EE (e altri, naturalmente - Java EE è praticamente unico al riguardo!) Ti danno la possibilità di facilmente (relativamente parlando) fai questo facendo molto del pesante sollevamento per te.

Quando la mia app Web utilizza, ad esempio, un bean per eseguire una logica di business, tale bean può trovarsi sullo stesso core della CPU, su un core diverso nella stessa CPU, su una CPU diversa interamente o, in casi estremi, forse anche attraverso il pianeta. Non lo so e, per la maggior parte, purché lo spettacolo sia lì, non mi interessa. Allo stesso modo, quando invio un messaggio sul bus dei messaggi per essere gestito, non so né mi interessa dove va quel messaggio, quale componente esegue l'elaborazione e dove si svolge tale elaborazione, sempre finché la performance rientra nel mio esigenze. Questo è tutto per le scimmie di configurazione. La tecnologia consente questo e gli strumenti sono in atto per valutare quali pezzi devono andare dove ottenere prestazioni accettabili mentre il sistema si dimensiona.

Ora, quando provo a consegnare tutto questo, parto subito dai problemi. Se non penso a tutto il proxy, la programmazione e la distribuzione e così in anticipo, quando la mia app si espande oltre i limiti della gestione di una singola macchina, ora ho delle grosse riscritture mentre sposto alcune delle applicazioni in un'altra casella. E poi ogni volta che le mie capacità crescono devo farlo ancora e ancora.

Se penso a tutto questo in anticipo, sto scrivendo un bel po 'di codice per ogni applicazione che fa piccole variazioni di tutte le stesse cose. I può codice cose in un modo scalabile, ma voglio fare questo ogni. dannato. tempo. Scrivo un'app?

Quindi, ciò che Java EE (e altri framework) portano in tavola è la piastra di prova pre-scritta per i requisiti comuni di rendere le applicazioni scalabili. Scrivere le mie app non garantisce che sarebbero scalabili, ma i framework rendono la scrittura di queste app scalabili molto più semplice.