Microservicios vs servicio monolítico: La solución de unos ingenieros de Google

Leo en:

https://thenewstack.io/year-in-review-was-2023-a-turning-point-for-microservices/

que Amazon ha migrado una serie de aplicaciones de microservicios a monolítico. Entre una de las causas estaba el bajo rendimiento.

Para ver las ventajas/problemas de cada uno se recomienda ver:

https://m.youtube.com/watch?v=n3jfGDwyHyw

No soy ningún experto en la materia, en la misma noticia hay un enlace a un artículo de unos ingenieros de Google sugiriendo otra forma de escribir aplicaciones con las ventajas de ambos mundos:

https://mwhittaker.github.io/publications/service_weaver_HotOS2023.pdf

Básicamente la solución propuesta por los ingenieros de Google consiste en hacer la aplicación en plan monolítico, pero separada en módulos con unas interfaces y unas llamadas muy concretas. Esta aplicación será ejecutada en un entorno que lanzará los módulos y será capaz de ver los que están sobrecargados, pudiendo lanzar más procesos del mismo módulo o lanzan módulos en otras máquinas según se necesite. Desde el punto de vista del programador sólo hay que crear los módulos y respetar las interfaces.

La comunicación entre módulos puede ser directamente, si están en la misma máquina, o por TCP/IP, si están en máquinas distintas. Será el entorno el que decidirá en cada caso.

Según los autores del artículo los microservicios presentan 5 problemas que esta solución podría resolver:

1. Penalizan el rendimiento.

2. Pueden haber errores al interactuar los microservicios de distintas versiones.

3. Son difíciles de manejar. En lugar de tener un solo binario que depurar y hacer test, en los microservicios se tienen muchos binarios, de diferentes lenguajes y cada uno con un ciclo de desarrollo diferente.

4. Una vez que un microservicio ha establecido una API es difícil cambiarla sin romper otros microservicios que consumen dicha API. Se puede dar el caso de que haya una versión nueva de la API de un microservicio mientras las antiguas ahí siguen sin ser usadas.

5. Se puede ralentizar el desarrollo al hacer un cambio que implique a varios microservicios.

Otra supuesta ventaja es que no hay problemas entre versiones, pues el entorno se encarga de hacer las actualizaciones de forma atómica y no hay problemas entre versiones.

La única pega es que implica usar el mismo lenguaje de programación en toda la aplicación.

Como ejemplo han hecho una implementación en lenguaje Go:

https://github.com/ServiceWeaver

Según los autores, en las pruebas que realizaron, fueron capaces de aumentar el rendimiento y disminuir los costes usando su paradigma en una aplicación de ejemplo.

Espero que os sea útil.

Esta entrada fue publicada en Programación. Guarda el enlace permanente.

Deja un comentario