5

Nel mio lavoro ho bisogno di spostare alcune applicazioni Enterprise Java esistenti in AWS. Ho esaminato molte pagine su aws.amazon.com e anche su Google. Inoltre, ho cercato di passare attraverso tutte le domande relative a StackOverflow. Tutte queste cose hanno chiarito molte cose, tuttavia, sto ancora avendo una certa confusione. Ecco la nostra struttura applicativa:Configurazione Amazon Cloud per l'app Web Java EE con MySQL

  1. Si tratta di un'applicazione basata su Spring che utilizza Spring MVC come livello di presentazione e semplici interfacce e classi Java per la gestione della logica aziendale e dei dati.
  2. MySQL viene utilizzato per la persistenza.

Quindi, l'architettura dell'applicazione è abbastanza semplice. Tuttavia, il problema è che abbiamo bisogno di distribuire molte istanze di questa applicazione. Questo conteggio è attualmente 15 e può andare oltre 30. Un altro punto è che tutte queste istanze condividono un database comune.

Ora qui è quello che abbiamo bisogno di ottenere spostando a AWS:

tolleranza ai guasti
  1. Superiore per l'applicazione. Recentemente abbiamo affrontato un problema di server/alimentazione in hosting dedicato causando alcune ore di inattività.
  2. Prestazioni più elevate per tutte le istanze dell'applicazione in termini di tempo di risposta e velocità effettiva.
  3. Tolleranza di errore superiore per MySQL. Recentemente, le istanze dell'applicazione sono cadute su uno dei nostri server a causa di alcuni componenti hardware (Hard Drive) che hanno praticamente causato l'arresto imprevisto di MySQL. L'intero file system sul disco rigido è andato in sola lettura causando il malfunzionamento delle istanze dell'applicazione ospitate su quel server.
  4. Ovviamente riducendo il costo totale e il sovraccarico della gestione dell'infrastruttura.

Per quanto io sono in grado di capire l'infrastruttura AWS fino ad ora, ecco quello che ci sarebbe bisogno di AWS per la nostra messa a punto:

  1. 4 casi, ciascuno di hosting circa 10 casi di applicazione, di alcuni EBS LINUX AMI basato su Tomcat e MySQL.
  2. Sto supponendo che avremmo anche bisogno di 1 istanza per tolleranza di errore per ognuna delle 4 istanze per un totale di 8 istanze in tutto.
  3. Tutte le istanze del server hanno circa 160 GB di EBS.
  4. 4 Elastic IP
  5. 4 Elastic Load Balancer
  6. altre cose come un'istantanea ecc

Ora qui sono le mie domande:

  1. ne ho veramente bisogno di avere tale istanza del server in più (per tolleranza di errore) per ogni istanza del server principale, considerando che EBS viene automaticamente sottoposto a backup da AWS e fornirebbe nuovi EBS con gli stessi dati in caso di errore hardware?

  2. Come posso condividere il database tra tutte le istanze del server (4x2) nello scenario sopra? Un'opzione che sto vedendo è quella di implementare il clustering MySQL tra quelle istanze del server. Diciamo che il cluster MySQL dovrebbe contenere 1 nodo di gestione, 3 nodi SQL e 4 nodi dati.Tuttavia, in questo caso la manutenzione del cluster rappresenterebbe un ulteriore sovraccarico per noi e questo potrebbe non essere accettato poiché vorremmo sbarazzarci della gestione dell'infrastruttura.

  3. Devo avere RDS invece per il database e rimuovere istanze MySQL da tutte le estensioni del server (4x2)? In caso affermativo, avrei bisogno di acquistare istanze RDS oltre alle istanze EC2 (penso che, se devo acquistare istanze separate per RDS, il costo dell'infrastruttura totale aumenterebbe almeno del 75%.) Oppure le istanze RDS forniscono anche unità di calcolo per lo sviluppo di applicazioni riducendo così il numero totale di istanze per l'implementazione dell'applicazione?

  4. In caso di implementazione RDS, è davvero necessario disporre di istanze EC2 basate su EBS? Se riusciamo a rimuovere il requisito EBS dalle istanze EC2 con istanze RDS, possiamo ridurre il costo totale.

Qualsiasi aiuto sarebbe apprezzato e per favore fatemi sapere se non mi è chiaro per specificare il mio problema e bisogno di maggiori chiarimenti per ogni punto.

risposta

3

Non sono esperto di infrastrutture, ma ho un po 'di esperienza su AWS e spero di poterti aiutare con almeno alcune delle tue domande. Il mio background non mi consente di darti alcun consiglio sul dimensionamento della tua infrastruttura, ma posso aiutarti a consigliarti sul tipo di infrastruttura.
Prima di tutto, vorrei assolutamente andare con EBS. Oltre ad essere fisicamente separato dal server delle applicazioni, ha anche alta affidabilità e alta disponibilità. Posso dirti che mi ha salvato un paio di volte. Anche se ho detto che non ti avrei detto nulla sul dimensionamento, non penso che ti occorrerebbero 4 istanze di tolleranza agli errori extra, ma forse potresti tenere alcune 2 istanze pronte a decollare, per ogni evenienza.

Per quanto riguarda il DB, è assolutamente necessario andare avanti e utilizzare RDS per MySQL (http://aws.amazon.com/rds/mysql/). Forniscono nodi preconfigurati, auto-patching, auto-backup, auto-replicazione e ridimensionamento con un solo clic, ad un prezzo piccolo (IMHO). Tutte queste funzionalità sono pronte, immediatamente disponibili, per MySQL. Puoi anche utilizzare le metriche e il monitoraggio, è tutto incluso. RDS non ti dà unità di calcolo, ma è una buona pratica tenerle separate in AWS. È anche possibile eseguire una configurazione con 4 nodi Tomcat EC2 + 2 nodi RDS. È solo una questione di dimensionamento :)

Se hai già letto su Amazon Elastic Load Balancing, sembra perfetto per la tua soluzione. È possibile collegare alcuni nodi EC2 a ciascuno dei nodi ELB e dimenticare il bilanciamento del carico. Funziona e puoi anche configurare sessioni adesive se lo desideri. Non so, però, quanti nodi ELB dovresti scegliere, ma tieni presente un problema: puoi aggiungere solo nodi EC2 dalla stessa area geografica (ad es. Costa est degli Stati Uniti) allo stesso ELB. Non è possibile bilanciare il traffico tra, ad esempio, un Tomcat nella West Coast e un altro nella East Coast. Se si sceglie di distribuire i nodi su più regioni, sarà necessario venire con un'altra soluzione LB al di fuori di Amazon.

Il mio consiglio finale: andare avanti con ELB + EBS-based EC2 + RDS. Semplificherebbe molto il vostro monitoraggio, implementazione e manutenzione, e il costo tende ad essere molto più basso. Probabilmente siete più consapevoli di quanti tipi di nodi avete bisogno, ma non abbiate paura di perdervi, perché è molto facile potenziare o ridimensionare le vostre informazioni su AWS.

+0

Avrei bisogno di almeno 4 server per la tolleranza d'errore perché avremmo 4 IP diversi per 4 server principali in quanto ospitano istanze diverse di applicazione e quindi ogni server avrebbe bisogno di almeno un'istanza per la tolleranza d'errore o nessun errore tolleranza a tutti. E per RDS sto anche considerando 2 piccole istanze con implementazione Multi-AZ. – vikas

+0

Va bene. Poiché sembra che ci siano 4 indirizzi IP "esterni", è possibile configurare 4 istanze di ELB (bilanciamento del carico elastico), una delle quali ospita ciascun indirizzo IP, e quindi aggiungere tolleranza di errore su richiesta, aggiungendo più di un nodo di elaborazione EC2 a ciascun ELB secondo necessità.Per quanto riguarda RDS, l'installazione sembra buona e Multi-AZ è sicuramente la soluzione giusta. Se la tua applicazione ha troppe letture di DB, puoi anche configurare alcune repliche di lettura. – Viccari

Problemi correlati