2010-04-14 9 views
14

Saluti a tutte le persone intelligenti qui intorno!Il cloud è pronto per un'applicazione Web Java Enterprise? Cerco un consiglio di hosting Java EE

Vorrei chiedere se è fattibile o una buona idea di distribuire un'applicazione web aziendale Java su un cloud come Amazon EC2. Più esattamente, sto cercando le opzioni di infrastruttura per un'applicazione che gestirà poche centinaia di utenti con sessioni lunghe ma senza CPU o memoria intensiva. Sto considerando server dedicati, server virtuali virtuali (VPS) ed EC2. Ho notato che esiste un progetto chiamato JBoss Cloud, quindi le persone stanno lavorando per abilitare tale implementazione, d'altra parte non sembra essere ancora maturo e non sono sicuro che il cloud sia pronto per questo tipo di applicazioni, che differiscono dalle tipiche applicazioni basate su cloud come Twitter. Consiglieresti di distribuirlo sul cloud? Quali sono i pro e i contro?

L'applicazione è un'applicazione Web Java EE 5 la cui funzione principale è consentire agli utenti di comporre il proprio Prodotto personalizzato combinando le Parti disponibili. Utilizza bean di sessione stateless e stateful e JPA per la persistenza di entità in un RDBMS e recupera informazioni su Parti dal sistema di inventario della società tramite un servizio Web. A parte gli utenti esterni è utilizzato anche da pochi interni, che sono autenticati contro l'LDAP della società. L'applicazione dovrebbe gestire circa 300-400 utenti contemporanei che costruiscono il loro prodotto e dovrebbe essere ragionevolmente scalabile e disponibile sebbene queste qualità siano di importanza media in questa fase.

Ho proposto un'architettura composta da un firewall (FW) e un servizio di bilanciamento del carico che supporta sessioni adesive e https (nel Cloud questo verrà sostituito con il servizio di bilanciamento del carico elastico EC2 e FW sui server delle app. architettura il load-balancer sarebbe un HW), quindi due server di applicazioni cluster fisici combinati con server Web (in modo che se uno fallisce, un utente non perde il suo prodotto di lunga durata) e infine un server di database. Il server DB avrebbe bisogno di un'istanza di backup slave che possa sostituire l'istanza master in caso di errore. Questo dovrebbe fornire ragionevole disponibilità e tolleranza agli errori e fornire una buona scalabilità finché un singolo RDBMS può mantenere il carico, il che dovrebbe essere OK per un po 'di tempo perché la maggior parte delle operazioni viene eseguita nella memoria usando un bean stateful e solo occasionalmente memorizzato o recuperato dal DB e anche la quantità di dati è bassa. Una parte problematica potrebbe essere la dipendenza dal servizio web del sistema di inventario remoto, ma con un buon caching dei suoi output nell'applicazione dovrebbe essere anche OK.

Purtroppo ho solo una vaga idea delle risorse di sistema (dimensioni della memoria, numero e velocità di CPU/core) che una "applicazione Java EE media" per poche centinaia di utenti ha bisogno. La mia stima approssimativa e per lo più infondata basata sulle offerte Amazon attuali è che 1,7 GB e una singola "moderna CPU" a 2 core con velocità intorno a 2,5 GHz (l'istanza media a CPU alta) dovrebbero essere sufficienti per uno qualsiasi dei due server applicazioni (dal momento che possiamo gestire un carico più elevato provvedendo a provarne di più). In alternativa, prenderei in considerazione l'utilizzo dell'istanza di grandi dimensioni (64b, RAM da 7,5 GB, 2 core a 1 GHz)

Quindi la mia domanda è se una tale distribuzione nel cloud sia tecnicamente e finanziariamente fattibile o se i server dedicati/VPS siano una soluzione migliore opzione e se ci sono alcune esperienze del mondo reale con qualcosa di simile.

Grazie mille!/Jakub Santa

PS: ho trovato il JBoss EAP in a Cloud Case Study che dimostra che è possibile distribuire un'applicazione del mondo reale Java EE al cloud EC2, ma purtroppo non ci siamo nessun dettaglio per quanto riguarda la topologia, tipo di istanza, o qualsiasi cosa: - (

+0

Questo sarebbe più adatto per Serverfault.com –

+0

Grazie, Michael, non ero a conoscenza di questo server. Ho ripubblicato la domanda a Serverfault.com - http://serverfault.com/questions/132325/is-the-cloud-ready-for-an-enterprise-java-web-application-seeking-a-jee-hosting –

risposta

12

Sto servendo "poche centinaia di utenti" da una singola istanza EC2 ad alta CPU Media: nessun bilanciamento del carico, nessun server DB dedicato, niente fantasia.Inoltre sto usando alcuni servizi:

  • Elastic Block Store per i dati MySQL, binlogs MySQL e gli indici Lucene
  • S3 per la risorsa e archiviazione di backup, ovviamente, diversi cestini per ogni
  • SimpleDB metadati per le risorse
  • CloudFront per risorse - principalmente perché possiamo :)
  • Simple Queue Service per la messaggistica (utilizzato per accodare alcune attività in background)

Come ho detto, niente di particolare, almeno nell'ambiente cloud di Amazon. E tutto per meno di 200 $/mese. Per quanto riguarda i prezzi, dovresti fare attenzione però. Amazon ha fatto un buon lavoro nel nascondere i costi principali. Ad esempio, guardando il prezzo di CloudFront, potresti guardare a 0,15 $ per GB ma ignorare 0,01 $ per 10.000: è un prezzo ridicolmente basso per molte richieste, non è vero? Grande sorpresa: 2/3 del nostro costo CloudFront è per le richieste (circa 3 KB per richiesta). Le richieste di I/O per EBS sono una storia simile.

Come sarebbe estremamente semplice scalare (utilizzare un'istanza più grande, spostare DB su Relational Database Service) Suggerirei di iniziare con la stessa configurazione. Come hai detto, il lancio di più caselle è piuttosto semplice (supponendo che il tuo setup supporti l'aggiunta/rimozione di nodi al volo). Ciò rende la scelta della configurazione appropriata per tentativi ed errori facilmente fattibile - alcuni accurati test di carico dovrebbero fare il lavoro. Scegli qualcosa che funzioni per il carico previsto (più un po 'di energia extra) e cresca/riduci non appena hai i dati di produzione.

In conclusione: sì, è certamente possibile ospitare applicazioni Java EE su EC2 :)

Edit: come nota a margine: confrontando i prezzi di EC2 con un hosting tradizionale è confrontare le mele e le arance - almeno fino a poiché non si ottiene uno SLA per la propria rete, scalabilità quasi illimitata, nessun problema hardware, storage quasi illimitato e ridondante, diverse zone di disponibilità e una serie di servizi extra con esso. Se qualcuno ti dice che l'hosting tradizionale è più economico, potrebbe essere un amministratore di sistema ansioso per il suo lavoro;) Non fraintendermi, è più economico - ma si ottiene molto meno per un po 'meno denaro.

E a proposito, non sono in alcun modo affiliato con Amazon ... ma sento che dovrei essere ricompensato per essere un buon portavoce, non dovrei? : D

+0

Grazie mille per le preziose informazioni e la nota a margine sui prezzi! Mi hai aiutato molto. –

+0

@Jakub Sono felice di poterti aiutare. Un'altra cosa però: non appena inizi a utilizzare i servizi cloud di Amazon, è estremamente allettante lanciare EC2, S3 e altro in molte situazioni, solo perché è possibile. In modo tale che un altro rischio che è molto probabile iniziare costi di guida;) – sfussenegger

+0

E ancora una cosa: se si dispone di servizi che non richiedono il 100% di uptime, si potrebbe beneficiare di istanze spot. In genere paghi tariffe orarie simili a quelle delle istanze riservate, ma senza un pagamento iniziale - dovresti essere in grado di gestire il rischio (principalmente teorico) dei tempi di fermo. È molto adatto per l'elaborazione in background (ad esempio il numero crunch) in cui le attività vengono inviate a una coda SQS. Pubblichiamo i risultati su S3 e comunichiamo agli abbonati l'uso di XMPP PubSub (stiamo pensando di passare a SNS). Cose davvero interessanti :) – sfussenegger