Empecemos entonces, ¿qué quiere decir microservicios? Consisten en separar las partes que tienen una funcionalidad concreta en nuestra aplicación para poder encapsularlas en un servicio autónomo y autoescalable.
Microservicios: velocidad y ahorro de costes
Lo curioso es que con esta técnica de implementar microservicios, mejoramos la velocidad y la experiencia de usuario de nuestra aplicación dejando de lado la eficiencia en el código o los servicios.
El motivo de esto es que el uso de la computación en la nube es decididamente más económica que en un entorno clásico, y en principio utilizar 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.
Microservicios ejemplos: una funcionalidad es un microservicio
Microservicios ejemplos 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 ejemplos de 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.
Microservicios ejemplos: una aplicación de gestión de pedidos
En este microservicios de 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 cómo 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 microservicios. 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 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.