Implementación manual frente a Amazon Elastic Beanstalk

114

¿Cuáles son las ventajas que obtenemos al usar Elastic Beanstalk sobre la creación manual de una instancia EC2 y la configuración del servidor Tomcat y la implementación, etc. para una aplicación web típica de Java? ¿Son el equilibrio de carga, la supervisión y el ajuste de escala automático las únicas ventajas?

Supongamos que para mi aplicación web que utiliza la base de datos instalé la base de datos en la propia instancia EC2. Cuando se lleve a cabo la función de autoescalado, la base de datos se creará en la instancia recién creada o accederá a la base de datos que creé en la instancia maestra ... Si crea solo una réplica cuando se realiza el ajuste de escala automático, ¿cómo se sincronizará la información entre las instancias?

Elango
fuente

Respuestas:

144

Todas las cosas que mencionó, como el equilibrio de carga, la supervisión y el escalado automático, son definitivamente ventajas.

Sin embargo, debe pensarlo de esta manera: en una verdadera plataforma como servicio (PAAS), el objetivo es separar la aplicación de la plataforma. Como desarrollador, solo te preocupas por tu aplicación. La plataforma se le "alquila". Las "instancias" de la plataforma se actualizan, administran, escalan, equilibran, etc. automáticamente para usted. Simplemente sube tu archivo WAR y simplemente funciona (al menos en teoría).

EC2 por sí solo no es PAAS. Es más como IAAS ( Infraestructura como servicio ). Aún debe cuidar las instancias del servidor, instalar software en ellas, mantenerlas actualizadas, etc.

Elastic Beanstalk es un sistema PAAS. También lo son App Engine y Azure, entre muchos otros.

En un verdadero sistema PAAS, el DBMS es un componente separado de los servidores de aplicaciones web. La razón es obvia: el DBMS no se puede instalar en las instancias que se están utilizando para el servidor de aplicaciones porque, a medida que las instancias se crean y destruyen en función de su tráfico, ¡el DBMS se perderá! Tener el DBMS y el servidor de aplicaciones en la misma máquina / instancia generalmente no es una buena idea de todos modos.

En un sistema PAAS, el DBMS es un servicio separado. Para Amazon, sería Amazon RDS . Al igual que con Elastic Beanstalk, donde no tiene que preocuparse por el servidor de aplicaciones y simplemente carga su archivo WAR, con RDS, no tiene que preocuparse por el DBMS y simplemente implementa su (s) base de datos (s).

Elastic Beanstalk y RDS funcionan muy bien juntos, especialmente cuando se implementan en la misma zona de disponibilidad, donde la latencia sería muy baja.

Finalmente, usar Elastic Beanstalk no cuesta nada más que los recursos implementados (instancias EC2 y el balanceador de carga). Sin embargo, RDS no es barato y definitivamente sería más caro que usar una sola instancia EC2 tanto para el servidor de aplicaciones como para el DBMS.

stepanian
fuente
3
Bien dicho. Solo una adición: puede especificar una AMI personalizada para que sirva como base para la creación de cada instancia. Por lo tanto, puede, por ejemplo, personalizar una imagen de Apache con todas las configuraciones y aplicaciones necesarias y usarla como la AMI base (hay un campo ID de AMI personalizado en la configuración del entorno Beanstalk). Aún así, los datos generados en tiempo de ejecución se eliminarían en cada terminación de instancia. (¡y el equilibrador de carga lo hará!).
André Felipe
1
Una cosa que me tomó por sorpresa fue el hecho de que Elastic Beanstalk crea un equilibrador de carga para cada entorno que se implementa. Los equilibradores de carga no son realmente costosos de ejecutar, pero tienen aproximadamente el mismo costo que una microinstancia.
Ken Liu
@KenLiu, Load Balancer es más poderoso que una micro instancia.
BigSack
7
@BigSack: el punto que estaba tratando de hacer es que se supone que Elastic Beanstalk es gratuito, pero AWS no deja en claro que a cada entorno se le asignará un equilibrador de carga que le costará alrededor de $ 15 al mes. No estaba comparando con una micro instancia.
Ken Liu
Hasta donde yo sé, RDS tiene un precio casi equivalente al EC2 en estos días, mientras que proporciona mucha mayor utilidad, facilidad de mantenimiento y confiabilidad.
Justin Schier
38

Elastic Beanstalk hace más que solo equilibrar la carga, supervisar y ajustar la escala automáticamente.

1) Administra las versiones de la aplicación almacenando y administrando diferentes versiones de su aplicación, lo que le permite alternar fácilmente entre las diferentes versiones de sus aplicaciones.

2) Tiene el concepto de "entornos" para cada aplicación, lo que le permite implementar diferentes versiones de su aplicación en cada entorno. Esto es útil, por ejemplo, si desea configurar entornos de QA y DEV separados, y desea implementar fácilmente una compilación primero en DEV y luego implementar la misma versión de la aplicación en QA cuando su equipo de QA esté listo para la siguiente compilación.

3) Externaliza las propiedades importantes de configuración del contenedor (configuración de memoria de Tomcat, por ejemplo) a la consola y API de Elastic Beanstalk. Debido a esto, puede guardar fácilmente la configuración y copiarla entre entornos.

4) Vea los archivos de registro de la aplicación a través de la consola y automáticamente transfiera y archive los archivos de registro en S3. (Es cierto que esta característica es actualmente un poco débil).

Ken Liu
fuente
De todos modos, en mi concepto, creo que quiere entender sobre el rendimiento, lo que no me gusta en beanstalk, el mal funcionamiento en la implementación y los casos de desastre, y todo puede ser igual o mejor usando LAMBDA. Difícil, pero es una solución milagrosa para su alta disponibilidad.
Lucas Rodrigues Sena
Solo para agregar al último punto: puede enviar todos los registros de aplicaciones a CloudWatch.
SebaGra
6

Tenía una aplicación implementada tanto en EC2 dedicada (Nginx y Gunicorn) como en Beanstalk Environment (CentOS y Apache2).

Mis observaciones:

  • BeanStalk es Paas. Crear manualmente una instancia EC2 (IAAS) es como hacer todo desde cero, pero tiene un control sólido.

  • BeanStalk viene con CentOS y Apache (Httpd) por defecto. Puede elegir el sistema operativo en una instancia dedicada.

  • Estas cosas que me importaban

    • Hubo muchos errores 504 apareciendo en el entorno Beanstalk.
    • Fue difícil depurar cuando el servidor BeanStalk se bloqueó, ya que los registros tampoco se mostraban y no podían ingresar a la máquina. Esto es muy importante.
    • Instalar / configurar herramientas como Celery, Redis (es necesario ejecutar otro puerto), etc. en una instancia dedicada es mucho más fácil.
  • En mi caso, tuve que escalar el servidor (Beanstalk) para ejecutar la instalación de algunos paquetes (como pandoc). Estas cosas son más simples en Ubuntu.

  • Escalar es mucho más fácil en BeanStalk. La clonación de servidores es sencilla en BeanStalk.

  • Había tomado micro en ambos casos (dedicado y Beanstalk). Sentí que la micro instancia dedicada era mejor.

  • Despliegue automatizado en Beanstalk. Tuve que escribir scripts para automatizar lo mismo, lo cual está bien, ya que es solo una vez.

SuperNova
fuente