La Arquitectura de microservicios (MSA) es un término cada vez más popular en el mundo de la informática, tan frecuente en la actualidad como lo fue hace varios años la arquitectura orientada a servicios (SOA).
Me ha tocado participar en varias instancias en donde se ha planteado la idea de migrar aplicaciones monolíticas a arquitectura de microservicios o donde se define la arquitectura de aplicaciones nuevas, teniendo como opción prioritaria la arquitectura basada en microservicios.
Estoy convencido de que antes de definir la arquitectura y tecnología de un sistema, primero debemos analizar diversos factores, como por ejemplo: ¿Cuál es la escalabilidad que requiere mi aplicación? ¿Qué nivel de transaccionalidad debe soportar? ¿Requiere manejo de transacciones globales? ¿Sobre qué infraestructura se va a ejecutar? ¿Cuántas transacciones por segundo debe soportar (TPS)? ¿Qué problemática de negocio quiero resolver? Así, puedo seguir haciendo muchas más preguntas que debemos hacernos a la hora de elegir la arquitectura y tecnología con que vamos a desarrollar un sistema.
¿Qué es la arquitectura de microservicios?
La arquitectura de microservicios se refiere a una técnica que brinda a los desarrolladores una forma de diseñar aplicaciones flexibles y altamente escalables al descomponer la aplicación en pequeños servicios y que implementan funciones de negocio específicas. Estos servicios, a menudo denominados “acoplados de forma flexible”, se pueden construir, implementar y escalar de forma independiente.
Cada servicio se comunica con otros servicios, a través de interfaces de programación de aplicaciones (API) estandarizadas, lo que permite que los servicios se escriban en diferentes lenguajes o en diferentes tecnologías.
Complejidades
En mi experiencia, me ha tocado participar en diversos proyectos donde hemos migrado sistemas de baja, media y alta complejidad (sistemas core) a arquitectura basada en microservicios y arquitectura serverless. Los sistemas migrados han sido muy diversos en cuanto a su tecnología, los que comprenden aplicaciones de bajo nivel cómo tuxedo, aplicaciones monolíticas, monolitos y lógica de negocio en la base de datos.
Complejidades más comunes
En el desarrollo de microservicios los problemas y necesidades más comunes que nos hemos enfrentado son:
- Resolver la problemática de las transacciones globales o distribuidas (patrón saga)
- Madurez del gobierno de servicios
- Diseño de dependencias de servicios
- Resolver temas relacionados con la seguridad
- Implementar diseño impulsado por dominios DDD
- Entender el negocio para descomponerlo en micro funcionalidades
Infraestructura y monitoreo
Para desarrollar un sistema MSA debemos considerar lo relevante que es contar con una infraestructura adecuada que permita garantizar un uptime acorde a las exigencias del negocio, de lo contrario, será un dolor de cabeza poder detectar problemas y levantar nuestro negocio frente a catástrofes. Debemos considerar como base resolver lo siguiente:
- Resiliencia, escalabilidad y alta disponibilidad (kubernetes, openshift, swarm)
- Seguridad, api gateway, api manager (Kong, appiconnect, Axway)
- Gestores de logs (Elasticsearch, Kibana, Logstash, splunk )
- Gestores de monitoreo y métricas (grafana, prometheus, k8s metric server)
- Automatización de instalación y despliegues (docker)
- Ejecución de pipelines (Jenkins, bamboo)
- Validadores de código (sonarqube, kiuwan)
- Versionamiento (git)
Finalmente, quiero concluir que, para tomar una decisión tan importante en cuanto a definir la arquitectura y tecnología para desarrollar un proyecto nuevo o migración de un sistema existente, es sumamente importante analizar todos los factores y hacernos los cuestionamientos posibles para justificar nuestra elección, además de contar con la infraestructura adecuada y no hacerlo simplemente por moda.
En Trebol IT llevamos más de 5 años de experiencia trabajando en arquitectura de microservicios, implementando desde la infraestructura, arquitectura hasta el desarrollo de sistemas nuevos y migraciones en grandes empresas, contamos con el know how y profesionales de excelencia para apoyar a tu empresa a tomar la mejor decisión.
Articulo creado por: Rodrigo Díaz, Gerente de Transformación Digital