Alta disponibilidad con servicios en la Nube

José Javier Barreda Mancilla

Estudiante de Ingeniería en Ciencias y Sistemas - USAC

Palabras Clave:
Redundancia, Fallas, Balanceo de Carga, Principios, DevOps.

La alta disponibilidad es una propiedad que hasta hace algunos años era muy difícil lograr, ya que para que un sistema informático sea altamente disponible existen dos métricas que deben optimizarse:

  • El tiempo medio para recuperarse.

  • El tiempo medio entre cada falla. [1]

Es decir, cuando se habla de un sistema altamente disponible se refiere a un sistema que falla muy pocas veces y cuando lo hace, se recupera en un tiempo muy corto. Esto se logra creando una redundancia de cada una de las partes del sistema, lo que significa que si antes se tenía una fuente de electricidad, ahora son necesarias dos, si se tenía un proveedor de internet, ahora se deben duplicar y así sucesivamente con cada una de las partes del sistema, esto con el fin de que si una falla, se active un proceso que inmediatamente permita que el sistema siga trabajando. Entre más transparente sea este proceso para los usuarios, mayor será la disponibilidad del sistema. Una intervención humana en los procesos de recuperación haría que fuera demasiado lento, por lo que el proceso debe ser totalmente automatizado, solo así se obtendrá un sistema que tiene una baja tasa de fallos y un tiempo de recuperación muy breve.

Si bien la alta disponibilidad es una propiedad muy conveniente, no siempre es necesaria, en aplicaciones que tienen una cantidad limitada de usuarios o que funcionan bajo un horario estricto de trabajo, la alta disponibilidad representa un gasto innecesario, por otra parte, existen aplicaciones como los sitios de comercio electrónico, redes sociales, comunicación o transporte las cuales necesitan que sean accesibles en cualquier momento; para esta clase de aplicaciones la alta disponibilidad es un factor determinante.

Los servicios en la nube

Los servicios de la nube permiten que, al momento de crear una aplicación, no sean preocupación varios factores, principalmente el hardware. Para este pueden configurarse las especificaciones que parezcan más convenientes, sin embargo ¿pueden fallar? la respuesta es sí, ¿se recuperan automáticamente? No necesariamente, por esta razón no deben confundirse los términos, un sistema alojado en la nube no necesariamente es de alta disponibilidad.

La nube provee una gama muy amplia de herramientas que se pueden utilizar para este fin, se pueden crear infraestructuras que permitan la rápida recuperación del sistema. Los conceptos no cambian, se crea una redundancia para los dispositivos, se deben monitorear las partes y se crea un proceso de recuperación.

Una de las formas básicas de crear un sistema de alta disponibilidad en la nube es siguiendo la infraestructura de la Imagen #1.

Imagen 1: Diagrama de Infraestructura de alta disponibilidad en AWS Fuente: Nubity

Tomando como referencia algunos servicios provistos por Amazon Web Services (AWS), en esta infraestructura se pueden encontrar componentes que seguramente tienen sus equivalentes con otros proveedores como Google Cloud o Microsoft Azure:

- Route 53: es un sistema de nombres de dominio (DNS) escalable y altamente disponible. Permite encontrar la dirección IP a la que pertenece un dominio. [3]

  • ELB: el servicio de Balanceo de carga distribuye el tráfico entrante de manera equitativa entre los múltiples recursos, esto permite que un solo recurso no se sobrecargue de trabajo. Los recursos que fallan pueden ser reemplazadas sin problemas detrás del balanceador de carga mientras que los restantes continúan operando. [7]

  • EC2: las instancias de EC2 (M4 en la Imagen 1) proporcionan capacidad de cómputo, significa que son máquinas virtuales destinadas al procesamiento de datos. [3]

  • RDS: Amazon Relational Database Service es un servicio de bases de datos relacionales de fácil configuración, operación y escalabilidad. [3]

  • AZ: las zonas de disponibilidad se refieren al lugar físico en donde se encuentran hospedados los servicios. AWS posee datacenters ubicados en diferentes partes del mundo y es posible escoger en donde se desea alojar el sistema. [4]

  • AutoScaling Group: es una agrupación lógica que tiene como objetivo escalar automáticamente según una serie de reglas preestablecidas. Este escalado se puede utilizar para aumentar o disminuir la cantidad de instancias del grupo. [5]

Si se regresa a los conceptos básicos, puede verse que existe una redundancia en las unidades de procesamiento y en la base de datos, el balanceador de carga se encarga de distribuir el tráfico a instancias ubicadas en zonas de disponibilidad diferentes, esto quiere decir que, aunque un datacenter sea destruido el otro seguirá funcionando y permitiendo acceder al sistema, de igual forma la base de datos es replicada en otra zona de disponibilidad lo cual asegura el resguardo de la información.

Las unidades de procesamiento son constantemente monitoreadas por el balanceador de carga, se comprueba el estado de cada unidad por medio de un mecanismo llamado healthcheck, el cual le permite conocer el estado de la unidad, si alguna falla, este le indica al autoscaling group que cree una nueva y que destruya o vuelva a configurar la que está en mal estado, si la carga es demasiado alta le indica que agregue las necesarias para aliviar el sistema y de forma opuesta si la carga es demasiado baja le indica que reduzca la cantidad de instancias en el grupo. [6]

Cada uno de los procesos descritos serán totalmente trasparentes para los usuarios del sistema, si la base de datos colapsa habrá un respaldo, si las instancias fallan existe un respaldo en otro lugar, por esta razón el sistema se vuelve altamente disponible. Existen otras soluciones en donde básicamente se obedece el mismo esquema, con la excepción que pueden cambiar tecnologías, utilizar otros métodos de almacenamiento, independizar las funcionalidades (microservicios) o agregar componentes extras necesarios para cumplir con ciertos requerimientos.

No existe un límite para aplicar los conceptos de la alta disponibilidad mencionados, incluso se puede considerar ¿Qué pasaría si toda la red de AWS tiene un fallo crítico? ¿Es posible crear una redundancia para mi proveedor de servicios en la nube?

Conclusiones

  • La alta disponibilidad implica tener una redundancia de todos los dispositivos que puedan fallar.
  • Monitorear las partes del sistema permitirá actuar antes que el sistema falle.
  • Los balanceadores de carga permiten la redundancia de las unidades de procesamiento, llevando el tráfico de manera equitativa a cada una de las instancias.
  • Es importante crear siempre un respaldo de la base de datos en donde se vaya a almacenar la información.

  • Cada proveedor de servicios en la nube posee sus propias herramientas o componentes equivalentes, cumplen las mismas funciones, aunque puede que posean nombres diferentes y maneras de implementar diferentes.

Referencias