Amazon EC2
En este vídeo explicaremos a grandes rasgos un servicio llamado Amazon Elastic
Compute Cloud, o Amazon EC2. Para ello, vamos a volver a la cafetería. Los
empleados son parte de la metáfora del modelo cliente-servidor, en el que un
cliente envía una solicitud al servidor, el servidor trabaja y una vez tiene una
respuesta, se la da al cliente. Así es como funciona nuestra cafetería, pero la
misma idea se aplica en las empresas. Tu empresa, ya sea de sanidad, de
fabricación, de seguros o de transmisión de vídeo a millones de usuarios de todo el
mundo, también utiliza este modelo para entregar productos, recursos o datos a los
usuarios finales. Además, necesitarás servidores para dar soporte a tu negocio y
tus aplicaciones. Necesitas capacidad de computación en bruto para alojar las
aplicaciones y proporcionar la potencia de computación necesaria para tu actividad
empresarial. Cuando se trabaja con AWS, estos servidores son virtuales. Y los
servidores físicos que se utilizan para tener acceso a los servidores virtuales se
llaman Amazon EC2.
El uso de EC2 para computación es flexible, rentable y rápido comparado con tener
que administrar tus propios servidores en las instalaciones de un centro de datos.
Se necesita mucho tiempo y dinero para poner todo en marcha con los recursos
locales. Cuando tienes tu propia flota de servidores físicos, primero tienes que
investigar un montón para ver qué tipo de servidores quieres comprar y cuántos
necesitarás. Luego, compras ese hardware. Te toca esperar varias semanas o meses a
que un proveedor te entregue esos servidores. Cuando los recibes, los llevas a un
centro de datos, propio o alquilado, para instalarlos, almacenarlos, apilarlos y
conectarlos. Después, te aseguras de que estén protegidos, encendidos y listos para
su uso. Solo cuando ya hayas hecho todo eso, entonces podrás empezar a alojar las
aplicaciones en esos servidores. Lo peor es que, una vez comprados, te los tienes
que comer con patatas, los uses o no.
Con EC2 todo eso es mucho más sencillo, porque AWS ya ha hecho toda la parte
aburrida. AWS ya ha creado y protegido los centros de datos. AWS ya ha comprado los
servidores, los ha almacenado, los ha apilado y ya están listos para su uso en
línea. AWS opera constantemente una capacidad de computación inmensa. Y puedes usar
la que necesites cuando la necesites. Es tan fácil como solicitar las instancias de
EC2 que desees para lanzarlas e iniciarlas, listas para su uso en unos minutos. Una
vez que hayas terminado, puedes detener o terminar fácilmente las instancias de
EC2. No tienes que comprometerte a tener servidores que no necesites o no quieras.
Su uso puede variar considerablemente y solo pagarás por lo que utilices. Con EC2
solo pagas por instancias en ejecución, no por las detenidas o terminadas.
EC2 se ejecuta en máquinas de alojamiento físicas administradas por AWS con
tecnología de virtualización. Cuando activas una instancia de EC2, no usas
necesariamente un servidor físico completo solo para tu empresa, sino que compartes
el alojamiento con varias instancias más, también conocidas como máquinas
virtuales. Además, un hipervisor que se ejecuta en el servidor físico es
responsable de compartir los recursos físicos subyacentes entre las máquinas
virtuales. Compartir hardware subyacente de esta forma, se denomina tenencia
múltiple. El hipervisor es responsable de coordinar dicha tenencia y AWS la
administra. Además, aisla las máquinas virtuales entre sí, ya que comparten
recursos del servidor físico. Así, las instancias de EC2 están protegidas. Aunque
compartan recursos, una instancia de EC2 no sabe siquiera si hay otra en ese mismo
servidor físico. Están protegidas individualmente y separadas entre sí.
Por suerte, esto no es algo que haya que configurar manualmente, pero es importante
conocer el concepto de tenencia múltiple y saber a grandes rasgos cómo funciona.
EC2 proporciona gran flexibilidad y control. No solo es posible activar nuevos
servidores o desconectarlos como se nos antoje, sino que también tienes la
flexibilidad y el control de la configuración de esas instancias.
Al aprovisionar una instancia de EC2, puedes elegir el sistema operativo basado,
por ejemplo, en Windows o Linux. Puedes aprovisionar miles de instancias de EC2
bajo demanda combinando sistemas operativos y configuraciones para potenciar las
diferentes aplicaciones de tu empresa.
Además del sistema operativo, también configuras qué software deseas ejecutar en la
instancia. Ya sean tus propias aplicaciones empresariales internas, aplicaciones
web simples o complejas, bases de datos o software de terceros como paquetes de
software para empresas, tienes control total sobre lo que ocurre en esa instancia.
También se puede modificar su tamaño. Puedes comenzar con una instancia pequeña y,
cuando veas que la aplicación en ejecución está llegando a su límite en ese
servidor, darle a esa instancia más memoria y más CPU. Es lo que llamamos escalar
verticalmente una instancia.
Básicamente, puedes ampliar o reducir las instancias siempre que lo necesites.
También es posible controlar la configuración de la red en EC2. Por lo tanto, el
tipo de solicitudes que se envían al servidor, y si la accesibilidad es pública o
privada, es cuestión de lo que queramos tener.
Abarcaremos esto en detalle más adelante en el curso. Las máquinas virtuales no son
ninguna novedad, pero aprovisionar instancias de EC2 así de fácil permite a los
programadores y empresas innovar más rápido. Gracias a AWS, adquirir servidores es
mucho más sencillo y rentable con este modelo de computación como servicio. Hay
mucho más que aprender sobre EC2. Hemos hablado de la virtualización y los tipos de
software que pueden ejecutarse en una instancia de EC2. Pero también hay más
opciones que puedes configurar con EC2.
Amazon Elastic Compute Cloud (Amazon EC2)
Amazon Elastic Compute Cloud (Amazon EC2)(opens in a new tab) proporciona capacidad
de computación segura y redimensionable en la nube como instancias de Amazon EC2.
Imagina que eres responsable de la arquitectura de los recursos de la empresa y
tienes que dar soporte a nuevos sitios web. Con los recursos tradicionales en las
instalaciones, debes hacer lo siguiente:
-Gastar dinero por adelantado para comprar hardware.
-Esperar a que te entreguen los servidores.
-Instalar los servidores en el centro de datos físico.
-Realizar todas las configuraciones necesarias.
En cambio, con una instancia de Amazon EC2 puedes utilizar un servidor virtual para
ejecutar aplicaciones en la nube de AWS.
-Puedes aprovisionar y lanzar una instancia de Amazon EC2 en cuestión de minutos.
-Puedes dejar de usarla cuando hayas terminado de ejecutar una carga de trabajo.
-Solo pagas por el tiempo de computación que usas cuando una instancia se está
ejecutando, no cuando se detiene o finaliza.
-Puedes ahorrar costes pagando solo por la capacidad del servidor que necesites o
desees.
Cómo funciona Amazon EC2
Tipos de instancias de Amazon EC2
Ahora que conoces las instancias de EC2 y su importante papel en AWS, hablemos de
los distintos tipos de instancias de EC2 que hay disponibles. Volvamos a la
analogía de la cafetería. Recordarás que las instancias de EC2 son como los
empleados: atienden las solicitudes de los clientes. Si queremos tener una
cafetería que pueda atender a muchos clientes, probablemente necesitemos varios
empleados, ¿verdad? Y no pueden ser solo cajeros. También necesitamos a alguien que
sirva, que emplate, y tal vez a un experto que haga ese café con espuma que tanto
le gusta a los clientes. Como en cualquier empresa, hay una variedad de tareas que
desempeñar, y, a menudo, requieren habilidades distintas.
Si queremos que el negocio funcione con la máxima eficiencia, tenemos que
asegurarnos de que cada empleado tiene las habilidades necesarias para su labor.
Del mismo modo que nuestra cafetería tiene distintos tipos de empleados, AWS tiene
varios tipos de instancias de EC2 que puedes activar y desplegar en tu entorno de
AWS.
Cada tipo de instancia se agrupa en una familia de instancias y se optimiza para
ciertos tipos de tareas. Los tipos de instancias ofrecen distintas combinaciones de
CPU, memoria, almacenamiento y capacidad de red, y te otorgan la flexibilidad de
elegir la combinación de recursos adecuada para tus aplicaciones. Las diferentes
familias de instancias de EC2 son las siguientes: de uso general, optimizadas para
la computación, optimizadas para la memoria, de computación acelerada y optimizadas
para el almacenamiento.
Las instancias de uso general ofrecen un buen equilibro de recursos de computación,
de memoria y de redes. Además, se pueden utilizar para diversas cargas de trabajo,
como servicios web o repositorios de código.
Las optimizadas para computación son ideales para tareas de computación intensivas,
como servicios de juegos, la computación de alto rendimiento, en inglés HPC, e
incluso modelado científico.
Las instancias optimizadas para memoria también son adecuadas para tareas que
requieran un uso intensivo de dicho recurso. Las de computación acelerada son
ideales para cálculos con números de coma flotante, procesamiento de gráficos o
coincidencia de patrones de datos, ya que utilizan aceleradores de hardware.
Por último, las optimizadas para el almacenamiento son adecuadas para… ¿Lo
adivinas? Cargas de trabajo de alta exigencia para datos almacenados localmente.
Ahora, si lo aplicamos de nuevo a la cafetería, el cajero sería una instancia de
EC2 optimizada para memoria; los camareros, instancias optimizadas para la
computación; y, el experto en café, una instancia de computación acelerada. Esos
son los tipos de instancias de EC2.
Tipos de instancias de Amazon EC2
Los tipos de instancias de Amazon EC2(opens in a new tab) están optimizados para
distintas tareas. Al seleccionar un tipo de instancia, ten en cuenta las
necesidades específicas de tus cargas de trabajo y aplicaciones. Esto puede incluir
requisitos de capacidades de computación, memoria o almacenamiento.
[Link] instancias de propósito general proporcionan un equilibrio entre recursos de
computación, memoria y redes. Puedes usarlos para diversas cargas de trabajo, tales
como:
servidores de aplicaciones
servidores de juegos,
servidores de backend de aplicaciones empresariales,
bases de datos pequeñas y medianas
Supón que tienes una aplicación en la que las necesidades de recursos de
computación, memoria y redes son aproximadamente equivalentes. Puedes decidir
ejecutarlo en una instancia de propósito general porque la aplicación no requiere
optimización en ningún área de recursos única.
[Link] instancias de computación optimizada son idóneas para aplicaciones vinculadas
a la computación que se benefician de procesadores de alto rendimiento. Al igual
que las instancias de propósito general, puedes usar instancias de computación
optimizada para cargas de trabajo como servidores web, aplicaciones o juegos.
Sin embargo, la diferencia es que las aplicaciones de computación optimizada son
idóneas para servidores web de alto rendimiento, servidores de aplicaciones de uso
intensivo de computación y servidores de juegos dedicados. También puedes usar
instancias de computación optimizadas para cargas de trabajo de procesamiento por
lotes que requieran procesar muchas transacciones en un solo grupo.
[Link] instancias optimizadas de memoria están diseñadas para ofrecer un rendimiento
rápido para cargas de trabajo que procesan grandes conjuntos de datos en la
memoria. En computación, la memoria es un área de almacenamiento temporal. Contiene
todos los datos e instrucciones que necesita una unidad central de procesamiento
(CPU) para poder completar acciones. Para poder ejecutar un programa o una
aplicación del equipo, este debe cargarse desde el almacenamiento a la memoria.
Este proceso de precarga proporciona a la CPU acceso directo al programa
informático.
Supón que tienes una carga de trabajo que requiere que se carguen previamente
grandes cantidades de datos antes de ejecutar una aplicación. En este escenario,
puede tratarse de una base de datos de alto rendimiento o de una carga de trabajo
que implique procesar en tiempo real una gran cantidad de datos no estructurados.
En este tipo de casos prácticos, considera la posibilidad de usar una instancia con
optimización de memoria. Las instancias con optimización de memoria permiten
ejecutar cargas de trabajo con altas necesidades de memoria y obtener un excelente
rendimiento.
[Link] instancias de computación acelerada usan aceleradores de hardware o
coprocesadores para llevar a cabo algunas funciones de forma más eficiente que el
software que se ejecuta en las CPU. Algunos ejemplos de estas funciones incluyen
cálculos con números de punto flotante, procesamiento de gráficos y coincidencia de
patrones de datos.
En computación, un acelerador de hardware es un componente que puede acelerar el
procesamiento de datos. Las instancias de computación acelerada resultan idóneas
para cargas de trabajo como aplicaciones gráficas, streaming de juegos y streaming
de aplicaciones.
[Link] instancias optimizadas para el almacenamiento están diseñadas para cargas de
trabajo que requieren acceso de lectura y escritura alto y secuencial a grandes
conjuntos de datos en el almacenamiento local. Algunos ejemplos de cargas de
trabajo adecuadas para instancias optimizadas para el almacenamiento incluyen
sistemas de archivos distribuidos, aplicaciones de almacenamiento de datos y
sistemas de procesamiento de transacciones en línea de alta frecuencia (OLTP).
En computación, el término operaciones de entrada/salida por segundo (IOPS) es una
métrica que mide el rendimiento de un dispositivo de almacenamiento. Indica cuántas
operaciones de entrada o salida diferentes puede realizar un dispositivo en un
segundo. Las instancias optimizadas para el almacenamiento están diseñadas para
ofrecer decenas de miles de IOPS aleatorias y de baja latencia a las aplicaciones.
Puedes considerar las operaciones de entrada como datos introducidos en un sistema,
como los registros introducidos en una base de datos. Una operación de salida son
datos generados por un servidor. Un ejemplo de salida podría ser el análisis
llevado a cabo en los registros de una base de datos. Si tienes una aplicación que
tiene un alto requisito de IOPS, una instancia optimizada para el almacenamiento
puede proporcionar un mejor rendimiento en comparación con otros tipos de
instancias no optimizadas para este tipo de caso práctico.
CUESTIONARIO:
1.¿Qué tipo de instancia de Amazon EC2 es adecuado para las aplicaciones de
almacenamiento de datos?
Optimizadas para el almacenamiento
2.¿Qué tipo de instancia de Amazon EC2 equilibra los recursos de computación,
memoria y redes?
De uso general
3.¿Qué tipo de instancia de Amazon EC2 es idónea para las bases de datos de alto
rendimiento?
Con optimización de memoria
4.¿Qué tipo de instancia de Amazon EC2 ofrece procesadores de alto rendimiento?
De computación optimizada
Precios de Amazon EC2
Hemos hablado de los tipos de instancias de EC2, pero no de cuanto cuestan. No te
preocupes. Para EC2 tenemos varias opciones de facturación disponibles.
La primera, que es la que la mayoría de las personas conoce, es la de bajo demanda.
Con ella sólo pagas por el tiempo de ejecución de las instancias. Puede ser por
hora o por segundo, según el tipo de instancia y el sistema operativo que ejecutes.
Además, no requiere que te comprometas a largo plazo ni que hagas pagos
adelantados. Este tipo de precios suele estar indicado cuando comienzas y quieres
probar cargas de trabajo y validar que funcionan. No necesitas ningún contrato
previo ni comunicarte con AWS para usar los precios bajo demanda. También sirve
como referencia para ver tu uso medio, lo que nos lleva a la siguiente opción de
precios: Savings plans.
Savings plans ofrece precios bajos por usar EC2 a cambio de comprometerte a
realizar un uso constante en medio en dólares por hora durante un término de uno o
tres años. Este modelo de precios flexible puede ahorrarte hasta un 72% en el uso
de computación de AWS. Esto permite una reducción en el precio por uso de EC2 sea
cual sea la familia, distancias, tamaño, sistema operativo, tenencia o región de
AWS. Esto también se aplica al uso de AWS Fargate y AWS Lambda, que son opciones de
computación sin servidor de las que hablaremos en este curso.
Otra opción son las instancias reservadas. Son ideales para cargas de trabajo con
estado estable o con un uso predecible. Ofrecen un ahorro de hasta un 75% frente a
los precios bajo demanda. Puedes optar por un descuento al comprometerte a un
periodo de uno o tres años y pagarlo de cualquiera de estas tres maneras. Pago
total anticipado que se hace al formalizar el compromiso. Pago parcial anticipado,
que consiste en pagar una parte tras la formalización y sin pago inicial que
consiste en no pagar nada al principio.
Otra opción. Son las instancias de spot que te permiten solicitar capacidad de
computación extra de Amazon EC2 por hasta el 90% del precio bajo demanda. El
inconveniente es que AWS puede recuperar la instancia en cualquier momento que lo
necesite y te manda una advertencia de dos minutos para finalizar el trabajo y
guardar el estado. Puedes seguir después si es necesario. Si eliges instancias de
spot, asegúrate de que las cargas de trabajo se pueden interrumpir. Un ejemplo son
las cargas de trabajo por lotes.
Por último, tenemos hosts dedicados que son alojamientos físicos dedicados para tu
uso en EC2. Se suelen usar para cumplir ciertos requisitos de conformidad y la
tenencia de ese alojamiento no se comparte con nadie.
Precios de Amazon EC2
Con Amazon EC2, solo pagas por el tiempo de computación que usas. Amazon EC2 ofrece
diversas opciones de precios para distintos casos prácticos. Por ejemplo, si tu
caso práctico puede admitir interrupciones, puedes ahorrar con las instancias de
spot. También puedes ahorrar si te comprometes de forma anticipada y bloqueas un
nivel mínimo de uso con las instancias reservadas.
[Link] instancias bajo demanda son idóneas para cargas de trabajo irregulares a
corto plazo que no se pueden interrumpir. No se aplican costes iniciales ni
contratos mínimos. Las instancias se ejecutan continuamente hasta que las detienes
y solo pagas por el tiempo de computación que usas.
Algunos ejemplos de casos prácticos para instancias bajo demanda incluyen el
desarrollo y la prueba de aplicaciones, y la ejecución de aplicaciones que tienen
patrones de uso impredecibles. Las instancias bajo demanda no se recomiendan para
cargas de trabajo que duran un año o más porque estas cargas de trabajo pueden
experimentar un mayor ahorro de costes mediante instancias reservadas.
[Link] instancias reservadas son un descuento de facturación que se aplica al uso de
instancias bajo demanda en su cuenta. Hay dos tipos disponibles de instancias
reservadas:
instancias reservadas Standard
Instancias reservadas convertibles
Puedes adquirir instancias reservadas Standard y convertibles por un plazo de 1 o 3
años. Ahorrarás más costes con la opción de 3 años.
Instancias reservadas Standard: esta opción es adecuada si conoces el tipo y tamaño
de instancia de EC2 que necesitas para tus aplicaciones estables y en qué región de
AWS planeas ejecutarlas. Las instancias reservadas requieren que indiques los
siguientes requisitos:
Tipo de instancia y tamaño: Por ejemplo, [Link]
Descripción de la plataforma (sistema operativo): Por ejemplo, Microsoft Windows
Server o Red Hat Enterprise Linux
Tenencia: Tenencia predeterminada o tenencia dedicada
Tienes la opción de especificar una zona de disponibilidad para tus instancias
reservadas de EC2. Si haces esta especificación, obtendrás la reserva de capacidad
de EC2. Esto garantiza que la cantidad deseada de instancias de EC2 estará
disponible cuando las necesites.
Instancias reservadas convertibles: si necesitas ejecutar las instancias de EC2 en
diferentes zonas de disponibilidad o en diferentes tipos de instancias, las
instancias reservadas convertibles pueden ser la solución adecuada. Nota: Puedes
obtener un descuento mayor si necesitas flexibilidad para ejecutar tus instancias
de EC2.
Al final del plazo de una instancia reservada, puedes seguir utilizando la
instancia de Amazon EC2 sin interrupción. Sin embargo, se te cobrarán tarifas bajo
demanda hasta que lleves a cabo una de las siguientes acciones:
Terminar la instancia.
Adquirir una nueva instancia reservada que coincida con los atributos de la
instancia (familia de instancias y tamaño, región, plataforma y tenencia).
[Link] ofrece el modelo Savings Plans para varios servicios de computación, incluido
Amazon EC2. El modelo Savings Plans de instancias de EC2 reduce los costes de las
instancias de EC2 a cambio de comprometerte a un gasto por hora para una familia de
instancias y una región por un plazo de 1 o 3 años. Este compromiso de plazo supone
un ahorro de hasta el 72 % en comparación con las tarifas bajo demanda. Cualquier
uso hasta el momento del compromiso se cobra según la tarifa del modelo Savings
Plans con descuento (por ejemplo, 10 USD la hora). Cualquier uso que supere el
compromiso se cobrará según las tarifas bajo demanda habituales.
El modelo Savings Plans para instancias de EC2 es una buena opción si necesitas
flexibilidad en el uso de Amazon EC2 durante el plazo del compromiso. Tienes el
beneficio de ahorrar costes en la ejecución de cualquier instancia de EC2 de una
familia de instancias EC2 en una región seleccionada (por ejemplo, el uso de M5 en
Virginia del Norte), independientemente de la zona de disponibilidad, el tamaño de
la instancia, el sistema operativo o la tenencia. El ahorro con el modelo Savings
Plans para instancias de EC2 es similar al ahorro que ofrecen las instancias
reservadas Standard.
Sin embargo, a diferencia de las instancias reservadas, no es necesario especificar
por adelantado el tipo y el tamaño de instancia de EC2 (por ejemplo, [Link]), el
sistema operativo ni la tenencia para obtener un descuento. Además, no es necesario
comprometerse a un número determinado de instancias de EC2 durante un plazo de 1 o
3 años. Además, el modelo Savings Plans para instancias de EC2 no incluye ninguna
opción de reserva de capacidad de EC2.
Más adelante en este curso, podrás revisar AWS Cost Explorer, que puedes utilizar
para visualizar, comprender y administrar los costes y el uso de AWS a lo largo del
tiempo. Si estás barajando opciones de Savings Plans, puedes usar AWS Cost Explorer
para analizar tu uso de Amazon EC2 durante los últimos 7, 30 o 60 días. AWS Cost
Explorer también ofrece recomendaciones personalizadas para planes de ahorro. Estas
recomendaciones realizan una estimación de cuánto podrías ahorrar en los costes
mensuales de Amazon EC2, según el uso previo de Amazon EC2 y el importe del
compromiso por hora en un plan de ahorro de 1 o 3 años.
[Link] instancias de spot son ideales para cargas de trabajo con horas de inicio y
fin flexibles o que pueden soportar interrupciones. Las instancias de spot usan la
capacidad de computación de Amazon EC2 no usada y ofrecen ahorro de costes con
hasta un 90 % de descuento en los precios bajo demanda.
Supón que tienes un trabajo de procesamiento en segundo plano que puede iniciarse y
detenerse según sea necesario (como el trabajo de procesamiento de datos de una
encuesta de clientes). Lo deseable es iniciar y detener el trabajo de procesamiento
sin que afecte a las operaciones generales de la empresa. Si llevas a cabo una
solicitud de spot y la capacidad de Amazon EC2 está disponible, se iniciará la
instancia de spot. Sin embargo, si efectúas una solicitud de spot y la capacidad de
Amazon EC2 no está disponible, la solicitud no se completará correctamente hasta
que la capacidad esté disponible. La capacidad no disponible puede retrasar el
inicio del trabajo de procesamiento en segundo plano.
Después de iniciar una instancia de spot, si la capacidad ya no está disponible o
aumenta la demanda de instancias de spot, es posible que la instancia se
interrumpa. Es posible que esto no suponga ningún problema para el trabajo de
procesamiento en segundo plano. Sin embargo, en el ejemplo anterior de desarrollo y
prueba de aplicaciones, lo más probable es que desees evitar interrupciones
inesperadas. Por lo tanto, elige otro tipo de instancia EC2 que sea adecuado para
esas tareas.
[Link] hosts dedicados son servidores físicos con capacidad de instancias de Amazon
EC2 totalmente dedicada para tu uso.
Puedes usar tus licencias de software existentes por socket, por núcleo o por VM
para ayudar a mantener la conformidad de las licencias. Puedes comprar reservas de
hosts dedicados y hosts dedicados bajo demanda. De todas las opciones de Amazon EC2
tratadas, los hosts dedicados son los más caros.
CUESTIONARIO:
1.¿Qué opción de precios de Amazon EC2 ofrece un descuento cuando se especifica un
número de instancias de EC2 para ejecutar un sistema operativo, una familia y un
tamaño de instancias, y una tenencia específicos en una región?
Correcto. Las instancias reservadas Standard requieren que especifiques:
familia y tamaño de la instancia
descripción de la plataforma
tenencia
Región
La cantidad especificada de instancias de EC2 está cubierta durante un plazo de 1 o
3 años.
2.¿Qué opción de precios de Amazon EC2 ofrece un descuento a cambio de que te
comprometas a un gasto por hora para una familia de instancias y región por un
plazo de 1 o 3 años?
El modelo Savings Plans de instancias de EC2 reduce los costes de las instancias de
EC2 a cambio de comprometerte a un gasto por hora para una familia de instancias y
una región por un plazo de 1 o 3 años.
Escalado de Amazon EC2
Ahora conoces mejor los conceptos básicos de EC2 y su utilidad ante cualquier
necesidad de computación y cómo preparar café. Bueno, metafóricamente hablando, al
final, el café representa lo que producen las instancias. Ahora hablaremos de otros
de los principales beneficios de AWS: la escalabilidad y la elasticidad. O cómo la
capacidad aumenta o disminuye según las necesidades de negocio.
Este es el dilema de los centros de datos físicos: Si tu empresa es como el 99% de
las empresas del mundo, las cargas de trabajo varían con el tiempo. Puede que
varíen a lo largo del día o que haya periodos en los que hay demanda y otros en los
que no hay. Si estás creando un centro de datos, la pregunta es la siguiente:
¿cuánto hardware es ideal comprar? Si compras pensando en el uso medio, en general
no desperdiciarás dinero, pero cuando lleguen los picos de trabajo, no tendrás la
potencia de hardware necesaria para atender a los clientes, sobre todo en los
momentos críticos en los que esperas conseguir más resultados.
Sin embargo, si compras tu hardware pensando en la carga máxima, puede que tengas
clientes satisfechos, pero durante la mayor parte del año tendrás recursos sin
usar. Esto significa que tu uso medio será muy bajo. He visto centros de datos con
un uso medio inferior al 10%, solo por temor a no poder hacer frente a los picos de
carga. Entonces, ¿cómo se resuelve el problema en tus instalaciones? Pues la verdad
es que no se puede y aquí es donde AWS cambia el esquema por completo.
¿Y si pudieras aprovisionar tu carga de trabajo según la demanda que hubiera con
exactitud a lo largo de las 24 horas del día? Tendrías clientes satisfechos porque
siempre podrían obtener los servicios que desean, y tus directores financieros
estarían contentos porque habrían obtenido el retorno de inversión que necesitan
tus empresas.
Así es como funciona: Mar está en la barra recibiendo pedidos en un sistema
desacoplado. Como Mar no lo hace todo, necesitamos a alguien que prepare las
bebidas. Parece que será Vicente. Ahora, el primer problema que resolver es
anticiparnos a un desastre. Una vez, Werner Vogels, director de tecnología de
Amazon, dijo algo muy sabio: "Todo termina fallando; planifica tu arquitectura
pensando en los errores y nada fallará". Es decir, preguntémonos qué pasaría si
perdiéramos la instancia que acepta nuestros pedidos. No podríamos seguir
atendiendo hasta que otra persona trabajara en la cola, es decir, otra instancia en
funcionamiento.
Aquí es donde AWS lo facilita todo. Con el mismo método programático usado para
crear a la Mar original podemos crear una segunda Mar. Así, si una falla, ya
tenemos a otra en primera línea para aceptar los pedidos, y los clientes nunca
quedan desatendidos. Y no olvidemos el backend. Hagamos nuestras instancias de
procesamiento redundantes también. Esto es suficiente para la capacidad operativa
habitual. Así creamos un sistema altamente disponible sin ningún punto de error.
Mientras el número de clientes en la cola sea constante, vamos bien. Pero sabemos
que eso va a cambiar, así que veamos qué pasaría si aumentan la cantidad de
clientes y la demanda.
Escalabilidad
La escalabilidad implica comenzar solo con los recursos que se necesitan y diseñar
la arquitectura para responder automáticamente a la demanda cambiante mediante el
escalado horizontal o vertical. Como resultado, solo se paga por los recursos que
se usan. No hay que preocuparse por la falta de capacidad de computación para
satisfacer las necesidades de los clientes.
Si quisieras que el proceso de escalado se realizara automáticamente, ¿qué servicio
de AWS usarías? El servicio de AWS que proporciona esta funcionalidad para las
instancias de Amazon EC2 es Amazon EC2 Auto Scaling.
Amazon EC2 Auto Scaling
Si has intentado acceder a un sitio web que no cargaba y donde se agotaba el tiempo
de espera con frecuencia, es posible que el sitio web recibiera más peticiones que
las que podía manejar. Esta situación se parece a esperar en una larga cola para
pedir en una cafetería con solo un camarero para todos los clientes.
Amazon EC2 Auto Scaling te permite añadir o eliminar automáticamente instancias de
Amazon EC2 en respuesta a la demanda cambiante de las aplicaciones. Mediante el
escalado y la reducción horizontal automáticos de las instancias según sea
necesario, puedes mantener una mayor sensación de disponibilidad de las
aplicaciones.
En Amazon EC2 Auto Scaling, puedes emplear dos estrategias: escalado dinámico y
escalado predictivo.
El escalado dinámico responde a la demanda cambiante.
El escalado predictivo programa automáticamente el número correcto de instancias de
Amazon EC2 en función de la demanda prevista.
-Para escalar más rápido, puedes usar el escalado dinámico y el predictivo juntos.
Hay dos formas de gestionar el aumento de la demanda: el escalado vertical y el
horizontal. El vertical consiste en añadir potencia a las máquinas que están en
uso, lo que tendría sentido en ciertos casos, pero vamos a pensarlo bien. Cuando
aumenta el número de clientes, una instancia mayor de Mar no puede aceptar más
rápido el pedido de cada cliente, porque eso depende más de cada cliente que de
Mar.
-Quiero un expreso. Ey, espera, ¿es orgánico? ¿Tienes leche de soja? -Pues... no lo
sé. - ¿Hay té?
Lo que necesitamos son más clones de Mar. ¿Clientes? ¡Vaya! Las instancias de
procesamiento parecen estar a punto de sobrecargarse. Vamos a escalarlas también.
La pregunta es más que obvia: ¿por qué no hay más instancias que aceptan los
pedidos que personas que los preparan?
En este caso, la cantidad de trabajo que se puede hacer es mayor que la cantidad de
pedidos que las máquinas puedan enviar. Sin trabajos pendientes, no necesitas
añadir más instancias de empleados. Esa es una de las grandes ventajas de
desacoplar el sistema: que puedes dedicar exactamente la potencia adecuada a cada
parte del proceso en lugar de aprovisionar en exceso para resolver un problema
separado. Bien, parece que hemos resuelto la urgencia.
Ahora veamos dónde AWS marca una diferencia importante para tu empresa. Todos estos
empleados adicionales que no están haciendo nada si no los necesitas, los puedes
mandar a casa (detén las instancias). Amazon EC2 Auto Scaling: Añade instancias en
función de la demanda y las retira cuando ya no las necesitas. Esto quiere decir
que en cada momento tendrás el número adecuado de instancias. Clientes satisfechos,
Director Financiero satisfecho, arquitectura satisfecha.
Ejemplo: Amazon EC2 Auto Scaling
En la nube, la potencia de computación es un recurso programático, por lo que
puedes adoptar una estrategia más flexible del problema del escalado. Al añadir
Amazon EC2 Auto Scaling a una aplicación, puedes añadir nuevas instancias a la
aplicación cuando sea necesario y terminarlas cuando ya no sea necesario.
Supón que se está preparando para iniciar una aplicación en instancias de Amazon
EC2. Al configurar el tamaño del grupo de Auto Scaling, puedes establecer el número
mínimo de instancias de Amazon EC2 en uno. Esto significa que, en todo momento,
debe haber al menos una instancia de Amazon EC2 en ejecución.
Al crear un grupo de Auto Scaling, puedes establecer el número mínimo de instancias
de Amazon EC2. La capacidad mínima es el número de instancias de Amazon EC2 que se
inician inmediatamente después de crear el grupo de Auto Scaling. En este ejemplo,
el grupo de Auto Scaling tiene una capacidad mínima de una instancia de Amazon EC2.
A continuación, puedes establecer la capacidad deseada en dos instancias de Amazon
EC2, aunque tu aplicación necesite un mínimo de una instancia de Amazon EC2 para
ejecutarse.
-Si no especificas el número deseado de instancias de Amazon EC2 en un grupo de
Auto Scaling, la capacidad deseada se establece de forma predeterminada en su
capacidad mínima.
La tercera configuración que puedes establecer en un grupo de Auto Scaling es la
capacidad máxima. Por ejemplo, puedes configurar el grupo de Auto Scaling para que
se escale horizontalmente en respuesta al aumento de la demanda, pero solo hasta un
máximo de cuatro instancias de Amazon EC2.
Como Amazon EC2 Auto Scaling usa instancias de Amazon EC2, solo pagarás por las
instancias que uses y en el momento en que las uses. Ahora tienes una arquitectura
rentable que proporciona la mejor experiencia al cliente y, a la vez, reduce los
gastos.
Dirección de tráfico con Elastic Load Balancing
Hemos resuelto el problema de escalado con Amazon EC2 Auto Scaling. Pero ahora
tenemos un problema de tráfico, ¿no? Veamos la situación. Cuando los clientes
llegan a la cafetería, ahora hay tres cajas en las que pueden hacer sus pedidos.
Pero, por raro que parezca, la mayoría hace una sola cola, lo que ocasiona una
distribución desigual de clientes, aunque otras cajas estén esperando pedidos
paradas sin hacer nada. Los clientes entran y no saben bien a quién hacer su
pedido. Ayudaría mucho que añadiéramos un anfitrión.
Un anfitrión espera en la puerta y, cuando los clientes entran en la cafetería, les
dice a qué cola deben ir para hacer su pedido. El anfitrión observa el ritmo de los
pedidos en las cajas y cuenta el número de personas de la cola de cada caja.
Después, dirige a los nuevos clientes a la caja con la cola más corta, o la más
rápida para equilibrar las colas de las cajas y poder atender a los clientes con la
máxima eficiencia.
La misma idea se aplica al entorno de AWS. Cuando varias instancias de EC2 están
usando el mismo programa para cumplir el mismo propósito y aparece una solicitud,
¿cómo sabe esa solicitud a qué instancia de EC2 ir? ¿Cómo puedes asegurarte de que
la carga de trabajo sea uniforme entre las instancias de EC2 para que no se
sobrecargue una mientras las demás no están haciendo nada? Necesitas una forma de
dirigir solicitudes a instancias para procesar esa solicitud. Lo que necesitas para
resolverlo se denomina balanceador de carga.
Un balanceador de carga es una aplicación que recibe solicitudes y las dirige a las
instancias para procesarlas. Hay muchos balanceadores de carga de terceros que
funcionan muy bien en AWS. Si tienes uno que te gusta y que hace exactamente lo que
necesitas, puedes seguir usándolo. En ese caso, serán los equipos de operaciones
los que deban instalar, administrar, actualizar, escalar y gestionar la tolerancia
a fallos y la disponibilidad. Es factible. Probablemente solo necesitas distribuir
correctamente el tráfico en un sistema de alto rendimiento, rentable, de alta
disponibilidad y escalable automáticamente que se configure una vez y ya no
requiera más atención.
Te presento Elastic Load Balancing. Elastic Load Balancing, ELB, es uno de los
principales servicios administrados de los que hablaremos. Está diseñado para
gestionar el trabajo pesado no diferenciado del equilibrio de carga. Para ilustrar
este punto, necesito ampliar un poco el enfoque. Para empezar, Elastic Load
Balancing es un constructo regional en el que profundizaremos en vídeos
posteriores. Pero el valor clave que supone es que, como opera a nivel regional en
lugar de en instancias EC2 individuales, el servicio está altamente disponible sin
que tengas que hacer nada.
ELB se escala automáticamente. A medida que crece el tráfico, ELB está diseñado
para gestionar el rendimiento adicional sin cambiar el coste por hora. Cuando se
escala horizontal y automáticamente la flota de EC2 y cada instancia entra en
línea, Elastic Load Balancing recibe el aviso de que ya puede encargarse del
tráfico y se pone a ello. Una vez que la flota se escala, primero ELB detiene todo
el tráfico nuevo y espera a que se completen las solicitudes existentes para
liberar espacio. Una vez lo hacen, el motor de escalado automático puede terminar
las instancias sin interrumpir el servicio a los clientes existentes.
ELB no solo se usa en el tráfico externo. Veamos el nivel de pedido y cómo se
comunica con el de producción. En este momento, cada instancia de frontend conoce
cada instancia de backend. Y, si entra en línea una nueva instancia de backend, en
esta misma arquitectura se tendría que indicar a cada instancia de frontend que
ahora puede aceptar tráfico. Esto ya es bastante complicado con solo media docena
de instancias. Imagina que tienes potencialmente cientos de instancias en ambos
niveles y que cada nivel cambia constantemente en función de la demanda. Mantener
la conexión en red de manera eficiente es imposible.
También podemos resolver este caos de tráfico de backend con un ELB. Dado que ELB
es regional, es una única URL que cada instancia de frontend utiliza. A
continuación, ELB dirige el tráfico al backend que tiene las solicitudes con menor
prioridad. Si el backend se escala, una vez que la nueva instancia está lista, solo
le dice a ELB que puede ocuparse del tráfico y se pone a trabajar. El frontend no
sabe y no le importa cuántas instancias de backend están en uso. Esto sí es una
arquitectura desacoplada.
ELB puede hacer más cosas. Hablaremos de ello más adelante, pero esto es todo por
ahora. La clave es usar la herramienta adecuada para el trabajo correcto, que es
uno de los motivos por los que AWS ofrece tantos servicios diferentes. Por ejemplo,
la comunicación de backend. Hay muchas formas de hacerlo, y ELB es solo uno de esos
métodos. Pasemos a hablar de otros servicios que podrían ser incluso mejores para
algunas arquitecturas.
Elastic Load Balancing
Elastic Load Balancing es el servicio de AWS que distribuye automáticamente el
tráfico entrante de la aplicación entre varios recursos como, por ejemplo,
instancias de Amazon EC2.
Un balanceador de carga actúa como un único punto de contacto para todo el tráfico
web que entra en tu grupo de Auto Scaling. Esto significa que, al añadir o eliminar
instancias de Amazon EC2 en respuesta a la cantidad de tráfico entrante, estas
peticiones se dirigen primero al balanceador de carga. A continuación, las
peticiones se distribuyen entre varios recursos que las gestionarán. Por ejemplo,
si tienes varias instancias de Amazon EC2, Elastic Load Balancing distribuye la
carga de trabajo entre las distintas instancias para que ninguna de ellas se vea
sobrecargada.
Aunque Elastic Load Balancing y Amazon EC2 Auto Scaling son servicios
independientes, colaboran para garantizar que las aplicaciones que se ejecutan en
Amazon EC2 ofrezcan un alto rendimiento y disponibilidad.
Ejemplo: Elastic Load Balancing
Periodo de baja demanda
Este es un ejemplo de cómo funciona Elastic Load Balancing. Supongamos que solo
unos cuantos clientes han venido a la cafetería para hacer pedidos.
Si solo hay algunas cajas registradoras abiertas, eso se corresponde con la demanda
de clientes que necesitan servicio. Es menos probable que la cafetería tenga cajas
registradoras abiertas sin clientes. En este ejemplo, imagina que las cajas
registradoras son instancias de Amazon EC2.
Periodo de alta demanda
A lo largo del día, a medida que aumenta el número de clientes, la cafetería abre
más cajas registradoras para atenderles.
Además, un empleado de la cafetería dirige a los clientes a la caja adecuada para
que el número de pedidos se distribuya uniformemente entre las cajas abiertas.
Puedes pensar en este empleado de la cafetería como un balanceador de carga.
Mensajería y cola
Hablemos de mensajería y colas. En la cafetería, los cajeros reciben los pedidos de
los clientes y los baristas preparan los pedidos. El cajero recibe cada pedido
apuntándolo en un papel que entrega al barista. El barista toma el papel y prepara
el pedido. Con el siguiente pedido, el proceso se repite. Esto funciona muy bien
siempre y cuando el cajero y el barista estén sincronizados. Pero, ¿y si el cajero
le pasa el pedido a un barista que estuviera de descanso u ocupado con otro pedido?
Se formaría un atasco en la caja hasta que el barista estuviera listo para aceptar
el pedido. En cierto momento, puede que el pedido quede en espera para que el
cajero pueda atender al próximo cliente.
Es un proceso deficiente porque, si el cajero o el barista no están sincronizados,
el proceso se vería afectado, lo que ralentiza la recepción de pedidos y ocasiona
fallos de procesamiento. Una mejora en el proceso sería introducir algún tipo de
buffer o cola en el sistema. En lugar de entregar el pedido directamente al
barista, el cajero publicaría el pedido en algún tipo de buffer, como un tablón de
comandas.
Esta idea de colocar mensajes en un buffer se denomina mensajería y colas. Así como
el cajero envía pedidos al barista, las aplicaciones se enviarían mensajes entre sí
para comunicarse. La comunicación entre aplicaciones directamente, como el cajero y
el barista, se llama acoplamiento fuerte.
Un rasgo distintivo de la arquitectura de acoplamiento fuerte es que, si un solo
componente falla o cambia, causa problemas en otros componentes o incluso en todo
el sistema. Por ejemplo, si la aplicación A envía mensajes directamente a la
aplicación B, y la aplicación B tiene un fallo y no puede aceptar esos mensajes, la
aplicación A también comenzará a tener errores. Así es ese tipo de arquitectura.
Una arquitectura más fiable es la de acoplamiento débil. En ella, si un componente
falla, se aísla y, por lo tanto, no ocasiona errores en cascada en todo el sistema.
Si codificamos la aplicación para utilizar una arquitectura de acoplamiento más
débil, funcionaría más o menos así:
Al igual que nuestro cajero y barista, introducimos un buffer entre los dos. En
este caso, introducimos una cola de mensajes. La aplicación A envía mensajes a la
cola y la aplicación B los procesa. Si la aplicación B falla, la aplicación A sigue
funcionando sin problemas. Los mensajes aún pueden enviarse a la cola y permanecer
allí hasta que finalmente se procesen.
Así funciona el acoplamiento débil. Esto es lo que queremos para las arquitecturas
de AWS. Y esto me lleva a dos servicios de AWS que pueden ser útiles en este
sentido: Amazon Simple Queue Service (SQS) y Amazon Simple Notification Service
(SNS). Pero, antes de profundizar en ambos voy a pedir un café para llevar en el
sitio web de nuestra cafetería. Hecho. Muy bien, bueno. Ahora debería recibir un
mensaje cuando el pedido esté listo.
Primero, hablemos de Amazon SQS. SQS permite enviar, almacenar y recibir mensajes
entre componentes de software a cualquier volumen. Todo esto sin perder mensajes ni
necesitar que haya otros servicios disponibles. Los mensajes serían como pedidos de
café y, el tablón de comandas, una cola de SQS. Los mensajes tienen el nombre de la
persona, el pedido de café y la hora en que se pidió. Los datos incluidos en el
mensaje se denominan cargas y están protegidos hasta la entrega. Los mensajes se
colocan en la cola de SQS hasta que se procesan. AWS gestiona la infraestructura
subyacente para que pueda alojar esas colas. Se escalan automáticamente, son
fiables y fáciles de configurar y usar.
Amazon SNS es similar porque se utiliza para enviar mensajes a los servicios, pero
también puede enviar notificaciones a usuarios finales. Lo hace de un modo
distinto, llamado modelo de publicación/suscripción, o modelo pub/sub. Eso
significa que puedes crear algo llamado "tema de SNS", que no es más que un canal
para enviar mensajes. Luego, puedes vincular a los suscriptores con ese tema y
finalmente, publicar mensajes para esos suscriptores. En la práctica, significa que
puedes enviar un mensaje a un tema y ese mensaje se difundirá a todos los
suscriptores a la vez. Los suscriptores pueden ser puntos de enlace, como colas de
SQS, funciones Lambda de AWS o enlaces web HTTPS o HTTP.
Además, SNS puede utilizarse para difundir las notificaciones a usuarios finales
mediante push a móviles, SMS y correo electrónico. Volviendo a la cafetería:
podríamos enviar una notificación cuando el pedido de un cliente esté listo. Podría
ser un simple SMS o un mensaje push al móvil para avisar de que pueden recogerlo.
De hecho, acabo de recibir un mensaje en mi teléfono. Parece que mi pedido está
listo. ¡Nos vemos!
Aplicaciones monolíticas y microservicios
Las aplicaciones constan de varios componentes. Los componentes se comunican entre
sí para transmitir datos, satisfacer solicitudes y mantener la aplicación en
ejecución.
Supongamos que tienes una aplicación con componentes estrechamente acoplados. Estos
componentes pueden incluir bases de datos, servidores, interfaz de usuario, lógica
empresarial, etc. Este tipo de arquitectura se puede considerar una aplicación
monolítica.
En esta clase de arquitectura de la aplicación, si falla un componente, otros
componentes fallan y, probablemente, toda la aplicación fallará.
Para mantener la disponibilidad de las aplicaciones cuando falla un componente,
puedes diseñar la aplicación siguiendo una estrategia de microservicios.
En una estrategia de microservicios, los componentes de la aplicación tienen un
acoplamiento débil. En este caso, si fallara un solo componente, los demás
componentes seguirían funcionando porque están comunicados entre sí. El
acoplamiento débil evita que toda la aplicación falle.
Al diseñar aplicaciones en AWS, puedes adoptar la estrategia de microservicios con
servicios y componentes que cumplan diferentes funciones. Dos servicios facilitan
la integración de aplicaciones: Amazon Simple Notification Service (Amazon SNS) y
Amazon Simple Queue Service (Amazon SQS).
Amazon Simple Notification Service (Amazon SNS)
Amazon Simple Notification Service (Amazon SNS) es un servicio de
publicación/suscripción. Mediante temas de Amazon SNS, un editor publica mensajes a
los suscriptores. Esto es similar al ejemplo de la cafetería: el cajero pasa los
pedidos de café al camarero para que prepare las consumiciones.
En Amazon SNS, los suscriptores pueden ser servidores web, direcciones de correo
electrónico, funciones de AWS Lambda u otras opciones.
[Link]ón de actualizaciones de un tema único
Supongamos que la cafetería tiene un único boletín que incluye actualizaciones de
todas las áreas de tu negocio. Incluye temas como cupones, curiosidades sobre el
café y productos nuevos. Todos estos temas se agrupan porque se trata de un único
boletín informativo. Todos los clientes que se suscriben al boletín reciben
actualizaciones sobre cupones, curiosidades sobre el café y productos nuevos.
Después de un tiempo, algunos clientes expresan que prefieren recibir boletines
informativos independientes solo para los temas específicos que les interesan. Los
propietarios de la cafetería deciden probar esta estrategia.
[Link]ón de actualizaciones de varios temas
Ahora, en lugar de tener un único boletín para todos los temas, la cafetería lo ha
dividido en tres boletines independientes. Cada boletín está dedicado a un tema
específico: cupones, curiosidades sobre el café y productos nuevos.
Los suscriptores recibirán ahora actualizaciones de inmediato solo para los temas
específicos a los que se hayan suscrito.
Los suscriptores pueden suscribirse a uno o a varios temas. Por ejemplo, el primer
cliente se suscribe solo al tema de cupones, y el segundo suscriptor se suscribe
solo al tema de curiosidades sobre el café. El tercer cliente se suscribe a los
temas de curiosidades sobre el café y productos nuevos.
Amazon Simple Queue Service (Amazon SQS)
Amazon Simple Queue Service (Amazon SQS) es un servicio de cola de mensajes.
Con Amazon SQS, puedes enviar, almacenar y recibir mensajes entre componentes de
software, sin perder mensajes y sin necesidad de que otros servicios estén
disponibles. En Amazon SQS, una aplicación envía mensajes a una cola. Un usuario o
servicio recupera un mensaje de la cola, lo procesa y, a continuación, lo elimina
de la cola.
[Link] 1: gestión de un pedido
Supongamos que la cafetería tiene un proceso de pedidos en el que un cajero los
recibe y un camarero los prepara. Piense en el cajero y el camarero como dos
componentes independientes de una aplicación.
En primer lugar, el cajero recibe un pedido y lo anota en un papel. A continuación,
el cajero entrega el papel al camarero. Por último, el camarero prepara la bebida y
se la entrega al cliente.
Cuando llega el siguiente pedido, el proceso se repite. Este proceso funciona sin
problemas mientras el cajero y el camarero estén coordinados.
Pero, ¿qué pasaría si el cajero tomara nota de un pedido y al ir a entregárselo al
camarero, este estuviera en su descanso u ocupado con otro pedido? El cajero
tendría que esperar hasta que el camarero estuviera listo para aceptar el pedido.
Esto provocaría retrasos en el proceso de pedidos y los clientes tendrían que
esperar más tiempo para recibir sus consumiciones.
Como la cafetería se ha hecho más conocida y la fila de pedidos se mueve más
lentamente, los propietarios notan que el proceso de pedidos actual es lento e
ineficiente. Deciden probar una estrategia diferente que utiliza una cola.
Ejemplo 2: pedidos en cola
Recordemos que el cajero y el camarero son dos componentes independientes de una
aplicación. Un servicio de cola de mensajes como Amazon SQS permite mensajes entre
complementos de aplicaciones desacopladas.
En este ejemplo, el primer paso del proceso sigue siendo el mismo que antes: un
cliente realiza un pedido al cajero.
El cajero pone el pedido en una cola. Puede imaginárselo como un tablón de pedidos
que funciona como búfer entre el cajero y el camarero. Aunque el camarero esté en
su descanso u ocupado con otro pedido, el cajero puede seguir enviando nuevos
pedidos a la cola.
Después, el camarero comprueba la cola y toma nota del pedido.
El camarero prepara la bebida y se la entrega al cliente.
A continuación, el camarero elimina ese pedido de la cola.
Mientras el camarero prepara la bebida, el cajero puede seguir aceptando nuevos
pedidos y añadirlos a la cola.
CUESTIONARIO:
1.¿Qué servicio de AWS es la mejor opción para publicar mensajes a los
suscriptores?
Amazon Simple Notification Service (Amazon SNS)
La respuesta correcta es Amazon Simple Notification Service (Amazon SNS).
Amazon SNS es un servicio de publicación/suscripción. Mediante los temas de Amazon
SNS, un editor publica mensajes para los suscriptores.
Las demás respuestas son incorrectas por lo siguiente:
Amazon Simple Queue Service (Amazon SQS) es un servicio de cola de mensajes. No usa
la suscripción de mensajes ni el modelo de temas relacionados con Amazon SNS.
Amazon EC2 Auto Scaling permite añadir o eliminar automáticamente instancias de
Amazon EC2 en respuesta a la demanda cambiante de las aplicaciones.
Elastic Load Balancing es el servicio de AWS que distribuye automáticamente el
tráfico entrante de aplicaciones entre varios recursos, como instancias de Amazon
EC2.
Servicios de computación adicionales
Las instancias de EC2 son máquinas virtuales que puedes poner en marcha en pocos
pasos en AWS. EC2 es ideal para todo tipo de casos prácticos, como lanzar
servidores web básicos o clústeres informáticos de alto rendimiento, entre otros
usos.
Dicho esto, aunque EC2 es increíblemente flexible, fiable y escalable, lo mejor es
buscar opciones adecuadas para tus capacidades de computación según tus casos
prácticos. EC2 requiere que configures y administres tu flota de instancias con el
tiempo. Cuando utilizas EC2, debes encargarte de parchear tus instancias si surgen
nuevos paquetes de software, configurar el escalado de esas instancias y asegurarte
de haber estructurado tus soluciones para que estén correctamente alojadas y
cuenten con una alta disponibilidad. Si bien no supone tanta administración como la
que requeriría alojarlas en tus instalaciones, sigue habiendo determinados procesos
al respecto.
Quizá te preguntes qué otros servicios de computación de AWS son más prácticos en
términos de administración. Aquí es donde entra en juego el término sin servidor.
AWS ofrece varias soluciones de computación sin servidor. Sin servidor significa
que no se puede ver ni acceder a la infraestructura o a las instancias subyacentes
que alojan tus aplicaciones. Toda la administración del entorno subyacente, en
términos de aprovisionamiento, escalado, alta disponibilidad y mantenimiento se
hace desde AWS. Solo tienes que centrarte en la aplicación mientras AWS se encarga
del resto.
AWS Lambda es una solución de computación sin servidor. Lambda es un servicio que
permite cargar tu código en lo que se llama función Lambda. Configura un
desencadenante y el servicio esperará a que ocurra. Cuando se detecta el
desencadenante, el código se inicia automáticamente en un entorno administrado del
que no tienes que preocuparte porque se escala solo, es altamente disponible y AWS
se encarga de su mantenimiento. Ya tengas 1 o 1000 peticiones entrantes, Lambda
ampliará las funciones para satisfacer la demanda. Lambda está diseñado para
iniciar código con una duración máxima de 15 minutos, no para procesos más largos
como puede ser el aprendizaje profundo. Es mejor para procesos rápidos, como
backend web, o servicios de procesamiento de datos donde cada petición tarda menos
de 15 minutos en completarse.
Si aún no quieres disponer de un servidor o necesitas acceso al entorno subyacente,
y deseas eficiencia y portabilidad, es mejor usar servicios de contenedores como
Amazon Elastic Container Service, también llamado ECS, o Amazon Elastic Kubernetes
Service, también llamado EKS.
Ambos servicios son herramientas de coordinación de contenedores. Antes de
profundizar en esto, un contenedor en este caso es un contenedor Docker. Docker es
una plataforma muy usada que utiliza la virtualización a nivel de sistema operativo
para entregar software en contenedores. Un contenedor es un paquete de código que
incluye tu aplicación, tus dependencias y cualquier configuración que necesites
para la ejecución. Estos contenedores se ejecutan en instancias de EC2 y de forma
aislada entre sí, como las máquinas virtuales. Pero, en este caso, el host es una
instancia de EC2. Al usar contenedores Docker en AWS necesitas procesos para
comenzar, detener, reiniciar y supervisar los contenedores que se lanzan, no solo
en una instancia de EC2, sino en un conjunto, lo que se denomina clúster.
El proceso de realizar estas tareas se denomina coordinación de contenedores, y es
muy complicado hacerlo por tu propia cuenta. Hay herramientas de organización que
ayudan a administrar contenedores. ECS sirve para ayudarte a lanzar tus
aplicaciones en contenedores a gran escala y ahorrarte la molestia de administrar
el aprovisionamiento de software. EKS es similar, pero dispone de herramientas y
características diferentes.
Tanto Amazon ECS como Amazon EKS pueden lanzarse en EC2. Pero si no tienes pensado
usar EC2 para alojar los contenedores porque no necesitas acceso al SO subyacente o
no quieres administrar esas instancias de EC2, puedes utilizar una plataforma de
computación llamada AWS Fargate. Fargate es una plataforma sin servidor para ECS o
EKS. Ha sonado muy técnico y puede parecer confuso, así que voy a explicarlo.
Si tienes pensado alojar aplicaciones tradicionales y quieres acceso completo al
sistema operativo subyacente, como Linux o Windows, la opción adecuada es EC2. Si
deseas alojar funciones con tiempo de ejecución corto, aplicaciones orientadas a
servicios o basadas en eventos, y no deseas administrar el entorno subyacente,
Lambda es una buena opción. Para llevar a cabo cargas de trabajo basadas en
contenedores Docker en AWS, primero debes elegir la herramienta de coordinación.
¿Quieres utilizar ECS o EKS de Amazon? Después de elegir la herramienta debes
elegir la plataforma. ¿Quieres ejecutar los contenedores en instancias de EC2
administradas por ti mismo? ¿O en un entorno sin servidor, como AWS Fargate, que
administra AWS en tu lugar?
Estas son algunas soluciones de computación en AWS, y hay muchas más. Consulta en
las notas más información sobre los servicios de computación de AWS y las demás
opciones que no he mencionado aquí.
Computación sin servidor
Anteriormente en este módulo ha podido conocer Amazon EC2, un servicio que permite
ejecutar servidores virtuales en la nube. Si tienes aplicaciones que quieres
ejecutar en Amazon EC2, debes hacer lo siguiente:
1-Aprovisionar instancias (servidores virtuales).
2-Cargar el código.
3-Seguir administrando las instancias mientras la aplicación se ejecuta.
El término "sin servidor" significa que el código se ejecuta en servidores, pero no
es necesario aprovisionar ni administrar dichos servidores. Con la computación sin
servidor, puedes centrarte más en innovar con productos y características nuevas, y
no en el mantenimiento de los servidores.
Otro beneficio es la flexibilidad de escalar aplicaciones sin servidor
automáticamente. La computación sin servidor puede ajustar la capacidad de las
aplicaciones modificando las unidades de consumo, como el rendimiento y la memoria.
Un servicio de AWS para computación sin servidor es AWS Lambda.
AWS Lambda
AWS Lambda(opens in a new tab) es un servicio que permite ejecutar código sin
necesidad de aprovisionar ni administrar servidores.
Si usas AWS Lambda, solo pagarás por el tiempo de computación que consumas. Los
cargos solo se aplican cuando el código se está ejecutando. También se puede
ejecutar código para prácticamente cualquier tipo de aplicación o servicio backend,
todo sin necesidad de administración.
Por ejemplo, una función Lambda sencilla podría ser cambiar automáticamente el
tamaño de las imágenes subidas a la nube de AWS. En este caso, la función se activa
cuando se carga una nueva imagen.
Cómo funciona AWS Lambda
[Link] cargar el código a Lambda.
[Link] código se configura para que se active desde una fuente de eventos, como
servicios de AWS, aplicaciones móviles o puntos de enlace HTTP.
[Link] ejecuta el código solo cuando se activa.
[Link] pagas por el tiempo de computación que usas. En el ejemplo anterior de
cambio de tamaño de imágenes, solo se pagaría por el tiempo de cómputo empleado en
cargar imágenes nuevas. Al cargar las imágenes, Lambda ejecuta el código para la
función de cambio de tamaño de imágenes.
En AWS, también puedes crear y ejecutar aplicaciones en contenedores.
Contenedores
Los contenedores te ofrecen un método estándar para empaquetar el código de la
aplicación y las dependencias en un solo objeto. También puedes usar los
contenedores para procesos y flujos de trabajo en los que existan requisitos
esenciales de seguridad, fiabilidad y escalabilidad.
[Link] host con varios contenedores
Supongamos que el desarrollador de aplicaciones de una empresa tiene un entorno en
su equipo que es diferente al de los equipos que usa el personal de operaciones de
TI. El desarrollador quiere asegurarse de que el entorno de la aplicación siga
siendo coherente independientemente del despliegue, por lo que utiliza una
estrategia basada en contenedores. Esto ayuda a reducir el tiempo dedicado a
depurar aplicaciones y diagnosticar las diferencias en los entornos de cómputo.
[Link] de hosts con cientos de contenedores
Al ejecutar aplicaciones en contenedores, es importante tener en cuenta la
escalabilidad. Supongamos que, en lugar de un único host con varios contenedores,
debes administrar decenas de hosts con cientos de contenedores. También podría ser
que tuviera que administrar cientos de hosts con miles de contenedores. A gran
escala, imagina cuánto tiempo podrías tardar en supervisar el uso de la memoria, la
seguridad, el registro, etc.
Amazon Elastic Container Service (Amazon ECS)
Amazon Elastic Container Service (Amazon ECS)(opens in a new tab) es un sistema de
administración de contenedores altamente escalable y de alto rendimiento que
permite ejecutar y escalar aplicaciones en contenedores en AWS.
Amazon ECS admite contenedores de Docker. Docker(opens in a new tab) es una
plataforma de software que permite crear, probar e implementar aplicaciones
rápidamente. AWS admite el uso de Docker Community Edition (de código abierto) y
Docker Enterprise Edition (de suscripción). Con Amazon ECS, puedes usar las
llamadas a la API para iniciar y detener aplicaciones habilitadas para Docker.
Amazon Elastic Kubernetes Service (Amazon EKS)
Amazon Elastic Kubernetes Service (Amazon EKS)(opens in a new tab)es un servicio
completamente administrado que se puede usar para ejecutar Kubernetes en AWS.
Kubernetes(opens in a new tab) es un software de código abierto que permite
implementar y administrar aplicaciones en contenedores a escala. Una gran comunidad
de voluntarios mantiene Kubernetes y AWS colabora activamente en dicha comunidad. A
medida que se publican nuevas características y funcionalidades para las
aplicaciones de Kubernetes, se pueden aplicar fácilmente estas actualizaciones a
las aplicaciones administradas por Amazon EKS.
AWS Fargate
AWS Fargate(opens in a new tab)es un motor de computación sin servidor para
contenedores. Funciona tanto con Amazon ECS como con Amazon EKS.
Con AWS Fargate no es necesario aprovisionar ni administrar servidores. AWS Fargate
administra la infraestructura de servidores en tu lugar. Puedes centrarte más en
innovar y desarrollar tus aplicaciones y solo pagarás por los recursos necesarios
para ejecutar tus contenedores.
Resumen del módulo 2
Hola a todos. Espero que estés disfrutando del curso. Haremos un repaso como este
tras cada tema principal para comprobar lo aprendido.
Antes de nada, ¿qué es la computación en la nube y qué ofrece AWS? La computación
en la nube es la entrega bajo demanda de los recursos de las TI a través de
Internet con precios de pago por uso. Es decir: puedes hacer solicitudes de
recursos de las TI, como computación, redes, almacenamiento, análisis de datos o de
otros tipos, y se ponen a tu disposición bajo demanda. No pagas recursos por
adelantado, solo tienes que aprovisionar y pagar a fin de mes.
AWS ofrece servicios y categorías combinables para crear tus soluciones. Hemos
hablado de algunos servicios como Amazon EC2. Con EC2, puedes activar y desactivar
dinámicamente servidores virtuales, denominados instancias de EC2. Cuando inicias
una instancia de EC2, eliges la familia de la instancia. La familia de instancia
indica el hardware donde se lanza la instancia,
y puedes crear instancias con un propósito específico. Las categorías son las
siguientes: de uso general, computación optimizada, de memoria optimizada, de
computación acelerada y optimizadas para el almacenamiento.
Puedes escalar las instancias de EC2 verticalmente cambiando su tamaño, u
horizontalmente iniciando nuevas instancias y añadiéndolas al grupo. Para este fin,
puedes usar el escalado horizontal automatizado de Amazon EC2 Auto Scaling.
Una vez que hayas escalado las instancias de EC2 horizontalmente, necesitarás algo
para distribuir el tráfico entrante entre esas instancias, y aquí es donde entra en
juego Elastic Load Balancer
Las instancias de EC2 tienen distintos modelos de precios: bajo demanda, que es más
flexible y no tiene contrato; precio por spot, que permite utilizar la capacidad no
usada con una tarifa con descuento; Savings plans de EC2 o instancias reservadas,
que permiten hacer un contrato con AWS para obtener una tarifa con descuento al
formalizar un compromiso de cierto nivel de uso; y Savings Plans de computación,
aplicables a AWS Lambda y AWS Fargate, así como a instancias de EC2.
También tenemos servicios de mensajería como los siguientes: Amazon Simple Queue
Service, o SQS. Este servicio te permite desacoplar los componentes del sistema.
Los mensajes permanecen en la cola hasta que se consumen o eliminan. Amazon Simple
Notification Service (SNS) se utiliza para enviar mensajes, como notificaciones
móviles, correos electrónicos, mensajes SMS o incluso peticiones HTTP. Una vez
publicado el mensaje, se envía a todos los suscriptores.
También hemos aprendido que AWS ofrece distintos tipos de servicios de computación
más allá de los servidores virtuales, como EC2. Hay servicios de contenedores como
Amazon Elastic Container Service, o ECS, y Amazon Elastic Kubernetes Service, o
EKS. Ambas son herramientas de coordinación de contenedores. Puedes utilizar estas
herramientas con instancias de EC2, pero no necesitas administrarlas si no lo
deseas.
Puedes utilizar AWS Fargate, que permite lanzar tus contenedores en una plataforma
sin servidor. Está AWS Lambda, que permite cargar y configurar el código para
iniciarlo según distintos desencadenantes, y solo se te cobra cuando el código está
en funcionamiento, sin contenedores ni máquinas virtuales, sólo código y
configuración. Espero que te sirva este resumen, y nos vemos en el próximo.
CUESTIONARIO:
[Link] usar una instancia de Amazon EC2 para una carga de trabajo de
procesamiento por lotes. ¿Qué tipo de instancia de Amazon EC2 sería mejor utilizar?
La respuesta correcta es De computación optimizada.
Las demás respuestas son incorrectas por lo siguiente:
Las instancias de uso general proporcionan un equilibrio entre recursos de
computación, memoria y redes. Esta familia de instancias no sería la mejor opción
para la aplicación en esta situación. Las instancias de computación optimizada son
más adecuadas para cargas de trabajo de procesamiento por lotes que las instancias
de uso general.
Las instancias con optimización de memoria son más idóneas para cargas de trabajo
que procesan grandes conjuntos de datos en memoria, como bases de datos de alto
rendimiento.
Las instancias optimizadas para el almacenamiento están diseñadas para cargas de
trabajo que requieren un acceso de lectura y escritura secuencial y elevado a
conjuntos de datos de gran tamaño en el almacenamiento local. La pregunta no
especifica el tamaño de los datos que se procesarán. El procesamiento por lotes
implica el procesamiento de datos en grupos. Una instancia de computación
optimizada es ideal para este tipo de carga de trabajo, que se beneficiaría de un
procesador de alto rendimiento.
[Link]áles son las opciones en cuanto a la duración del contrato para las instancias
reservadas de Amazon EC2? (Selecciona DOS).
Las dos respuestas correctas son:
1 año
3 años
Las instancias reservadas requieren un compromiso de 1 o 3 años. La opción de 3
años ofrece un descuento mayor.
[Link] una carga de trabajo que durará un total de 6 meses y que puede soportar
interrupciones. ¿Cuál sería la opción de compra más rentable de Amazon EC2?
La respuesta correcta es Instancia de spot.
Las demás respuestas son incorrectas por lo siguiente:
Las instancias reservadas requieren una duración del contrato de 1 o 3 años. La
carga de trabajo en esta situación solo se ejecutará durante 6 meses.
Las instancias dedicadas se ejecutan en una nube virtual privada (VPC) en hardware
dedicado a un único cliente. Tienen un coste mayor que las demás opciones de
respuesta, que se ejecutan en hardware compartido.
Las instancias bajo demanda cumplen los requisitos de funcionamiento durante solo 6
meses. Sin embargo, una instancia de spot sería la mejor opción porque no requiere
una duración mínima del contrato, puede soportar interrupciones y cuesta menos que
una instancia bajo demanda.
4.¿Qué proceso es un ejemplo de Elastic Load Balancing?
La respuesta correcta es Garantizar que ninguna instancia de Amazon EC2 tenga que
llevar toda la carga de trabajo por sí sola.
Elastic Load Balancing es el servicio de AWS que distribuye automáticamente el
tráfico entrante de la aplicación entre varios recursos, como instancias de Amazon
EC2. Esto ayuda a garantizar que ningún recurso se utilice de forma excesiva.
Las demás respuestas son ejemplos de escalado automático
[Link] implementar y administrar aplicaciones en contenedores. ¿Qué servicio le
conviene usar?
La respuesta correcta es Amazon Elastic Kubernetes Service (Amazon EKS).
Amazon EKS es un servicio Kubernetes completamente administrado. Kubernetes es un
software de código abierto que permite implementar y administrar aplicaciones en
contenedores a escala.
Las demás opciones de respuesta son incorrectas porque:
AWS Lambda es un servicio que permite ejecutar código sin aprovisionar ni
administrar servidores.
Amazon Simple Queue Service (Amazon SQS) es un servicio que permite enviar,
almacenar y recibir mensajes entre componentes de software a través de una cola.
Amazon Simple Notification Service (Amazon SNS) es un servicio de
publicación/suscripción. Mediante los temas de Amazon SNS, un editor publica
mensajes a los suscriptores.