Hoy en día tener una infraestructura de máquinas para dar servicio a miles de clientes alrededor del mundo es mucho más fácil y barato que hace años. Y todo esto gracias a los proveedores de cloud computing de confianza, que además de escalables y económicos, cada vez son más sencillos de configurar y usar.
En Nelio, hemos tenido que aprender a montar sistemas «en la nube» para nuestros plugins premium para WordPress, Nelio A/B Testing y Nelio Content. Si no conoces estos dos plugins (me extrañaría, ya que te hemos estado hablando de ellos siempre que hemos podido), te recomiendo que les eches un vistazo a sus funcionalidades, porque seguramente te interesan ?
En nuestra empresa, no tiene ningún sentido gastar miles de euros para comprar máquinas (servidores, principalmente) para poder crear los sistemas que dan soporte a nuestros plugins (y por consiguiente, a nuestros clientes) cuando por una fracción mínima del coste podemos tener lo mismo en la nube y con muchas más ventajas.
Las mejores son la escalabilidad y el mantenimiento. Si en un momento dado tenemos un pico de carga en el sistema, no tenemos que preocuparnos ya que el cloud escala solo. Imagínate que tuviera que estar todo el día atento a los servidores para ver si tengo que comprar más, o tener que controlar si se estropean los discos duros… ¡No podría hacer nada más!
Es posible que si estás planteándote crear un sistema en la nube creas que todo esto es muy complicado para ti. Pues te diré que no es así. La llegada de las tecnologías serverless están ayudando a acercar el «temido» cloud a los desarrolladores, sin tener que necesitar la supervisión de administradores de sistemas.
Para Nelio A/B Testing empezamos en 2013 a usar Google Cloud para montar toda la infraestructura, ya que veníamos de trabajar con el lenguaje de programación Java, y Google AppEngine era mucho más sencillo de usar por novatos como nosotros por aquella época.
Sin embargo, las cosas han ido evolucionando un montón y ahora es Amazon Web Services el que ha tomado la delantera (bajo mi punto de vista) en simplificar el uso de tecnologías cloud para desarrolladores poco acostumbrados a administrar sistemas. Como muestra de ello, en este artículo te voy a explicar brevemente las tecnologías cloud que hemos usado para montar todo el sistema en la nube de Nelio Content.
Arquitectura de Nelio Content en el Cloud
Cuando empezamos a crear Nelio Content, tuvimos que decidir si montábamos todo en la nube de Google, o si nos pasábamos a Amazon. Ten en cuenta que seguir en Google significaba reutilizar todos los conocimientos y la experiencia adquiridos creando Nelio A/B Testing ?
Pero no lo podemos evitar, en Nelio nos gustan los retos, y personalmente, tenía el feeling de que era hora de dar el salto a Amazon ?. Además, justo en ese momento se lanzaron varias tecnologías dentro de la nube de Amazon que nos ayudaron a auto-convencernos de que estábamos haciendo lo correcto.
Después de un par de meses de duro trabajo y de leer documentación a todo trapo (por cierto, la documentación de Amazon es fantástica), el resultado lo puedes ver en el siguiente esquema:

Aunque está bastante simplificado, puedes ver que con sólo 6 componentes de Amazon Web Services puedes montar todo un sistema potente en el cloud, que actualmente da soporte a todos nuestros clientes de Nelio Content, que por cierto, ya son unos cuantos ?
Pasemos a ver brevemente qué hace cada componente…
Amazon API Gateway
Este es el punto de entrada de nuestro sistema en la nube para Nelio Content. Amazon API Gateway es un servicio totalmente administrado que facilita a los desarrolladores la creación, la publicación, el mantenimiento y la monitorización de APIs.
La comunicación entre el plugin para WordPress de Nelio Content y el sistema en la nube de Nelio Content se hace mediante una API REST (si, como la tan famosa API REST de WordPress), que hemos creado con Amazon API Gateway.

Montar tu API con este componente de Amazon es más fácil que montar un mueble de Ikea. No hace falta ni que sepas programar, lo puedes hacer todo con la interfaz de usuario de la consola de Amazon. Aunque nosotros usamos Swagger, para tener toda la API definida en un archivo YAML, que cargamos en API Gateway cada vez que hay una actualización. ¡Una maravilla ?!

Nelio A/B Testing
Pruebas A/B nativas en WordPress
Usa tu editor de páginas favorito en WordPress para crear variaciones y lanza pruebas A/B con solo un par de clics. No se necesita saber nada de programación para que funcione.
Amazon Lambda
Este componente es el más importante de todos. AWS Lambda es un servicio de computación sin servidores (lo que hoy se conoce como serverless) que ejecuta el código que tu programas como respuesta a eventos y administra automáticamente todo, por lo que no tienes que preocuparte por servidores ni configuraciones complejas.
Por tanto, tu programas una función y la subes como un fragmento unitario de tu sistema (lo que llamamos una función lambda). Lo más interesante de todo es que puedes conectar cada una de estas funciones con una de las llamadas de la API que creaste con API Gateway. De esta forma, la función se ejecuta cada vez que hay una petición específica de la API, y lo que retornes es lo que devolverá la llamada de la API. Así de simple. Y además es barato, porque sólo te cobran por el tiempo de ejecución de tus funciones.

Ahora mismo Nelio Content tiene más de 70 funciones lambda programadas en NodeJS, y seguimos ampliando el sistema en cada mejora. La verdad es que tener todo tu sistema de esta forma hace que sea mucho más sencillo de mantener, ya que si encuentras un fallo en una función, tan solo has de arreglarla y re-subir la función. Lo demás no se ve afectado, por lo que es una muy buena solución que te recomiendo estudiar.
Amazon DynamoDB
Otro pilar importante de todo sistema es el almacenamiento de los datos. En nuestro caso, y aunque hay otras opciones más tradicionales disponibles en Amazon, hemos optado por guardar los datos en Amazon DynamoDB, una solución NoSQL con latencias de milisegundos.

Si no estás acostumbrado a usar NoSQL, tendrás que cambiar un poco el chip, ya que cada tabla puede almacenar filas con diferentes columnas (excepto las claves primarias, que han de estar presentes en cada ítem guardado). Además, las tablas se definen pensando en cómo consultarás los datos, ya que no puedes hacer joins entre tablas y has de tirar de índices siempre que puedas para aumentar la eficiencia de tus consultas.
Después de varios meses aceptando datos y guardándolos en DynamoDB, seguimos contentos con los tiempos de respuesta y todo lo que nos proporciona este componente.
Amazon S3
Quizás este es el componente más conocido por la mayoría de personas que han oído hablar alguna vez del cloud de Amazon. Se trata de un sistema de almacenamiento de archivos estáticos, y habitualmente se suele usar en WordPress para subir los archivos de imagen ahí en webs con altas necesidades de almacenaje.
En nuestro caso usamos Amazon S3 para las copias de seguridad de los datos de Amazon DynamoDB. También tenemos algún que otro archivo estático ahí, pero principalmente el uso que le damos es para almacenaje para recuperar datos en caso necesario.
Amazon SNS
Amazon SNS es un sistema de notificaciones. Nosotros lo usamos como si de un sistema de colas se tratase. Es decir, cuando tenemos que procesar objetos en gran cantidad, los encolamos en SNS y automáticamente se irán procesando uno a uno por el consumidor de la cola. Y lo mejor de todo es que ese consumidor puede ser una función lambda, con lo que todo queda bien recogido ?.
Amazon SES
Por último, si necesitas enviar correos electrónicos a tus clientes, la mejor opción es usar Amazon SES. Este componente nos permite enviar correos electrónicos programaticamente a las cuentas de correo que queramos.

Nosotros lo usamos para enviar correos a los usuarios que están en free trial de forma que podamos ir ayudándoles a entender cómo funciona Nelio Content y así que se sientan más acompañados. También lo usamos para enviarnos correos a nosotros mismos cada vez que hay un evento nuevo en nuestro sistema de pagos y gestión de suscripciones. De este modo siempre estamos enterados cada vez que un cliente hace un pago, se suscribe o cancela.
Resumen final
Obviamente, a medida que hemos ido ganando experiencia con el cloud de Amazon hemos ido ampliando el uso de sus componentes. Al principio empezamos solamente con API Gateway, Lambda y DynamoDB, pero actualmente ya usamos muchos otros componentes (algunos no os los he puesto aquí para evitar volveros locos, ya que esto sólo pretendía ser una introducción).
Os animo a que echéis un ojo a lo que os ofrece tanto el cloud de Amazon como el de otros proveedores (léase Google, Microsoft, o incluso IBM). Si tienes experiencia al respecto, me encantaría leerla. ¿Qué opinas de nuestra arquitectura? ¿Te parece acertada o crees que podría hacerse mejor?
Imagen destacada de Anna Goncharova.
Deja una respuesta