Más allá de los Fundamentos de la Arquitectura de Software

MarkRichards_software_architecture
Sin categorizar

Más allá de los Fundamentos de la Arquitectura de Software

Gracias al GSAS tuve la oportunidad de asistir al tallerArchitecture, the hard parts” impartido por Mark Richards. Para los que no lo conozcan, Mark es un arquitecto de software especializado en Service-Oriented Architectures. Fue uno de los mejores talleres a los que he tenido el placer de asistir en arquitectura de software. 

En este taller Mark nos muestra las diferencias entre los diferentes tipos de arquitectura monolito y distribuida. Nos proporciona amplios ejemplos basados en casos reales de cuándo implementar cada una de ellas y las posibles soluciones a los tradeoff.

No existe la arquitectura perfecta para un proyecto, dependiendo de las necesidades de tu negocio se adaptará mejor una u otra. Hoy me gustaría hablar sobre la arquitectura basada en servicios.

Service-based Architecture

Una Arquitectura Basada en Servicios es una arquitectura que se define como pragmática y distribuida, un punto intermedio entre una Arquitectura Monolito y una Arquitectura de Microservicios. 

Fuente: Mark Richards Workshop

En comparación con las arquitecturas totalmente distribuidas consta de varios puntos diferenciadores en los que cabe destacar la granularidad de los servicios y el scope de la base de datos.

A diferencia de los microservicios los componentes son más flexibles y menos atómicos. Esto permite realizar operaciones de negocio más complejas y mejorar los problemas de orquestación y transacción al agrupar varios módulos.

La base de datos es un recurso compartido, lo que mejora la performance porque reducimos las llamadas a otros servicios para acceder a los datos.

En contrapartida, refactorizar una base de datos entera puede que no sea posible. Los cambios en una tabla son un poco más difíciles al crearse un acoplamiento al esquema de datos.

Además, los servicios no serán tan atómicos convirtiéndolos en algo más difíciles de desarrollar y testear. Lanzar una nueva versión requiere más planificación.

Sin embargo, si la comparamos con una arquitectura monolito obtendremos ventajas significativas como es el desacoplamiento entre módulos, un mejor control sobre el desarrollo, estabilidad y escalabilidad. Permitiendo así ganar el time to market.

En definitiva, obtendremos una arquitectura robusta, fácil de entender, bien organizada con componentes que se pueden recomponer, adaptar y escalar de manera independiente.

Adoptando Arquitectura Service-based

Para adoptar la arquitectura basada en servicios no basta con dividir la aplicación en pequeños componentes. Una arquitectura modularizada en partes muy grandes puede generar problemas de orquestación e interdependencia entre servicios, sin embargo una muy granulada en componentes pequeños puede generar problemas transaccionales. 

Hay muchas maneras para migrar la arquitectura, pero una manera básica sería de la siguiente forma: 

– Cambiar la estructura de paquetes de capas técnicas en capas de dominio de nuestro monolito. Para este caso podemos hacer uso de los patrones de DDD como puede ser Aggregate o Bounded context. De esta forma no solo dividimos la estructura sino que reducimos el coste del cambio.

– Identificar los contextos de nuestra aplicación

– Agrupar los paquetes de dominio en componentes mediante:

    • Business functionality groupings: Como su nombre indica, sería agrupar componentes por funcionalidades de la aplicación. 
    • Transactional boundaries: Una forma de identificar los transactional boundaries es si cada vez en una request tenemos que actualizar dos componentes: el ítem y el inventario (account y customer), quizás deberíamos unir esos componentes. 
    • Deployment goals: En ciertas circunstancias nos encontramos que un componente cambia constantemente y el resto de la aplicación no. Esto es un indicativo que deberíamos extraer ese componente como una unidad deployable.
    • Scalability needs: A veces necesitamos mejorar la performance de un componente o un caso de uso específico.  

    Iterando estos pasos, lo que implica desacoplar todo lo que podamos y tener en cuenta que a mayor distribución y granularidad aumenta la complejidad, podemos conseguir la arquitectura adecuada.

    Y como Mark Richards dijo: “Embrace modularity, but be cautious of granularity.”

    Echa un vistazo a los testimonios del Workshop de arquitectura de software:

Leave your thought here

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Image
  • SKU
  • Rating
  • Price
  • Stock
  • Availability
  • Add to cart
  • Description
  • Content
  • Weight
  • Dimensions
  • Additional information
Click outside to hide the comparison bar
Compare

Membresías

¿Interesado en más workshops?

Suscríbete y recibe nuestro boletín de noticias
Tu información nunca será compartida con terceros