Seleccionar página

¡Divide y vencerás!

 

Actualmente cuando hablamos de la migración de una aplicación web al Cloud se aconseja vivamente adaptar nuestra aplicación para poder aprovechar los beneficios que ofrecen los proveedores Cloud.

En particular es muy beneficioso aplicar el desmembramiento de nuestra aplicación en micro-servicios.¿Qué es esto? Es separar las partes que tienen una funcionalidad concreta en nuestra aplicación para poder encapsularlas en un servicio autónomo y auto-escalable.

Velocidad y ahorro de costes

Lo curioso es que con esta técnica mejoramos la velocidad y la experiencia de usuario de nuestra aplicacióndejando de lado la eficiencia en el código o los servicios. El motivo de esto es que en el Cloud el uso de computación es decididamente más económica que en un entorno clásico, y utilizar alegremente más recursos no es un riesgo importante en los costes de la infraestructura en la Nube, pero si lo es perder usuarios o ventas porque nuestra aplicación tiene un cuello de botella en alguna de sus partes.

 

Una funcionalidad es un microservicio

Microservicios típicos que podemos encapsular son servicios de bases de datos, almacenamiento efímero de datos como índices o caches, colas de sincronización de tareas, servicios de indexación de contenidos, pasarelas de correo electrónico… La lista es tan larga como compleja sea nuestra aplicación.

El universo de proyectos Open Source es una fuente fértil de opciones para microservicios dado que la dinámica propia de creación y mantenimiento de comunidades encaja con la solución a un problema concreto, esto es, cada proyecto nuevo Open Source suele responder a un problema concreto en el mundo de sistemas o desarrollo de software.

Una solución puede ser usada como un microservicio si:

  • Pueden escalarse de manera contenida con técnicas específicas a su función: Federaciones, clústeres, activo pasivo….
  • Se comunican a través de protocolos de alto nivel basados en http.
  • La interacción se realiza a través de REST APIS.
  • Pueden asegurar un tiempo de respuesta. Dado que pueden tener respuestas predefinidas si el servicio no está disponible se evitan las colas esperando.

Un ejemplo práctico, una aplicación de gestión de pedidos.

En este ejemplo tenemos una aplicación monolítica que tiene un diseño típico: frontend, backend (donde reside la inteligencia de negocio), mantenimiento y notificaciones.

Vamos a explicar como desmembrar de manera simplificada esta aplicación en microservicios y cómo añadir otros microservicios que mejorarán la rapidez y respuesta del sistema.

  • La división entre las diferentes partes funcionales de la aplicación es en sí el primer paso para utilizar micro-servicios. Los frontends web van por un lado, mientras que la lógica de negocio por otra e importante en ver que el servicio de notificaciones y las tareas de mantenimiento puedes encapsularse e ir a su aire.
  •  Otro servicio concreto es el servicio de caché de contenidos estáticos que mejora enormemente la entrega de contenidos y la computación necesaria, utilizaremos el project Varnish.
  • También es beneficioso encapsular el uso de almacenamiento temporal de datos como las iD de sesión o las listas de variable de sesión, y Redis es una opción muy sólida. De esta manera reducimos el número de acceso a base de datos relacional y podemos mantener información de sesión de usuario entre varios servidores frontales.
  • El motor de búsqueda de contenidos puede cargar un sistema hasta el punto de colapsar las máquinas, el uso de SolR soluciona esto de manera y además puede ser escalado.
  • Aún más, dado nivel de coordinación de mensajes se hace una gestión de colas con RabbitMq y de procesos con Celerys entre las diferentes partes del aplicativo.
  • Concentraremos el análisis de logs con un Logstash, esto es necesario puesto que parte de nuestra infraestructura puede incrementarse para dar servicio a un aumento de conexiones (esto es CLOUD!) pero desaparecerá tras este pico, y el registro de su actividad no debería desaparecer.

 

No todo son ventajas. Esta arquitectura implicará modificaciones de código en nuestra aplicación, pero también una simplificación de código al externalizar funcionalidades y repartir la responsabilidad de programación de aplicaciones entre diferentes proyectos y comunidades.

Cabe destacar que cada una de las partes es escalable y cada parte es capaz de gestionar autónomamente fallos o problemas de servicio.

En definitiva, los microservicios han pasado a ser la norma en los diseños de sistemas en Cloud o de aquellos que se van a migrar. Y en Ackstorm somos especialistas en ayudarte tanto con el diseño como en el proceso de migración de estos sistemas. Los desarrolladores no tienen porqué que afrontar estos procesos solos, desde Ackstorm podemos acompañarlos mitigando los riegos o errores de diseño, implementación y migración.

 

Espero que el artículo os haya sido de ayuda, si queréis saber más sobre el Cloud no dudéis en echar un vistazo al resto de nuestro blog.