tutorial servidores elastic ec2 aws application java-ee amazon-ec2 amazon-web-services amazon-rds amazon-ebs

java-ee - servidores - aws java tutorial



ConfiguraciĆ³n de Amazon Cloud para la aplicaciĆ³n web Java EE con MySQL (1)

No soy un experto en infraestructura, pero tengo algo de experiencia en AWS, y espero poder ayudar con al menos algunas de sus preguntas. Mi experiencia no me permite darte ningún consejo sobre el dimensionamiento de tu infraestructura, pero puedo ayudarte a asesorarte sobre el tipo de infra.
Antes que nada, definitivamente iría con EBS. Además de estar físicamente separado de su servidor de aplicaciones, también tiene alta confiabilidad y alta disponibilidad. Puedo decirte que me salvó un par de veces. Aunque dije que no le diría nada sobre el tamaño, no creo que necesite las 4 instancias adicionales de "tolerancia a fallos", pero tal vez podría mantener unas 2 instancias listas para despegar el tráfico, por las dudas.

En cuanto a su base de datos, definitivamente debe seguir adelante y usar RDS para MySQL (http://aws.amazon.com/rds/mysql/). Le proporcionan nodos preconfigurados, parches automáticos, copias de seguridad automáticas, replicación automática y escalamiento con un solo clic, a un precio pequeño (IMHO). Todas estas características están listas, listas para usar, para MySQL. También puede usar métricas y monitoreo, todo está incluido. RDS no le da unidades de computación, pero es una buena práctica mantenerlos separados en AWS. También puede tener una configuración con 4 nodos EC2 Tomcat + 2 nodos RDS. Es solo una cuestión de tamaño :)

Si ya ha leído acerca de Amazon Elastic Load Balancing, se ve perfecto para su solución. Puede conectar algunos nodos EC2 a cada uno de sus nodos ELB y olvidarse del equilibrio de carga. Simplemente funciona, y también puede configurar sesiones adhesivas si lo desea. Sin embargo, no sé cuántos nodos de ELB debe elegir, pero tenga en cuenta un problema: solo puede agregar nodos EC2 de la misma región geográfica (por ejemplo, costa este de EE. UU.) Al mismo ELB. No es posible equilibrar el tráfico entre, por ejemplo, un Tomcat en la costa oeste y otro en la costa este. Si decide distribuir sus nodos en varias regiones, deberá venir con otra solución LB fuera de Amazon.

Mi consejo final: seguir adelante con ELB + EBS EC2 + RDS. Simplificará mucho su monitoreo, implementación y mantenimiento, y el costo tiende a ser mucho más bajo. Probablemente esté más al tanto de la cantidad de cada tipo de nodo que necesitará, pero no dude en perderse, ya que es muy fácil actualizar o reducir su infraestructura en AWS.

En mi trabajo, necesito mover algunas aplicaciones Enterprise Java existentes a AWS. He revisado muchas páginas en aws.amazon.com y también busqué en Google lo suficiente. Además, he intentado analizar todas las preguntas relacionadas en stackoverflow. Todas estas cosas aclararon muchas cosas, sin embargo, todavía estoy teniendo cierta confusión. Aquí está nuestra estructura de aplicación:

  1. Es una aplicación basada en Spring que utiliza Spring MVC como su capa de presentación e interfaces Java simples y clases para el manejo de negocios y lógica de datos.
  2. MySQL se usa para la persistencia.

Entonces, la arquitectura de la aplicación es bastante simple. Sin embargo, la trampa es que tenemos que implementar muchas instancias de esta aplicación. Este conteo actualmente es 15 y puede ir más allá de 30. Un punto más es que todas estas instancias comparten una base de datos común.

Ahora esto es lo que debemos lograr trasladándonos a AWS:

  1. Mayor tolerancia a fallas para la aplicación. Recientemente nos enfrentamos a una falla de servidor / alimentación en un hosting dedicado que causó algunas horas de inactividad.
  2. Mayor rendimiento para todas las instancias de la aplicación en términos de tiempo de respuesta y rendimiento.
  3. Mayor tolerancia a fallas para MySQL. Las instancias de aplicaciones se interrumpieron recientemente en uno de nuestros servidores debido a algún hardware (disco duro) que básicamente provocó que MySQL se detuviera inesperadamente. Todo el sistema de archivos en el disco duro fue leído solo y causó el mal funcionamiento de las instancias de la aplicación alojadas en ese servidor.
  4. Obviamente, se reduce el costo total y la sobrecarga de la administración de la infraestructura.

Hasta donde puedo entender la infraestructura de AWS hasta ahora, esto es lo que necesitaríamos en AWS para nuestra configuración:

  1. 4 instancias, cada una alojando aproximadamente 10 instancias de aplicaciones, de algunas LINUX AMI basadas en EBS con Tomcat y MySQL instaladas en eso.
  2. Supongo que también necesitaríamos 1 instancia de tolerancia a fallas para cada una de esas 4 instancias que suman 8 instancias en total.
  3. Todas las instancias del servidor tendrían unos 160 GB de EBS.
  4. 4 direcciones IP elásticas
  5. 4 equilibradores de carga elásticos
  6. Otras cosas como instantáneas, etc.

Ahora aquí están mis preguntas:

  1. ¿De verdad necesito tener esa instancia de servidor adicional (para la tolerancia a fallas) para cada instancia de servidor principal, teniendo en cuenta que AWS hizo una copia de seguridad automática de EBS y proporcionaría a EBS nueva con los mismos datos en caso de falla de hardware?

  2. ¿Cómo compartiría la base de datos entre todas las instancias del servidor (4x2) en el escenario anterior? Una opción que estoy viendo es implementar la agrupación de MySQL entre esas instancias del servidor. Digamos que el clúster MySQL contendría 1 nodo de gestión, 3 nodos SQL y 4 nodos de datos. Sin embargo, en este caso, mantener el clúster sería una carga adicional para nosotros y esto puede no ser aceptado, ya que nos gustaría deshacernos de la administración de la infraestructura.

  3. ¿Debo tener un RDS en lugar de la base de datos y eliminar las instancias de MySQL de todos los servidores (4x2)? En caso afirmativo, ¿tendría que comprar instancias de RDS además de instancias de EC2 (creo que si necesito comprar instancias separadas para RDS, el costo de la infraestructura total aumentaría al menos en un 75%) o las instancias de RDS también brindan unidades de cómputo? para el desarrollo de aplicaciones, lo que reduce el número total de instancias para la implementación de aplicaciones?

  4. En el caso de la implementación de RDS, ¿realmente se necesitan instancias EC2 basadas en EBS? Si podemos, de alguna forma, eliminar el requisito de EBS de las instancias de EC2 con instancias de RDS, podemos reducir el costo total.

Cualquier ayuda sería apreciada y, por favor, avíseme si no estoy seguro de especificar mi problema y necesito más aclaraciones sobre algún punto.