Los microservicios llegaron para quedarse

Pablo Severin

Chief Business Officer (CBO)

Las aplicaciones exitosas tienden a crecer con el tiempo y hacerse enormes. En la arquitectura tradicional monolítica, estas comparten un stack de lenguajes y una gran base de datos relacional común. A medida que se agregan nuevas características a este tipo de aplicaciones, puede empezar a ser difícil tener muchos desarrolladores trabajando en una base de código única, aumentando los conflictos y el riesgo de que las actualizaciones introduzcan errores.  Organizaciones, como Netflix, Amazon, eBay y Uber, resolvieron este problema adoptando lo que se conoce como arquitectura de microservicios, al dividir su aplicación en un conjunto de servicios más pequeños, que se pueden actualizar más fácilmente, con diferentes stacks de programación para sus componentes y que se pueden escalar independientemente unos de otros.

¿Qué es la arquitectura de microservicios?

La arquitectura de microservicios no está muy distante de lo que se hacía tradicionalmente, solo que en lugar de tener una sola pieza en la que se implementa toda la funcionalidad, se crean muchas piezas que deben ser lo más independientes entre ellas y al mismo tiempo lo más completas posible. Por ejemplo, si vas a gestionar los datos de una empresa,  en lugar de hacer un solo backend con todas las bases de datos, puedes tener un microservicio que gestione los clientes, otro que gestione los recursos humanos, otro para el inventario y así sucesivamente con las demás unidades de negocio. Crear un microservicio por cada una de estas unidades permite escalar, así como reducir el impacto y el riesgo de modificar posteriormente, ya que es un proyecto que no afecta el funcionamiento de las demás unidades y a la vista de los usuarios puede ser imperceptible.

Netflix es el caso más conocido de uso de esta arquitectura, dividiendo su única aplicación monolítica en cientos de pequeños servicios. Mucho antes de que se introdujera el término microservicios, perfeccionaron su uso y abrieron muchas de las herramientas que usaron como Open Source. Hoy, cuentan con más de 1000 microservicios, cada uno de los cuales administra una parte separada del sitio, un microservicio almacena todas las series que el usuario ve, otro el pago, otro proporciona los videos que quiere ver, otro para el historial de visualización, otro para algoritmos de recomendaciones, otro con nombres e imágenes de las películas, entre otros. Se podría caer un microservicio y sin embargo, la aplicación sigue funcionando y el usuario por lo general no lo percibe porque deja de ver algo que ni siquiera sabe que debía estar ahí.

Arquitectura monolítica vs arquitectura de microservicios

Diferencias entre monolitos y microservicios

La mayoría de las empresas emergentes comienzan con un monolito que simplifica el desarrollo y permite implementar funciones rápidamente sin tener que diseñar una arquitectura técnica compleja. Cuando las empresas crecen, sus bases de código crecen en proporción y se  vuelven más complejas con más equipos trabajando simultáneamente en actualizaciones y nuevas funcionalidades. La arquitectura monolítica alojada en un solo lugar, puede que esté estructurada por carpetas y que tenga una organización lógica interna, pero aún así está todo en el mismo lugar, lo que se presta para violar patrones, como crear una fuerte dependencia entre cosas que no debieran estar relacionadas. En el momento de ser necesario aumentar la disponibilidad de una funcionalidad específica, las posibilidades de afectar el funcionamiento del conjunto completo son altas.

Los microservicios, incluso a nivel de código, están separados completamente entre sí. Son proyectos independientes que se compilan y se ejecutan de forma independiente, permiten organizar equipos reducidos y multifuncionales en torno a un servicio o un grupo de servicios y operar de forma más ágil, facilitando que los nuevos profesionales de tecnología entiendan el código base, lo que aporta velocidad y motivación al equipo de trabajo. En la arquitectura de microservicios hay complejidad en lograr que se comuniquen entre sí todas estas piezas independientes, lo que hace que la programación sea un poco más fina y sea necesario tener perfiles técnicos con experiencia en la gestión de estos proyectos, para tener coherencia entre los servicios, compatibilidad con versiones anteriores y abordar problemas de latencia y conectividad.

Beneficios de la arquitectura de microservicios

Flexibilidad

Esta arquitectura permite que cada servicio sea desarrollado de forma independiente por un equipo que se centre en ese servicio. Los desarrolladores tienen la flexibilidad de elegir cualquier tecnología que tenga sentido, al escribir un nuevo servicio, tienen la opción de utilizar una tecnología actual y ya que los servicios son relativamente pequeños, es factible reescribir un servicio antiguo utilizando una tecnología actual.

Independencia

Cada microservicio se implementa de forma independiente, los desarrolladores pueden implementar cambios que son locales para su servicio tan pronto como se hayan probado. En un proyecto de migración o actualización de tecnología es posible hacer una priorización de qué áreas son las más importantes y desarrollar esos microservicios primero e ir entregando incrementos mínimos, pero completamente funcionales a medida que se van modularizando.

Agilidad y velocidad

En el caso de emprendimientos o productos en rápida evolución que necesitan una rápida salida al mercado, los microservicios aportan agilidad, tiempo de comercialización rápido y la capacidad de adaptarse rápidamente a nuevas tecnologías. Los microservicios brindan espacio para experimentar con nuevas funciones y tecnologías, actualizar rápidamente las aplicaciones y mantenerse al día. Por ejemplo para realizar pruebas A/B e iterar rápidamente en los cambios de interfaz.

Escalabilidad

La arquitectura de microservicios hace posible la implementación continua y permite escalar cada servicio de forma independiente y solo la cantidad de instancias de cada servicio necesarias. Un proyecto monolítico por lo general es un proyecto grande y tiene toda la funcionalidad en sí, por lo que consume mucha memoria. Crear dos o tres réplicas de ese proyecto grande, consume muchos recursos y es caro en la nube. Sin embargo, con los microservicios puedes escalar solamente aquellas funcionalidades que necesitas y por lo general los microservicios son pequeños y consumen menos.

Facilidad de mantenimiento

Al estar todo separado y menos interconectado entre sí, es más fácil de mantener, ya que cada microservicio aborda una funcionalidad o un grupo de funcionalidades específicas, por lo que es sencillo aislar y corregir posibles fallas. Se pueden hacer actualizaciones frecuentes e independientemente de los otros servicios. Las herramientas de DevOps y las prácticas de CI/CD permiten ajustarse a las necesidades de cada equipo, para que la implementación automatizada de aplicaciones sea efectiva y sin errores.

Monitoreo y gestión flexibles

Los frameworks utilizados como Spring proveen un dashboard donde se visualizan todos los microservicios que están en ejecución en tiempo real, las réplicas y cuánta carga tiene, es posible monitorear cuántas veces se ha caído alguno, durante cuánto tiempo, si las réplicas respondieron o no, es decir, facilita la toma de decisiones operativas para mejorar el servicio de forma general que está prestando. Suponiendo que, por ejemplo, tengas limitaciones en cuanto a recursos en el servidor, es posible reducir el uso de réplicas en ciertos periodos de tiempo.

Plataformas como Docker y Openshift facilitan la gestión completa de las aplicaciones, desde el desarrollo, la implementación, las operaciones y el mantenimiento. También permiten tomar decisiones a partir de datos, por ejemplo en el caso de un sistema grande, se puede determinar a qué microservicio está yendo el mayor tráfico o cuál es el que más caídas tiene. Por lo tanto, se tiene un dashboard o panel de control que permite tomar decisiones operativas de lo que está pasando en tiempo real.

Confiabilidad

Los framework en los que se desarrollan los microservicios, proveen una serie de patrones de buenas prácticas incluidas, como patrones de resiliencia, de respuesta a errores, entre otros. Es una serie de beneficios que de forma implícita, siguen los patrones que ayudan a cumplir buenas prácticas de arquitectura de software. Si ocurre algún error o problema de seguridad en un servicio, no afectará el rendimiento de otros componentes, algo relevante para aplicaciones comerciales modernas que tienen altos requisitos de seguridad y operación.

¿En qué tipo de proyectos se usan microservicios?

Los microservicios pueden no ser para todos. Una arquitectura monolítica puede funcionar perfectamente bien en una empresa pequeña o de pocos productos, pero a medida que las organizaciones crecen y aumentan las demandas de sus aplicaciones, la arquitectura de microservicios puede ser necesaria. Sólo cuando aparezca el dolor por la complejidad del monolito, vale la pena considerar cómo refactorizar en microservicios.

Los microservicios no son una fórmula mágica, que sirva para todo. Dependen del tamaño, cantidad y complejidad de funcionalidades, que harán necesaria la expansión del desarrollo. Si bien se pueden implementar en proyectos simples, hay que considerar que, no son solo los microservicios propios del negocio, también hay que crear microservicios de soporte a los demás. Por lo que no se justifica si el proyecto solo requiere tener dos microservicios, crear ocho que le den soporte a esos dos, siguiendo el ejemplo de la empresa y sus unidades de negocio, esta no solo requerirá microservicios de facturación, clientes, almacén y recursos humanos, también necesitará otros
microserviciosde infraestructura, que son los que le dan soporte a los demás y  permiten que se comuniquen entre sí. Entre servicios seguridad, gateway que filtran la entrada de datos, configuración remota, los que permiten el autodescubrimiento, es decir que aunque los servicios no saben de la existencia de los demás, hay un índice donde ellos pueden ir a consultar otras funciones que están disponibles en ese momento. Es un esfuerzo que implica personal más calificado y más tiempo también.

Desarrolladores especialistas en microservicios

Mucha gente no sabe exactamente qué son los microservicios pero todo el mundo los quiere. Como profesional te obliga a estudiar un poco más, no es que sea difícil, pero siempre es más simple poner todo en una misma caja. Entonces el dividir el monolito a veces crea dificultades, que si estuviera todo reunido no tendrías.

Hay múltiples ventajas de los microservicios, así como la experiencia de empresas referentes a nivel mundial con beneficios finales comprobados, lo que motiva a más empresas a cambiar hacia los microservicios. La falta de experiencia del equipo es  un verdadero desafío que puede estancar el proyecto, es importante entender la arquitectura de software, el mantenimiento de la infraestructura y desarrollo ágil desde el principio.

¿Estás listo para comenzar tu proyecto de desarrollo de microservicios? ¿O tal vez consideras dividir un sistema existente en microservicios para mejorar la escalabilidad y aumentar el rendimiento?

Durante más de 15 años en el mundo del desarrollo de software personalizado, trabajamos con sistemas basados ​​en microservicios y en migraciones de monolitos para aprovechar las ventajas de la arquitectura modular de los microservicios. Podemos ayudarte a navegar a través de las ventajas y desventajas de los microservicios y desarrollar una migración o nuevo proyecto. Nuestros personal dedicado multifuncional cubre todas las necesidades del desarrollo de software de microservicios, incluidos:

  • Descubrimiento, análisis, alcance y planificación de proyectos
  • Diseño y arquitectura del sistema.
  • Diseño y desarrollo UX/UI
  • Gestión de proyectos ágiles
  • Desarrollo de software (frontend, backend, full-stack)
  • Control de calidad y automatización de pruebas
  • Estrategia, ingeniería y gestión de datos

Podemos asumir un proyecto completo o aumentar su equipo ágil con especialistas en tecnología para ayudarte a concretar tu idea de negocio más rápido.

Menú