En pleno año 2020, hablar de microservicios, a pesar de que el Hype por la temática sigue siendo alto, parece que es algo que a los perfiles de negocio y a ciertas empresas sigue sin preocupar o interesar.
Pues bien, hay que dejar de ser tibios en este sentido, y dejar claro que una aplicación o servicio que no esté apoyada sobre este tipo de arquitecturas de microservicios, o al menos arquitecturas ágiles, es una aplicación que a futuro nos puede provocar quebraderos de cabeza en su evolución o mantenimiento. Esta afirmación se puede aplicar a más del 90% de las aplicaciones o soluciones que se desarrollan hoy en día, quedando el porcentaje restante para aplicaciones donde sí, realmente, está justificada la elección de otras arquitecturas.
Antes de conocer los detalles de por qué las empresas deberían empujar a sus CTOs y/o equipos de tecnología a aplicar este tipo de arquitecturas, entremos a definir mínimamente el concepto.
El término microservicios se refiere a un estilo de arquitectura de software en el que las aplicaciones complejas pueden estar compuestas por servicios pequeños e independientes.
A diferencia de una aplicación monolítica, que normalmente se diseña como una sola que encapsula varias funciones relacionadas con la aplicación, el paradigma de los microservicios convierte la arquitectura monolítica en su interior y potencia la funcionalidad de la aplicación equivalente a través de un conjunto de microservicios desacoplados.
Por ejemplo, una aplicación ERP puede tener un proceso interno que permite a un usuario introducir el contacto de un cliente y crear una credencial de acceso. Los microservicios podrían recrear ese flujo de trabajo con un servicio para el nombre del cliente y dirección, otro para el número de teléfono, y uno para las credenciales de inicio de sesión.
Entrar en más detalle, no es el objetivo de este artículo. Si queréis más detalle podéis leeros el siguiente post sobre cómo crear microservicios sobre la nube de Google, que os dará una visión con detalles mucho más técnicos.
En este punto, y entendiendo el concepto, ¿cómo ayuda esto a una empresa y a los diferentes negocios que hay en ella?
Básicamente tenemos una arquitectura que como negocio nos permite tener nuestras funcionalidades y nuestra lógica de negocio totalmente aislada por funcionalidad o contexto. De igual forma, nos permite evitar dependencias entre funcionalidades para evolucionarlas, desplegarlas o, incluso, escalarlas de forma independiente.
¿Todavía como negocio sigues sin ver los puntos por los que apostar por los microservicios?, ¡vamos a ver si con los siguientes 10 puntos soy capaz de convencerte!
Aprovechando un proceso de desarrollo descentralizado, puedes probar las ideas en poco tiempo e introducir soluciones innovadoras antes que tus competidores. De igual forma, una rápida respuesta ante una necesidad de mercado o una nueva oportunidad de negocio siempre debería ser bienvenida.
Con un enfoque de microservicios, todas las características o necesidades del negocio se dividen de forma granular en microaplicaciones separadas, por lo que cada una de ellas puede ser desarrollada, probada e implementada por separado, poniéndola de forma rápida en producción sin necesidad de cortes en el servicio o arriesgarse a perder la estabilidad de todo tu sistema.
Los microservicios se organizan generalmente alrededor de las funcionalidades y/u objetivos de negocio reales de tu empresa, lo que significa que es más fácil tanto para los desarrolladores como para la gente experta del negocio entender cómo se conecta la tecnología y el negocio.
Los diferentes desarrolladores o equipos pueden trabajar en diferentes funcionalidades sin estorbarse mutuamente. Adicionalmente, les permite especializarse y ser más productivos implementando o mejorando las diferentes lógicas de tu negocio.
La división de toda la lógica de negocio en fragmentos independientes de código más pequeños basados en funcionalidades significa que son más fáciles de entender y, por lo tanto, de mantener.
Por último, en el caso de tener equipos distribuidos, facilita los desarrollos y la coordinación de los mismos.
Los desarrolladores que trabajan en microservicios no necesitan esperar a que otros equipos terminen su trabajo. Además, entender qué hace cada funcionalidad es más fácil, ya que la cantidad de código es menor.
El control de calidad y las puestas en producción también se ven afectados y mejorados por todo este proceso.
Aprovechar el principio de responsabilidad única significa que un solo microservicio realiza exactamente una función de tu negocio. Por lo tanto, los desarrolladores pueden crear un código más eficiente, claro y de calidad. La arquitectura global de los microservicios es mucho más fácil de entender, por lo que incluso los nuevos desarrolladores pueden mantenerla o modificarla, en menos tiempo y con menos errores.
Tu negocio está vivo y tiene la necesidad de crecer y, a la vez, ahorrar costes si es posible, así como de dar respuesta a la demanda de tus clientes en momentos puntuales. Con estas arquitecturas puedes escalar cada uno de los microservicios que tienes por separado.
Esto significa que un solo servicio puede ser desplegado en múltiples servidores para dar respuesta al aumento de tráfico, mientras que el resto solo consume la cantidad mínima de recursos necesaria, manteniendo un alto rendimiento de la manera más eficiente y menos costosa. Además, si pensamos en entornos cloud todo se ejecutará de manera más rápida en caso de necesidad.
Para un desarrollo de software exitoso, alinear a los equipos de negocio y tecnología para tener una organización adecuada es clave.
La posibilidad de crear equipos mixtos de negocio y desarrollo enfocados a resultados y necesidades concretas, hará que tus necesidades se trasladen a los equipos de tecnología en funcionalidades concretas, y te permitirá poder medir con mejores métricas cómo son estos desarrollos y cómo funcionan los equipos.
El futuro de muchas aplicaciones y servicios pasa por ir a entornos Cloud. Muchas empresas necesitan adaptar sus productos o servicios existentes a un modelo basado en la nube. En este caso, hay soluciones que necesitan ser re-escritas en su mayor parte para poder ir a un entorno Cloud. Por lo que, aunque no tengas pensada esa migración a corto plazo, te ayudará cuando llegue el momento
A menudo tiene sentido aprovechar esta oportunidad para implementar microservicios, ya que así se puede hacer una transición gradual de la aplicación a la nube, en lugar de realizar una migración más arriesgada y compleja.
¿Qué negocio no necesita que sus aplicaciones sean seguras, fiables y confiables? Las arquitecturas de microservicios te permiten integrar mecanismos para asegurar que el aislamiento de fallos sea viable y que el fallo de uno de tus servicios por lo tanto, no afecte al resto de tu aplicación. En una aplicación monolítica, un error similar puede causar potencialmente el colapso de todo el sistema.
Ahora que ya te has convencido de que tu negocio necesita este tipo de arquitecturas por su flexibilidad y el resto de ventajas que hemos visto, solo te queda una cosa. ¡Formar a tus equipos!
De igual forma que soy un total convencido del uso de este tipo de soluciones, también sé lo que implica llevarlas adelante e implementarlas en cualquier sistema. Estas arquitecturas requieren de soluciones de monitorización, despliegue, de un API management maduro, de mecanismos que aseguren que la comunicación entre servicios y los posibles fallos estén controlados.
Te animo a que, para tu siguiente necesidad de negocio, empujes a tus equipos técnicos a investigar y formarse para utilizar estas soluciones y, así, se abra a tu empresa un nuevo ritmo de desarrollo y un nuevo time to market de tus servicios y soluciones a tus usuarios.
Concluyendo, como en anteriores cambios de paradigma en las arquitecturas tecnológicas de la empresa, los microservicios presentan un conjunto de oportunidades y desafíos únicos.
Llegados a este punto, pocas dudas deberían quedarte para dar el paso, ¿no? Pues bien, ahora debería compartir contigo unas últimas reflexiones.
Quiero que seas consciente de que hay que utilizar este tipo de soluciones donde aplique y entender cómo implementarlas. Esto es clave (como mi compañero se encargó de explicar en su interesante charla) y para ello hay que estar preparado.
De igual forma, necesitarás gente bien formada y entrenada en este tipo de soluciones, porque de la misma manera que creo firmemente en las bondades de este tipo de arquitecturas, creo que es necesario tener en cuenta que:
- Necesitarás un entorno que te permita desplegar de forma flexible, algunos servicios o hacer diferentes tipos de despliegue.
- Será necesario un framework, servicio o solución que te facilite la gestión de tus servicios y el escalado de los mismos.
- Será muy útil (y diría que obligatorio) tener una solución completa de monitorización y alarmas en base a reglas o criterios.
- Será necesario poder contar con otra solución como Istio que te quite la responsabilidad de gestionar la comunicación entre tus servicios, el descubrimiento de los mismos o la política de reintento en caso de fallo.
- Contar con una solución de API management, que se encargue de facilitar la gestión de acceso a tus servicios.
Por todas estas razones, al inicio del post hice referencia a un artículo, donde nos apoyamos en la nube de Google, para poder aplicar soluciones gestionadas, que nos ayudan a controlar y solucionar de manera sencilla todo lo comentado anteriormente y poder centrarnos única y exclusivamente en diseñar la mejor arquitectura para la solución y en la implementación de la lógica de negocio.
¡No lo dudes! Es hora de apostar por las arquitecturas de microservicios (si no lo has hecho ya, claro…).
Tell us what you think.