Introducción a la arquitectura de microservicios

La arquitectura de software es un concepto difícil de definir, la IEEE lo define como “el concepto de más alto nivel de un sistema en su entorno. La arquitectura de un sistema de software (en cualquier momento en el tiempo) es su organización o estructura de los componentes importantes que interactúan a través de interfaces, y estos componentes se componen de componentes e interfaces sucesivamente más pequeños”, esta concepción en cambio no es aceptada por todos. 

Buscando en el libro “Patterns of Enterprise Application Architecture” de Martin Fowler quien es a nuestro criterio uno de los científicos del desarrollo de software que más conocimiento teórico a aportado al tema de microservicios explica sobre la complejidad de la definición conceptual de “Arquitectura de Software” y el gran desacuerdo que existe para llegar a un pleno entendimiento de todos. A partir de la diversidad de criterios para los fines de este material vamos a quedarnos con la parte de “el concepto de más alto nivel de un sistema en su entorno…”.

Sistemas monolíticos

El desarrollo de software estuvo marcado hasta el tiempo reciente por desarrollar aplicaciones monolíticas. Una aplicación monolítica es un software que implementa toda la lógica de negocio en un mismo ejecutable, estas aplicaciones son, inicialmente, fáciles de desarrollar, desplegar y ejecutar, pues todo está concentrado en un único lugar, en cambio a medida que el sistema comienza a crecer se complica su mantenibilidad, modificabilidad y escalabilidad. Los complejos monolitos se comunican entre sí en un ambiente de SOA (Arquitectura Orientada a Servicios), quien fue el predecesor de las arquitecturas basadas en microservicios. Para leer un poco más sobre SOA hay reglas que deben tenerse en cuenta, las mismas fueron descritas por Thomas Erl en el material “Principios del diseño de servicios”, que a nuestro criterio tienen alto grado de validez en el diseño y construcción de microservicios.

Arquitectura monolítica y su paso a los microservicios

Tradicionalmente las aplicaciones se han desarrollado bajo el principio de un único sistema complejo, generalmente modular y fuertemente acoplado, cuyo costo de desarrollo y deuda técnica crecen a la par, normalmente este tipo de aplicaciones se despliegan en un ejecutable único, a las aplicaciones desarrolladas con estas características se les clasifican como monolitos o implementadas con una arquitectura monolítica. 

El desarrollo monolítico tiene un grupo de inconvenientes:

  • Dificultades para la ejecución de pruebas a los componentes.
  • Equipo de desarrollo difícil de gestionar (Regla de las 2 pizzas).
  • La incorporación de nuevas características puede impactar en todo el sistema debido al alto acoplamiento.
  • Limitación para aprovechar la diversidad tecnológica y las ventajas particulares que ofrece cada tecnología para solucionar problemas específicos que suelen tener lugar.
  • Al estar todo unido el rendimiento puede verse comprometido, a la vez que la escalabilidad es más costosa toda vez que deben desplegarse instancias completas del sistema para aumentar sus capacidades de respuesta antes volúmenes de uso creciente.

Estos inconvenientes dieron lugar a los microservicios.

¿Qué son los microservicios?

Los microservicios son un término del que se habla hace apenas unos 5 años, sin embargo hemos desarrollado varios sistemas empleando este estilo y los resultados han sido muy positivos, conceptualmente retomemos la figura de Martin Fowler quien definió un concepto que nos parece adecuado: “es un enfoque para desarrollar una sola aplicación como un conjunto de pequeños servicios, cada uno de los cuales se ejecuta en su propio proceso y se comunica con mecanismos ligeros, a menudo una API de recursos HTTP. Estos servicios se basan en el negocio y se pueden implementar de forma independiente. Existe un mínimo de gestión centralizada de estos servicios, que pueden escribirse en diferentes lenguajes de programación y utilizar diferentes tecnologías de almacenamiento de datos.”

Patrones para la implementación de microservicios

Hay un grupos de buenas prácticas para implementar un ecosistema de microservicios que se han convertido en patrones casi obligatorios a tener en cuenta para obtener un máximo aprovechamiento de este tipo de sistemas. A continuación se listan los principales, próximamente lanzaremos un ebook completamente en español con una detallada explicación de cada uno de estos patrones, cuando usarlos y que tecnologías posibles usar para soportarlos desde el punto de vista tecnológico.

  • Un base de datos por servicio.
  • CQRS.
  • Eventos del dominio (Event Driven).
  • Fuentes de eventos (Event sourcing).
  • API Gateway.
  • Descubrimiento de servicios (Lado del cliente, lado del servidor).
  • Configuración centralizada.
  • Backend for frontend (BFF)
  • Microfrontend.
  • Orquestación.
  • Circuit Breaker.
  • Reintentos (Retry).
  • Cache.
  • Control de acceso basado en token.
  • Balance de carga.

¿ Crees que la arquitectura basado en microservicios es útil para todos los escenarios ?

Si tienes alguna duda, cuéntanos en los comentarios, te responderemos a la brevedad. También puedes regalarme una cerveza 🙂

38 thoughts on “Introducción a la arquitectura de microservicios

  1. I am not sure where you’re getting your info, but good topic.
    I must spend some time finding out much more
    or working out more. Thanks for excellent information I
    was in search of this info for my mission.

  2. Hey There. I discovered your weblog the use of msn. This is
    an extremely neatly written article. I’ll make sure to
    bookmark it and come back to read extra of your useful information. Thanks for the post.
    I will certainly return.

  3. Pingback: URL
  4. This is a good tip particularly to those new to the blogosphere.
    Simple but very accurate info… Thank you for sharing this one.
    A must read article!

  5. This is very interesting, You’re a very skilled blogger. I have joined your rss feed and look forward to seeking more of your magnificent post.
    Also, I have shared your web site in my
    social networks!

  6. I have been browsing online more than three hours today, yet I never found any interesting article like yours.
    It is pretty worth enough for me. Personally, if all site owners and bloggers made good content as
    you did, the net will be a lot more useful than ever before.

  7. I think this is one of the most important information for me.
    And i am glad reading your article. But should remark on few general
    things, The web site style is perfect, the articles is really nice :
    D. Good job, cheers

  8. Thank you a lot for sharing this with all folks you really recognize what
    you’re speaking about! Bookmarked. Please additionally talk over with my website =).
    We can have a link alternate arrangement among us

  9. Hello colleagues, how is the whole thing, and what you desire to say regarding this piece of writing,
    in my view its genuinely awesome in support of me.

  10. Great work! This is the type of information that are supposed to be shared around the web.
    Shame on Google for now not positioning this put up higher!
    Come on over and talk over with my website . Thanks
    =)

  11. Pingback: essay

Leave a Reply

Your email address will not be published.