La SPRINGIO de este año ha traído varias novedades pero ha venido a asentar principalmente la programación reactiva con el ecosistema de Spring Webflux y el uso de arquitecturas basadas en eventos y mensajes.

Webflux es un nuevo (o reciente) módulo de Spring para facilitar la gestión asíncrona y paralela del desarrollo con Java, lo que implica principalmente un mejor uso de los recursos de infraestructura, ya que no existen bloqueos de threads y esos recursos permiten seguir ejecutando otras peticiones tanto síncronas como no asíncronas. Uno de los principales cambios es que ya incluyen el soporte de Netty para la gestión ​non-blocking​ de threads.

spring webflux

Este enfoque asíncrono es el que permite y facilita el uso de arquitecturas ​event-driven​ . En este tipo de arquitecturas es interesante el uso de algún sistema que maneje estos eventos o mensajes como kafka, rabbitmq u otros. El uso además de estas plataformas añade un aspecto interesante, y es la resiliencia que añade a toda la arquitectura.

spring webflux

Cuando la comunicación entre (micro)servicios se realiza a través de eventos se desacoblan las interfaces y conexiones de manera que se mejoran los siguientes aspectos:

– Desacoblamiento​: los brokers de la ​queueu ​ en particular desacoblan servicios y sus contratos en las funciones o APIs.

– Flujos asíncronos​: una acción de un usuario puede desencadenar varios o múltiples procesos subsecuentes, tanto síncronos como asíncronos.

– Datasets agregados​: es más sencillo combinar datos entre diferentes fuentes y permite la posibilidad de filtrar, agregar o reducir la información que cada consumidor necesita.

– Trazabilidad​: Las colas actual como una auditoría ​per se​, por lo que podemos tener trazabilidad de toda comunicación a través de sus ​commit log.

– Estado​: los gestores de eventos o colas permiten disponer de copias locales en local, ahorrando consultas posteriores.

Esta estrategia de eventos, es el concepto además de los patrones como SAGA para adoptar estrategias de transaccionalidad y compensación del estado de los datos.

Por otro lado, dentro de este enfoque de eventos asíncronos, aparecen constantemente los Reactive Streams, una especificación que se potencia y simplifica con Java 9 (una de sus novedades) y que va alineado a facilitar el desarrollo reactivo (Reactive programming) que implementa patrones ya conocidos y antiguos como el de Publisher/Subscriber.

Todo esto concede una flexibilidad en arquitecturas de la que se puede sacar provecho en muchos casos. Como siempre, cada proyecto o necesidad tendrá unos requerimientos
(funcionales y no funcionales) y no siempre este tipo de desarrollo reactivo y comunicación por eventos aportará valor. Y por otro lado (alguna contra tenía que comentar), este tipo de soluciones añade cierta complejidad o curva de aprendizaje inicial a tener en cuenta cuando se diseñan arquitecturas, por lo que siempre hay que encontrar ese ​trade-off ​ donde compensa y se saca algún beneficio.

References:
https://spring.io/
https://​reactivemanifesto.org
https://projectreactor.io/
https://microservices.io/patterns/data/saga.html

Author: Joan Bonilla

 

Quizá también te interese…

telepresencia
La Telepresencia del Futuro

La Telepresencia del Futuro

Poder asistir a un meeting o reunión de forma remota es algo que hoy en día tenemos más que asumido. Cuando pensamos en telepresencia, lo primero que se nos pasa por la cabeza es utilizar una llamada telefónica o enviar nuestra imagen mediante una webcam...

Pin It on Pinterest

Share This