Hace bastante tiempo que os vengo hablando de arquitecturas serverless en la que microservicios sustituyen a servidores (o máquinas virtuales) encargados de ejecutar peticiones efímeras bajo demanda. Después de varios años trabajando para el proyecto de ilusia®, os voy a hablar de su arquitectura y los motivos por el que decidimos adoptarla.

Para los que no conozcáis que es ilusia®lo podemos describir de forma abreviada como un marketplace multiplataforma en la que los usuarios pueden realizar la compra online de forma cómoda y sencilla.

 

ilusia Arquitectura Serverless AWS 

 

Cuando se dispone de una idea y se plasma en un proyecto tecnológico, muchas veces solo se tienen en cuenta los requisitos funcionales y el lenguaje de programación que se utilizarán para su desarrollo, sin tener en cuenta la arquitectura que hará funcionar dicho proyecto. Esto puede ocasionar bastantes problemas a la hora de salir a producción al no conocer el impacto que tendrá el producto en el mercado y sin pruebas reales de usuarios. En las arquitecturas tradicionales, basadas en servidor, se suelen sobredimensionar para soportar las cargas en estos primeros días cruciales en la vida de la aplicación. Por el contrario, con la tecnología serverless nos podemos olvidar de esto ya que los recursos están disponible bajo demanda y con ello se consigue un ahorro de costes fijos debido a que no necesitamos tener una infraestructura encendida de forma continua cuando no se está utilizando.

ilusia® se comenzó a desarrollar con una tecnología para ser alojada en una arquitectura tradicional, pero después de un largo análisis de los servicios que dispone AWS y las ventajas que nos ofrecía el tener la aplicación de tipo serverless, se decidió comenzar de nuevo su desarrollo a finales de 2015 y después de un año de trabajo. Esta decisión, a corto plazo, puede parecer una locura para un proyecto, pero a medio o largo plazo nos compensaba con creces. 

AWS dispone de servicios que permiten utilizar arquitecturas serverless, como son Lambda para el computo y API Gateway para crear APIs y poder "mapear" las llamadas directamente a Lambda. Optamos por utilizar estos dos servicios para desarrollar la API, conectándose al servicio RDS que utilizamos para la base de datos, siendo el motor utilizado MySQL con miras de futuro de poder ser migrado a AuroraDB. Actualmente, disponemos de más de cincuenta métodos que permiten el funcionamiento óptimo de la aplicación.

Durante este nuevo desarrollo, se estudió el servicio Cognito para proteger ciertas llamadas a la API, a primera vista nos convenció ya que nos permitía controlar el inicio de sesión de la aplicación y saber qué servicios de la API estaba el usuario autorizado a acceder. Cuando un usuario es registrado con este servicio se crea un identity pool que dispone de espacio en memoria. La creatividad del equipo propuso que este espacio, compuesto por datasets, sirviese para almacenar los "carritos de la compra" de los usuarios y que siempre estuviesen sincronizados entre dispositivos. Los datasets almacenan los datos a través de clave/valor, por lo que la idea se puso en marcha. Los dispositivos móviles conocen en cada momento el estado del dataset gracias a las notificaciones silenciosas que reciben a través del servicio SNS, de esta forma los "carritos" están siempre sincronizados.

Otra dificultad que nos encontramos fue cómo ofrecer el catálogo de productos desde la API, si la base de datos continuamente tuviese que estar devolviendo esta información, muy posiblemente nos encontraríamos con un problema de rendimiento en el futuro. Era imposible utilizar un sistema de caché ya que los precios de los productos pueden cambiar con bastante facilidad. Después de varias pruebas y estudiar diferentes servicios, se optó por utilizar ElastiSearch, que nos ofrece documentos con miles de productos en milisegundos y a un precio muy reducido.

Desde el primer momento teníamos una cosa clara y era que las imágenes de productos iban a estar alojadas en el servicio por excelencia de AWS como es S3, que junto con Cloudfront podemos distribuirlas de forma sencilla.

En el siguiente esquema podéis comprobar la arquitectura de ilusia® para dispositivos móviles.

ilusia arquitectura serverless en AWS

Antes de comenzar a desarrollar la web, se analizó dónde se iba a alojar. Se probaron las instancias EC2 utilizando autoscalingElastic Beanstalk, pero nos encontrábamos nuevamente con una arquitectura tradicional basada en máquinas virtuales. Vimos que a través de S3 podíamos alojar páginas webs estáticas desarrolladas en HTML y Javascript, así que decidimos que el desarrollo se hiciese de esta forma realizando las pertinentes llamadas a la API. Aquí es donde se encuentra la magia de este tipo de arquitectura. Os invito a visitar el market de ilusia®. Cuando accedáis, pensad que lo que estáis viendo e interactuando se encuentra alojado en un bucket de S3 sin máquinas virtuales de por medio.

Junto con la web se utiliza el servicio Web Application Firewall (WAF), que permite tener de forma privada el entorno de desarrollo y protección contra peticiones maliciosas (que en un próximo post os explicaré como usarlo), además de Cloudfront para su distribución.

Podéis ver el funcionamiento de la arquitectura de ilusia® para el uso de peticiones desde la web.

ilusia arquitectura serverless en AWS

Cuando comenzamos a utilizar Lambda, nos encontramos con la dificultad de realizar los despliegues. No podíamos estar perdiendo el tiempo en subir los cambios de cada una de las funciones de forma manual, así que se decidió por desarrollar scripts propios para realizar los despliegues utilizando la API Boto3 de AWS. En la actualidad, existen frameworks que ayudan a realizarlo.

He de reconocer que haber llegado a este punto no ha sido fácil. Hemos sufrido bastantes adversidades por el camino debido a que a finales de 2015 ciertos servicios aún no eran lo suficientemente maduros para su uso; pero estamos totalmente satisfechos y casi que podríamos afirmar que hemos creado el primer marketplace serverless en España. Hoy en día, ilusia® ofrece su servicio a miles de usuarios sin problemas de rendimiento, sin miedos a picos de visitas y solo pagando por el uso de los servicios consumidos en AWS. 

Recuerda que tienes a tu disposición el blog de AWS para conocer las últimas entradas relacionadas con arquitecturas.


Compártelo:

FacebookTwitterDiggGoogle BookmarksLinkedIn

Daniel Romero Sanchez
Author: Daniel Romero Sanchez
Responsable de sistemas y Arquitecto Cloud - vExpert 2015/16 - VCP550-DCV - LPIC-1


Comentarios  

0 # RE: ilusia® - Un marketplace con arquitectura Serverless en AWSdaorte 07-02-2018 10:24
Muy muy interesante en verdad, entiendo que es una vista a mil metros de la arquitectura, pero sería interesante conocer la implementación de algunas de esas tecnologías que no son tan nombradas o comunes.

Que buen trabajo
Responder

DBigCloud en tu idioma

esenfrdeitptru

Gold Sponsor

 

vExpert 2017

DbigCloud newsletter

Suscribete a nuestra newsletter y recibe cada semana los mejores artículos seleccionados por DBigCLoud.
Email type
Please wait