Arquitectura de microservicios

¿Qué es la arquitectura de microservicios?

La arquitectura de microservicios es una modalidad de desarrollo de aplicaciones, que se caracteriza por la división de las tareas en un conjunto de microservicios autónomos e independientes. Cada uno de ellos es un código con una función específica y su propio sistema de almacenamiento y no necesariamente todos tienen que estar escritos en el mismo lenguaje de programación.

La comunicación entre los diferentes microservicios se lleva a cabo a través de APIs.
La clave radica en la posibilidad de modificar o ejecutar cada microservicio sin que esto produzca cambios en otros servicios de la aplicación. Se podría decir que este tipo de arquitectura descompone la aplicación en sus distintas funciones principales para que éstas puedan ser diseñadas, implementadas o modificadas de manera independiente.

¿Por qué surge la arquitectura de microservicios para aplicaciones?

Tradicionalmente, el diseño de las aplicaciones presentaba arquitecturas monolíticas en las que no existía separación entre módulos y todos los aspectos funcionales se acoplaban en un mismo programa. En el momento en que las aplicaciones comenzaron a desarrollarse y a crecer, este sistema comenzó a plantear serios problemas al no ser sencillamente escalable a largo plazo. Conforme las aplicaciones progresaban, los problemas experimentados en las mismas se tornaban más difíciles de solucionar y resultaba más complicada la implementación de nuevas funcionalidades.

Dicha necesidad a la hora de realizar cambios en los programas e implementarlos de manera rápida y sencilla, potenció el desarrollo de una nueva arquitectura de aplicaciones, dividiendo los sistemas en microservicios. De este modo, los problemas podían tratarse de manera independiente, sin necesidad de afectar a otras funcionalidades de la aplicación.
Las aplicaciones se convirtieron en sistemas compuestos por diversos microservicios que funcionan de manera independiente y autónoma.

Las principales ventajas de una arquitectura de microservicios

  • Mantenimiento más sencillo y económico: no es de extrañar que cada vez más compañías estén optando por este tipo de arquitectura para sus aplicaciones web. Permite realizar cambios o mejoras en un solo módulo de la aplicación, sin necesidad de afectar a toda su estructura, lo que facilita y abarata su mantenimiento.
  • Modularidad: los servicios pueden desplegarse de manera independiente al ser completamente autónomos. Si se produce algún tipo de error en uno de ellos, esto no afectaría al resto de servicios de la aplicación.
    Dicho carácter permite al mismo tiempo un mayor nivel de escalabilidad horizontal.
  • Mayor agilidad: este tipo de arquitectura permite la implementación de funcionalidades típicas como puede ser un proceso de autenticación, que hayan sido desarrolladas anteriormente por terceros sin necesidad de volver a crearlas.
  • Mayor velocidad: hablamos de servicios de tamaño muy reducido y por lo tanto, su desarrollo es más simple y rápido, posibilitando un despliegue de la aplicación mucho más veloz.
  • Más versatilidad: cada microservicio puede presentar un lenguaje de programación y un tipo de tecnología diferente. De este modo, es posible escoger el tipo de tecnología más efectiva y rentable para cada funcionalidad.

¿Cuáles son las desventajas de una arquitectura de microservicios?

Si bien es cierto que este tipo de arquitectura se ha popularizado enormemente entre las empresas tecnológicas en los últimos años, también lo es que encierra ciertos problemas o hándicaps que deben tenerse en cuenta a la hora de valorar su implementación:

  • Falta de uniformidad: si bien hablábamos de la versatilidad en el lenguaje y la tecnología de cada microservicio como una virtud, también es cierto que si no se gestiona correctamente, podría ocasionar una arquitectura y un diseño poco uniforme de la aplicación.
  • Gestión más compleja: a mayor número de microservicios, más difícil será gestionarlos de manera independiente. Por ello, se hacen necesarias herramientas que centralicen la información y nos ofrezcan una visión del estado general del conjunto de los microservicios.
  • Mayor consumo de memoria: hablamos de microservicios con sus propias bases de datos. Es lógico que conlleven un mayor consumo de memoria y CPU.
  • Desarrolladores experimentados: este tipo de arquitectura necesita de desarrolladores con un gran nivel de experiencia en su gestión, capaces de desarrollar un control total y balancear las cargas de la app.
  • Inicio lento y costoso: hasta que se crea la arquitectura total, es necesario dedicar una gran cantidad de tiempo a la fragmentación en distintos microservicios y su comunicación.
  • Implementación más cara: las pruebas requeridas y los costes de infraestructura pueden llegar a suponer un alto coste para la compañía.
  • Mayor dificultad a la hora de desarrollar pruebas y test generales debido a la arquitectura descompuesta de la aplicación.

La seguridad en la arquitectura de microservicios

Uno de los factores más importantes hoy en día en lo que se refiere al desarrollo de aplicaciones web, es su vulnerabilidad ante cualquier posible ataque externo.
La arquitectura de microservicios simplifica en gran medida el monitoreo de la seguridad de la app, al poder controlar cada servicio de manera independiente. Del mismo modo, si se produjera algún tipo de brecha o vulnerabilidad en uno de los servicios, ésta no afectaría al resto de la aplicación.

Pese a esto, aún quedan ciertos aspectos por pulir. Por ejemplo, existen más áreas de red vulnerables y al ser más complicado encontrar una coherencia general en las actualizaciones de la aplicación, se crean más brechas de seguridad. Del mismo modo, el área de ataque es mayor con una gran variedad de APIs y puertos y el mantenimiento de la seguridad es más costoso y laborioso al tener que desarrollarse específicamente para cada servicio.
Por último, la falta de control sobre los softwares de terceros, también puede suponer una vulnerabilidad importante.

Sin embargo, todos estos problemas pueden evitarse fácilmente mediante la utilización de escáneres de seguridad, redes internas seguras, limitaciones de control de acceso y una comunicación fluida entre todas las partes.