2011-01-28 19 views
13

Tenemos una aplicación Java EE (archivo EAR implementado en JBoss, MySQL, MongoDB) que nos gustaría implementar en una instancia de Amazon EC2. Tengo varias preguntas con respecto a las mejores prácticas de implementación.Implementación de la aplicación Java EE en Amazon EC2

  1. ¿Cuál es el más comúnmente usado Linux AMI la que podemos contar con una sólida implantación (hay tantas variantes de Linux, y no estoy seguro de qué IAM es de uso común, es que Fedora, CentOS, Red Hat , SUSE ...)
  2. ¿Cómo manejamos las actualizaciones de producción (modificaciones de archivos EAR o actualizaciones de esquema). ¿Hay alguna herramienta disponible para manejar esta instalación o reversión de estos cambios?
  3. ¿Qué tipo de capacidad de copia de seguridad de datos está disponible para la base de datos?
  4. ¿Debo confiar en Amazon RDS para el soporte de MySQL?
  5. ¿Cómo debo manejar el soporte para MongoDB?

Esta es la primera vez que estoy alojando una aplicación web y agradeceré algunas aportaciones sobre cómo administrar la instancia de producción.

Respuesta

4

¡Buena pregunta!

1) Recomiendo ir con la variante de Linux con la que se sienta más cómodo. Si tienes a alguien realmente interesado en CentOS, ve con eso. Una vez que haya seleccionado su AMI, tómela y personalícela configurando cómo la quiere. A continuación, guarde que AMI como base de diseño. Hará que el despliegue de nuevas máquinas sea mucho más fácil y salvará su tocino si EC2 se cae.

2) Las actualizaciones con EC2 pueden ser tres geniales. En lugar de actualizar un sistema en vivo, tome su AMI preconfigurado, actualícela y guárdela como myAMI-1.1 (o lo que sea). De esta forma, puede pasar al nuevo sistema casi instantáneamente Y volver a una versión anterior en caso de que algo se rompa. También puede realizar copias de seguridad de las instancias de DB en S3. Es barato a unos $ 0,10/GB/mes.

3) Depende de dónde almacene su base de datos. Si lo está almacenando en su instancia de EC2, tiene problemas. Las instancias de EC2 no tienen almacenamiento de persistencia. Entonces, si su máquina falla, pierde todo. No estoy familiarizado con el sistema Amazon DB, pero también debería consultar Elastic Block Store. Básicamente es un disco duro real al que puede escribir. Cuando desee actualizar su esquema, realice un volcado completo de DB a S3 y luego realice una actualización de su esquema real. Si algo sale mal, puedes sacar la versión anterior de S3.

4) & 5) Nunca los he usado, así que no puedo ayudarte.

9
  1. Acepto la respuesta de Mark Robinson: utilice la variante de Unix que le resulte más cómoda. Puede ser útil elegir uno con soporte decente en la nube. Para mi sitio, uso Ubuntu.
  2. Tengo una imagen común que es la base de cada implementación de versión que hago. Tengo www.misitio.com apuntando a una dirección IP elástica para poder decidir a qué instancia va. La imagen común tiene todo el software que necesito instalar (Postgres/Postgis/Tomcat/etc) pero las carpetas de datos de la base de datos y del servidor web y las conexiones simbólicas a las instancias de Elastic Block Store (EBS).

    Cuando llega el momento de realizar una implementación, comienzo una nueva instancia, congeló e imprime los volúmenes de EBS en la producción y crea nuevos volúmenes. Señalo mi nueva instancia en los nuevos volúmenes y luego instalo todo lo que necesito sobre eso.Una vez que haya probado todo con éxito, puedo cambiar el IP elástico para que apunte a la nueva instancia y todo sigue funcionando.

    Notaré que actualmente tengo la ventaja de que solo puedo modificar la base de datos; ningún usuario puede. Esto se convertirá en un problema en breve.

  3. Si utiliza el sistema de archivos XFS encima del volumen de EBS, puede decirle a XFS que congele el sistema de archivos (para que no ocurran actualizaciones) luego llame al api EC2 para tomar instantáneas del volumen y luego descongelar el sistema de archivos. El resultado es que la instantánea se toma rápidamente y se envía a S3. Tengo un script nocturno que hace esto.

  4. Si RDS parece que se adaptará a sus necesidades, entonces úselo. Amazon está construyendo muchas herramientas sólidas rápidamente y esto facilitará sus problemas de escalabilidad si tiene alguno.

  5. Lo siento, no tengo ni idea.

0
What is the most commonly used Linux AMI which we can rely on for a robust deployment (There are so many Linux variants, and I am not sure which AMI is commonly used, is it Fedora, CentOS, Red Hat, SUSE ...) 
How do we handle production upgrades (EAR file modifications or schema upgrades). Are there any tools which are available to handle this installation or rollback of these changes. 
What kind of data backup capability is available for the database? 
Should I rely on Amazon RDS for MySQL support? 
How should I handle support for MongoDB? 
  1. Cualquier Linux AMI hará el trabajo, lo que necesita es solamente un JRE. (suponiendo que no se requiera el trabajo de desarrollo). Si necesita supervisar el comportamiento de JVM, instale JConsole.
  2. La manera más fácil e indolora es hacer SSH en el directorio principal local, transferir el archivo de clase actualizado/archivo EAR (depende del número de cambios aplicados) y copiar y reemplazar en el directorio de implementación de Tomcat, reiniciar apache. (asegúrese de haber probado localmente antes de subirlo a la producción).
  3. Depende de la base de datos que esté utilizando, si está utilizando MySQL, simplemente haga una copia de seguridad programada que escriba en su directorio de inicio para que de vez en cuando pueda SSH y descargue una copia con fines de copia de seguridad.
  4. No me gustaría responder en Amazon RDS para compatibilidad con MySQL debido a 2 razones: MySQL es lo suficientemente pequeño y manejable, y también me gustaría tener un control completo de la base de datos y por qué pagar más cuando puede hacerlo usted mismo FOC?
  5. El uso de MongoDB debe estar alineado con el propósito de su aplicación y los beneficios que obtiene de eso. Le recomendaría que use MongoDB para la recuperación de datos estáticos como estado, país, área, etc ... donde MySQL se utilizará solo para datos de transacciones.
0

Si puede vivir con la implementación de su aplicación Java EE en TomEE en lugar de JBoss, Boxfuse hace lo que quiere.

Para que Java EE aplicación que, literalmente, sólo tiene que ejecutar (TomEE utiliza archivos de guerra en lugar de archivos para los oídos):

boxfuse run my-tomee-app-1.0.war -env=prod 

Esto hará

  1. Crear IAM que contiene TomEE y su aplicación lista para arranque
  2. Cree una IP elástica o ELB
  3. Cree un grupo de seguridad con los puertos correctos definidos
  4. Crear un grupo de auto-escala
  5. Lance su instancia (s)

Cualquier actualización posterior se llevará a cabo como una implementación sin tiempo de inactividad azul/verde.

Más información: https://boxfuse.com/blog/javaee-aws

Cuestiones relacionadas