Una de las ventajas más grandes que nos ofrecen los entornos cloud es la elasticidad. Esto es gracias al hecho de poder arrancar más servidores cuando más usuarios tenga la aplicación o pararlos cuando el tráfico disminuya. De esta forma, nos garantiza ofrecer un servicio óptimo con el coste más bajo. Además, con posibilidad de dar el servicio desde múltiples datacenters repartidos por todo el mundo para garantizar la alta disponibilidad de nuestra aplicación web en la nube.
Muchos piensan que por poner un servidor LAMP en una instancia EC2 en AWS o en una máquina virtual en Azure ya han migrado al Cloud y pueden aprovecharse de dicha ventaja. Enseguida se dan cuenta que no es así.
Los beneficios que nos puede aportar este escenario son casi nulos. La potencia de la nube reside en la multitud de servicios que los proveedores ponen a nuestra disposición, y el uso que nuestra aplicación hace de ellos.
En Geko Cloud hemos ayudado a muchos clientes a migrar sus aplicaciones a la nube, analizando el funcionamiento de estas y aconsejando como adaptarlas a los diferentes servicios para conseguir el rendimiento más óptimo y el máximo uptime con el coste más bajo.
Hay muchos puntos a tener en cuenta para poder realizar la migración con éxito, pero consideramos que existen 4 puntos básicos que toda aplicación web en el Cloud debe cumplir para para sacar el máximo partido a este tipo de soluciones:
Claves para una aplicación web en la nube: no trabajar con datos en local
La elasticidad implica la creación y destrucción de máquinas/instancias de manera dinámica. Por tanto, hay que tener presente que los datos de un servidor serán destruidos cuando se pare. Nuestra aplicación web en la nube tiene que estar preparada para tal eventualidad. Por ejemplo, si nuestra aplicación permite a los usuarios subir ficheros para que luego éstos sean consultados por el resto de usuarios, no podremos ubicarlos en un directorio local del servidor que atienda la petición.
Los diferentes proveedores nos ofrecen soluciones donde alojar nuestros ficheros para poder ser accedidos por las diferentes instancias de nuestra aplicación e incluso, en caso necesario, otros servicios.
Un ejemplo sería Elastic File System de AWS o File Storage de Azure.
No usar datos en sesión de usuario en el servidor
Los datos de sesión son información útil de cada usuario que se pueden guardar en el servidor. Habitualmente, son necesarios para un correcto funcionamiento de la aplicación. Estamos en la misma situación que el punto anterior. Para que nuestra aplicación web en la nube pueda beneficiarse de la elasticidad necesitamos dejar de depender del entorno en el cual se está ejecutando nuestra aplicación. Por tanto, requerimos de algún servicio que permita almacenar esta información y pueda ser accesible de manera rápida.
Para gestionar estas situaciones, los entornos Cloud nos ofrecen soluciones de base de datos de memoria como ElastiCache en AWS o Azure Redis Cache en Azure.
Utilizar cache para el contenido estático
El uso de cache hace que nuestra aplicación se libere de gestionar aquellas peticiones en las que el contenido no se modifica (p.e. una imagen). Si a esto le sumamos que dicha respuesta se ofrece desde diferentes partes del mundo en función de la situación geográfica del origen, se mejora la velocidad y se reduce el consumo de recursos en nuestros servidores. No obstante, la aplicación web en la nube tiene que ser consciente de este hecho para poder gestionar estas peticiones y controlar cuando tiene, o no, que actualizar un contenido.
Servicios como Cloud Front de AWS o Content Delivery Network de Azure están diseñados con este propósito.
Desplegar nuevas funcionalidades sin pérdida de servicio
El último punto que, en nuestra opinión, una aplicación web en la nube debe cumplir, es realizar despliegues sin pérdida de servicio. Después, realizar pruebas con un entorno idéntico al productivo y garantizar, en caso de problemas, la vuelta a la versión anterior. Esto debería hacerse de manera rápida y transparente para los usuarios.
Diseñar y construir este tipo de procesos puede resultar complicado, ya que requiere de amplios conocimientos de infraestructura, así de como de la tecnología utilizada por cada proveedor. Solo los podremos implementar con éxito si establecemos sistemas automatizados de control de cambios, despliegue, y gestión de la infraestructura.
Si tienes en mente, o estás valorando el hecho de migrar tu aplicación web a la nube, y necesitas a alguien que te ayude o te guíe en todo el proceso, no dudes en ponerte en contacto con nosotros.