¿Cómo enfrentarse a una migración Cloud de éxito?

Antonio Pérez09-Ago, 2019

Desde hace algún tiempo estamos continuamente bombardeados con las aplicaciones en el Cloud o en la nube. Hemos oído todas las ventajas que nos proporcionan los distintos servicios en la nube como Microsoft Azure, Google Cloud o el todopoderoso Amazon Web Services (AWS), por lo que, en alguna ocasión, te habrás preguntado si te conviene migrar tu web al Cloud o qué necesitas para hacerlo. En este artículo os damos las claves para ayudar en la decisión y, si se hace, algunas indicaciones para que el proceso no sea tan traumático.

¿Debo migrar al Cloud?

Esta será la primera decisión que se debe tomar, teniendo en cuenta que si se tiene una web corporativa en WordPress o una pequeña tienda online que funciona a nivel local en el país, probablemente con el propio Hosting o un servidor privado virtual (VPS) sea más que suficiente. Hay que considerar que una migración al Cloud tiene una curva de aprendizaje pronunciada y necesita más mantenimiento que una web normal, ya que son bastantes más servicios los que se deberán manejar.

Por otra parte, existen algunos indicadores que ayudarán a entender cuándo sería recomendable migrar una aplicación web a la nube.

Aplicación web que usa bastantes recursos de servidor

Si el uso de servidor necesita mucho proceso, o un uso intensivo, probablemente serán útiles algunos servicios Cloud específicos, como el servicio Lambda de AWS. Son servicios en los que se pueden externalizar ciertos procesos y que no consumirán recursos del servidor que gestiona el tráfico. Además, con este tipo de servicios solo se pagan los recursos necesarios por tiempo limitado mientras están en uso. Una vez terminado el proceso (tratamiento de imágenes, por ejemplo), este se desactiva y no se carga más coste por esos recursos.

Aplicación web que maneja varias bases de datos o una base de datos muy grande

Algo muy útil en este tipo de aplicaciones es utilizar un servidor de base de datos independiente del servidor que soporta el proceso para que el funcionamiento de la base de datos y las peticiones que le lleguen no se queden esperando mientras se estén ejecutando otros procesos. Mejora mucho el rendimiento de una base de datos usar un servidor específico de base de datos en lugar de alojarla en el mismo servidor que la aplicación.

Picos de tráfico muy pronunciados o actividad puntual muy acusada

Una característica que se agradece mucho es un servicio de auto escalado con balanceado de carga automático. Gestionar esto a mano puede dar más de un quebradero de cabeza, por lo que un arranque de servidor automático en picos de tráfico o de necesidad de recursos puede ser de mucha ayuda. Además, se apaga de manera autónoma cuando no es necesario. Esta sería una de las razones que hacen que merezca la pena una migración a la nube.

Usuarios procedentes de muchas zonas del mundo diferentes

En el caso de que una aplicación reciba conexiones desde otros países distintos al que está alojada la empresa puede provocar que la latencia de un servidor sea superior. Esta latencia es el tiempo desde que un navegador hace una petición hasta que recibe el primer byte de información. Por lo tanto, es importante reducir este factor para que una web ofrezca una buena experiencia de usuario.

Para evitar esta latencia, va a ser necesario una Content Delivery Network (CDN). Así, se generará un sistema de espejos del contenido en distintas zonas del mundo y, automáticamente, dirigirá a los usuarios al nodo más cercano a su localización. Este es otro de esos servicios autogestionados por el proveedor Cloud que darán un punto de calidad al funcionamiento de una aplicación web, haciendo que funcione mucho mejor en todos los mercados en los que se trabaje.

Pasos preliminares

Es muy importante saber cómo funciona una aplicación a nivel de rendimiento. Como tener la máxima información en este punto es básico, hay algunas herramientas que ayudan a monitorizar el comportamiento. Puede utilizarse la archiconocida New Relic, que proporciona información muy detallada acerca del rendimiento del servidor, tiempos de respuesta de las peticiones que se hacen a la base de datos o desde las vistas de la propia aplicación, número de peticiones por minuto, consumo de memoria…

Recabar esta información va a ayudar mucho a saber exactamente qué partes funcionan mejor y los posibles cuellos de botella que existen en la aplicación, datos de vital importancia a la hora de elegir el tipo de servidores que vas a necesitar, cantidad de memoria, tipo de servidor de bases de datos, etc.

¿Qué proveedor Cloud elegir?

En realidad, cualquiera de los principales proveedores puede servir. En este caso, nuestra recomendación es que se seleccione uno y se aprenda lo máximo posible sobre él, ya que la curva de aprendizaje de una plataforma Cloud es bastante pronunciada.

Un aspecto muy importante en la elección de un proveedor Cloud es la capacidad de monitorizar el entorno de producción. Para ello, habrá que buscar el que ofrezca esta opción teniendo en cuenta que debe ser sencillo detectar posibles problemas o conocer las causas que pueden provocar determinadas situaciones (como una caída).

Otro punto básico es el soporte técnico. Los entornos Cloud son bastante complejos y tienen muchos servicios funcionando simultáneamente, por lo que un poco de ayuda por parte del proveedor nunca está de más. Un buen soporte va a hacer que las recuperaciones de posibles incidencias sean mucho más rápidas y evitar emplear tiempo en tener que investigar qué problemas existen en un entorno algo desconocido.

Los principales proveedores son los que se han mencionado anteriormente: Microsoft Azure, Google Cloud y Amazon Web Services. Quizá el más extendido y del que más documentación se puede encontrar (e información en Stack Overflow) es AWS. En Digital55 ya llevamos bastante tiempo trabajando con este proveedor Cloud por las razones expuestas hasta ahora.

¿Cuáes son los aspectos críticos que se deben migrar?

Base de datos

La base de datos es el elemento más crítico que se puede encontrar en una migración Cloud. Lo habitual es realizar una copia de la base de datos y restablecerla tal y como está. En este punto se debe actuar de manera diferente dependiendo de si se puede permitir tener un tiempo de parada o no.

Si se puede disponer de este tiempo, lo mejor es hacer la copia y el restablecimiento de la base de datos en un momento en el que el tiempo de inactividad de la aplicación sea el mínimo posible.

En el caso contrario, habrá que tener más cuidado, ya que se tendrá que modificar el software para que la exportación de la base de datos se produzca mientras esta está funcionando. Además, hasta que se complete la migración, la nueva información se tendrá que almacenar simultáneamente en ambas bases de datos.

Archivos

Este es un punto crítico, ya que si se desea que la migración sea invisible a los usuarios de la aplicación habrá que tener mucho cuidado con las rutas y trasladar todos los archivos (imágenes, documentos, etc.) tal y como estén.

También se tendrá que considerar la probabilidad de que la cantidad de información que se deba migrar o transferir sea bastante grande y ocupe varios terabytes. Esto hace que los procesos sean muy lentos, por lo que habrá que tener en cuenta esto en el timing de la migración.

¿Cuándo hacer el cambio de un servidor a otro?

El cambio de los DNS del dominio va a ser un momento tenso. Hay que intentar minimizar el riesgo y planificar de antemano un tiempo de prueba en el que ambas aplicaciones funcionen a la vez.

Esta es una muy buena práctica que permitirá asegurarse de que todo está funcionando correctamente antes de exponerlo a los usuarios. También se pueden realizar algunas pruebas con un número reducido de usuarios de confianza en uso real de la aplicación. Una vez asegurado el perfecto funcionamiento con este cambio, será el momento de decidir cambiar los DNS del dominio a la nueva arquitectura Cloud.

A partir de aquí, ya estaría migrada la aplicación a un entorno Cloud y un mundo de posibilidades a explorar para mejorar el funcionamiento a través de servicios hasta este momento difícilmente accesibles si no es con un proveedor en la nube.

Antonio Pérez

Full Stack Developer. Desarrollo con Ruby on Rails, Angular, APIs y Bases de Datos.