Para mi primera entrada en el blog, me gustaría hablar sobre un tipo arquitectura que gana adeptos cada día, sobre todo para el diseño de grandes aplicaciones, donde el rendimiento y la escalabilidad son factores claves. Imaginaos como de grandes tienen que ser las infraestructuras de Amazon o Netflix (por nombrar a dos grandes que usan microservicios) para soportar todo el trafico que reciben. Ahora imaginaos que Netflix saca una nueva serie estrella y de repente gana millones de nuevos suscriptores de la noche a la mañana. Tienen que poder escalar toda su infraestructura de una forma rápida y sencilla para soportar todo ese nuevo tráfico. Lo consiguen, gracias a entre otras cosas, a una arquitectura de microservicios.
¿Que son los microservicios?
La arquitectura orientada a los microservicios es una aproximación de diseño de software que se basa en crear pequeños servicios totalmente desacoplados entre ellos y que exponen una API para poder comunicarse entre ellos. Si con esto no tienes suficiente y/o quieres profundizar mucho mas, Martin Fowler da una muy buena definición.
Este enfoque, aporta muchas ventajas sobre el diseño de aplicaciones monolíticas (una capa de UI, una capa de negocio, una capa de acceso a datos):
- Al ser cada uno de los microservicios totalmente autónomos, la caída de uno de estos servicios podría afectar al funcionamiento de la APP, pero esta podría continuar funcionando en el resto de módulos. Por ejemplo, en una tienda on-line se cae el microservicio que se ocupa del sistema de pago, por lo que el usuario no podrá finalizar su compra mientras no se solucione el problema, pero por el contrario si que podrá seguir navegando por el catálogo de productos sin problemas.
- Si uno de los servicios necesita una actualización, los cambios a realizar estarán muy localizados por lo que será mas sencillo de actualizar y será menos propenso a errores, además, podríamos versionar este servicio individualmente sin afectar al resto.
- Al ser cada servicio una pequeña aplicación, es mas sencillo y mas rápido innovar o mejorar ese servicio.
- Puedes tener equipos separados muy especializados trabajando en cada uno de los componentes, por lo que la calidad del software puede mejorar considerablemente. Además, como (me pongo pesado con esto) cada componente es independiente, cada uno puede ser realizado en la tecnología que mas se adapte a la necesidad.
- Es mucho más fácil escalar, por todo lo comentado anteriormente.
- En caso de tener que realizar cambios, solo tendremos que desplegar el servicio que ha sido cambiado en vez de toda la aplicación.
Si se te ocurren mas ventajas, no dudes en ponerlas en los comentarios y actualizaré la entrada.
Todo esto es muy bonito, pero hemos de tener en cuenta una cosa, sin una buena estrategia de entrega continua y un despliegue automatizado, todas las ventajas de usar microservicios podrían ir en tu contra, ya que en vez de una aplicación has de desplegar muchos microservicios, por lo que los riesgos y complicaciones de un despliegue se multiplican (imagina desplegar decenas, o cientos, de microservicios a mano…).
Los microservicios tienen muchas ventajas, pero también algunas desventajas, por lo que como siempre, has de usar el sentido común y analizar si en tu proyecto vale la pena usar este tipo de arquitectura.
No quiero que queden artículos demasiado largos, por lo que de momento me quedaré aquí, pero en próximas entradas profundizaré un poco mas en el tema, tanto directa como indirectamente y a ser posible con ejemplos y algo de código.
Referencias y enlaces interesantes
La definición por excelencia: Microservicios por Martin Fowler
Una charla muy interesante sobre microservicios: Podcast de El Bruno en el que hablan sobre microservicios
Deja una respuesta