logo

Trabajemos juntos

Contanos más sobre tu proyecto, nos pondremos en contacto lo antes posible.

Email

info@genbyte.com.ar

Mejores prácticas para construir arquitecturas en AWS (Parte 1)

  • By admin
  • octubre 28, 2020

¿Cuál es la mejor estrategia para diseñar nuestra infraestructura en la nube? Amazon nos asiste en parte del trabajo con su “Well-Architected framework”, que es mucho más que un conjunto de mejores prácticas en AWS. Este “Marco de Buena Arquitectura” ayuda a los arquitectos de la nube a crear una infraestructura para aplicaciones y cargas de trabajo segura, de alto rendimiento, resistente y eficiente. Está basado en cinco pilares (excelencia operativa, seguridad, fiabilidad, eficiencia de rendimiento y optimización de costos), y ofrece un enfoque coherente para que clientes y socios evalúen las arquitecturas e implementen diseños que puedan escalar con el tiempo.

Podemos resumir el “Well-Architected framework” en las siguientes 10 mejores prácticas en AWS:

  1. Escalabilidad
  2. Automatización
  3. Utilización de recursos desechables
  4. Acoplar libremente componentes
  5. Diseñar servicios, no servidores
  6. Elegir la solución de base de datos correcta
  7. Evitar puntos de falla únicos
  8. Optimizar por costo
  9. Usar cache
  10. Asegurar la infraestructura completa

En este artículo trataremos las cuatro primeras: Escalabilidad, automatización, utilización de recursos desechables y acoplamiento de componentes.

¿No está seguro de cómo ajustar las mejores prácticas en su organización? Contáctenos y reciba la asistencia de nuestros técnicos.

Escalabilidad

Con AWS es muy fácil implementar servicios escalables, y esta es una de las mayores razones para ejecutar cargas de trabajo en la nube. Pero empecemos desde el principio y respondamos preguntas como: ¿Qué es escalabilidad? ¿Qué significado tiene en la nube? Empecemos a recorres las mejores prácticas en AWS.

¿Qué es escalabilidad?

Podemos definir escalabilidad como la capacidad de un sistema para crecer y adaptarse a las necesidades de los usuarios. En general la escalabilidad se vincula al crecimiento de los recursos de un sistema ante el incremento de la demanda, evitando así interrupciones de servicios y permitiendo a los usuarios trabajar sin problemas.

Para poner un ejemplo en el mundo físico, podemos hablar de la cola en un supermercado. Hay horarios en el que con pocos cajeros alcanzan, pero en otros hay que agregar trabajadores para atender a los clientes de forma fluida. Este es un ejemplo de escalabilidad funcionando correctamente. Sin embargo, es muy probable que todos alguna vez nos encontramos estancados en la fila del supermercado viendo como hay muchas cajas cerradas y la espera es muy larga. En este caso, la escalabilidad no se aplica correctamente a pesar de contar con los recursos. Por supuesto también puede existir el caso en que, por más que todas las cajas estén atendidas igual hay demoras. Aquí nos encontramos con las limitaciones del mundo físico. Si estuviéramos hablando de un datacenter propio, también podríamos alcanzar dicho límite y para ampliarlo se requeriría una gran inversión. Muy lejos de las mejores prácticas ¿o no?

¿Por qué podemos decir que los servicios en la nube resuelven el problema del costo cuando hablamos de escalabilidad? La respuesta es sencilla y la exploraremos en la siguiente sección.

Escalabilidad y cloud computing

En la definición de cloud computing, o servicios en la nube, solemos incluir sin falta el concepto de escalabilidad y lo asociamos directamente con una disminución en los gastos. También encabeca nuestra lista de mejores prácticas en AWS ¿Por qué? Imaginemos que administramos un sitio de ventas en line en diciembre (cliché), y no queremos perder ninguna operación por falta de recursos. Los costos de infraestructura necesaria para cumplir los requisitos cerca de la noche de navidad no son los mismo que a principio de mes, pero vamos a pagar por el máximo siempre. Aunque no haga falta, debemos decir que en la nube solo se paga por los recursos utilizados.

Utilización y desperdicio de recursos en un datacenter propio

En las estructuras descentralizadas que implementamos en la nube, las necesidades de cómputo u otros recursos (como bases de datos) se distribuyen en nodos. Cuando hacen falta más recursos, se asignan más nodos y así podemos cubrir la demanda. Por esto decimos que el concepto de escalabilidad está estrechamente ligado al de computación de la nube. Este primer ítem en nuestras mejores prácticas nos permite reducir costos a la vez que se mejora la experiencia de los usuarios.

¿Cómo optimizar precio y rendimiento en AWS con instancias EC2 T4g? Encontrá más información en este artículo.

¿Cómo utilizar efectivamente la escalabilidad para cumplir las mejores prácticas?

Si utilizamos las mejores prácticas para habilitar la escalabilidad, el diseño debe incluir un método para anticipar la necesidad de una mayor capacidad y ponerla a disposición antes de que sea demasiado tarde, evitando que los usuarios vean su experiencia afectada.

Debemos asegurarnos de que nuestras arquitecturas pueda manejar cambios en la demanda eficientemente.

Podemos utilizar herramientas provistas por Amazon, como AWS CloudWatch que detecta si la carga total en la flota de servidores ha alcanzado un umbral específico. Este umbral podría ser “Se mantuvo por encima del 60% de utilización de la CPU durante más de 5 minutos” o cualquier cosa relacionada con el uso de recursos. Con CloudWatch, podremos diseñar métricas personalizadas basadas en aplicaciones específicas que pueden desencadenar el escalado según lo necesitemos.

La nueva instancia estará lista antes de que se alcance la capacidad máxima y brinda una buena experiencia para los usuarios, que nunca sabrán que la capacidad máxima estaba en cerca de alcanzarse.

Automatiza tu entorno

Dentro de los servicios integrados en AWS, tenemos muchas herramientas para automatizar virtualmente cada capa de nuestra infraestructura. Debemos aprovechar estas herramientas para asegurar que nuestra infraestructura pueda responder rápidamente a los cambios como parte de las mejores prácticas.

Donde sea posible, debemos automatizar el de aprovisionamiento, terminación y configuración de los recursos.

La detección de recursos en mal estado y reemplazarlos puede ser fácilmente automatizado y podemos recibir notificaciones cuando las asignaciones de recursos cambien.

Cada herramienta de automatización tiene sus puntos fuertes y otros no tanto, además de distintas curvas de aprendizaje. La mejor opción no está dada por una lista, si no eligiendo la que mejor se adapte a las necesidades de acuerdo a las características técnicas que la organización requiera. De hecho, en muchos casos, puede encontrar que el mejor enfoque es combinar dos o más de estas herramientas.

Utilización de recursos desechables

Estoy seguro que muchos de nosotros vivimos esos días dorados en que los servidores se nombraban según la película o saga de libros favorida del gerente de IT. En lo personal, llegue a verlos nombrados como los planetas del sistema solar según el tamaño de los equipos. En ese tiempo teníamos que actualizar a Trantor o tal vez reinstalar Plutón. La llegada de la tecnología de virtualización y buenas practicas para la normalización de nombres cambiaron esto, pero todavía teníamos que actualizar los servidores, reinstalar, aplicar parches al firmware, etc. Y lo que es peor en limitadas ventanas fuera del horario laboral.

Con la llegada de la computación en la nube, las mejores prácticas nos lleva a pensar la infraestructura como software y no como hardware ¿Por qué? Con hardware, es fácil comprar muchos componentes específicos para estar listo ante picos de uso. Esta aproximación es cara y muy poco flexible, además de ser difícil de actualizar debido al costo irrecuperable.

Si pensamos en nuestros recursos de una manera diferente, en la nube migrar entre tipos de instancia u otros recursos es muy sencillo. Esto significa que podemos (y principalmente debemos) considerar nuestros recursos como elementos de fácil reemplazo. De esta forma podemos responder rápido antes cambios en requisitos de capacidad, actualización de aplicaciones y la administración de software subyacente.

Acoplar componentes

Las infraestructuras tradicionales giran en torno a cadenas de servidores integrados, cada uno con un propósito específico. El problema con el diseño tradicional es que cuando uno de los componentes falla, el sistema completo falla causando una disrupción del servicio. Esta infraestructura también trae problemas de escalabilidad ya que es difícil agregar o eliminar servidores en una capa y realizar (o eliminar) correctamente las conexiones.

En datacenter propios, la utilización de balanceadores de carga para crear un acoplamiento flexible no es tarea fácil, ni mucho menos económica. Afortunadamente los servicios en la nube ofrecen herramientas como balanceadores de carga a un muy bajo costo. Con un acoplamiento flexible podremos aprovechar las soluciones administradas como intermediarios entre las capas de nuestros sistema. De esta forma, las fallas y el escalamiento de un componente o una capa son manejados automáticamente acorde a las mejores prácticas de AWS.

¿Cómo ayudan los servicios en la nube a crear un acoplamiento flexible?

En AWS, contamos con dos soluciones principales para la tarea de crear un acoplamiento flexible que se adapte a las mejores prácticas:

  • Balanceadores de carga
  • Colas de mensajes
Debemos diseñar arquitecturas con componentes independientes.

La primer solución, Elastic Load Balancing (ELB), distribuye automáticamente el tráfico de aplicaciones entrantes a través de varios destinos, tales como instancias de Amazon EC2, contenedores, direcciones IP y funciones Lambda. Además puede controlar la carga variable del tráfico de nuestras aplicaciones en una única zona o en varias zonas de disponibilidad. En resumen Elastic Load Balancing ofrece el nivel necesario de alta disponibilidad, escalabilidad automática y seguridad para que nuestras aplicaciones sean tolerantes a errores.

Otro ejemplo de arquitectura correctamente acoplada con componentes independientes.

Por su lado la solución de colas de mensajes de AWS, llamada Amazon Simple Queue Service (SQS), es un servicio de colas de mensajes completamente administrado que permite desacoplar y ajustar la escala de microservicios, sistemas distribuidos y aplicaciones sin servidor.

SQS y ELB están diseñados, como la mayoría de los servicios en la nube, para elimina la complejidad y los gastos asociados con la gestión y nos permite a los administradores y desarrolladores enfocarnos en la diferenciación del trabajo.

Conclusión sobre las mejores prácticas

En este artículo dimos un vistazo rápido a algunas de las mejores prácticas en AWS: Escalabilidad, automatización, utilización de recursos desechables y acoplamiento de componentes.

Es importante incluir estas mejores prácticas en nuestros diseños, no solo para reducir el costo de los servicios en la nube para nuestra organización si no también para brindar la mejor experiencia de usuario posible a nuestros clientes.

¿No está seguro de cómo ajustar las mejores prácticas en su organización? Contáctenos y reciba la asistencia de nuestros técnicos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.