Los microservicios dividen el sistema en servicios pequeños e independientes. Para las aplicaciones móviles, esto significa API escalables y en evolución. Esta guía presenta cómo implementar y operar microservicios para aplicaciones.
¿Qué son los microservicios?
Definición
Arquitectura donde la aplicación se compone de servicios pequeños e independientes.
Características
- Independencia de implementación
- Único responsable del dominio.
- Comunicación a través de red.
- Puede tener diferentes tecnologías.
Diferencia monolítica
Monolito: todos juntos. Microservicios: separados por responsabilidad.
Ventajas
Escalabilidad independiente
Cada servicio escala según la demanda.
Despliegue independiente
Actualizar uno no afecta a los demás.
Resiliencia
Fallar en uno no lo arruina todo.
Múltiples tecnologías
Utilice la mejor herramienta para cada trabajo.
Equipos independientes
Propiedad clara, menos dependencias.
Desventajas
Complejidad operativa
Más piezas para gestionar.
Latencia de red
La comunicación entre servicios agrega latencia.
Depuración dura
Realice un seguimiento de los problemas en todos los servicios.
Coherencia de datos
Las transacciones distribuidas son complejas.
Gastos generales
Para sistemas pequeños, puede ser demasiado.
Cuándo utilizar
Bueno para
- Equipos grandes
- Dominios complejos
- Necesidad de escala independiente
- Evoluciones frecuentes
evitar
- Equipos pequeños
- MVP
- Dominios simples
Descomposición
Por dominio
Contextos DDD acotados.
Por funcionalidad
Autenticación, pagos, catálogo, etc.
Por caso de uso
Flujos de usuarios independientes.
Puerta de enlace API
Función
Punto de entrada único para clientes.
Responsabilidades
Enrutamiento, autenticación, limitación de velocidad, agregación.
Herramientas
Kong, puerta de enlace API de AWS, Nginx.
BFF (Backend para Frontend)
Concepto
Pasarela específica para tipo de cliente.
Uso
BFF para móvil, otro para web.
Ventajas
Optimizado para cada cliente.
Comunicación
Sincrónico
DESCANSO, gRPC. Solicitud/respuesta.
Asincrónico
Colas de mensajes. Eventos.
Compensaciones
Lo sincrónico es simple, lo asincrónico es resistente.
Descubrimiento de servicios
Problema
¿Cómo se encuentran los servicios entre sí?
Soluciones
Cónsul, Kubernetes DNS, AWS Cloud Map.
Observabilidad
Registro
Registros centralizados con ID de correlación.
Seguimiento
Calco distribuido con Jaeger, X-Ray.
Métricas
Por servicio y agregado.
Resiliencia
Disyuntor
Deja de llamar al servicio fallido.
Reintentar
Inténtalo de nuevo con retroceso.
Tiempo de espera
No esperes para siempre.
###Mamparo
Aislar recursos.
Gestión de datos
Base de datos por servicio
Cada servicio con su banco.
Consistencia final
Transacciones distribuidas evitadas.
Eventos
Comunicar cambios a través de eventos.
Sagas
Transacciones largas vía compensación.
Implementación
Contenedores
Docker para encapsular servicios.
Orquestación
Kubernetes para administrar.
CI/CD
Tubería por servicio.
Azul-Verde/Canario
Implementaciones seguras.
Para móviles
API optimizada
Menos llamadas, datos agregados.
Caché
Almacenamiento en caché de CDN y API.
###Sin conexión
Resiliencia cuando la red falla.
Control de versiones
API versionadas para compatibilidad.
Pruebas
###Unidad
Para servicio.
Integración
Comunicación entre servicios.
###Contrato
El consumidor y el proveedor acuerdan el contrato.
De extremo a extremo
Flujos completos a través de servicios.
Migración
Patrón estrangulador
Reemplaza gradualmente a monolito.
Empiece poco a poco
Comience con un servicio.
###Extraer
Identificar dominios bien definidos.
Errores comunes
Distribución prematura
Microservicios antes de que los necesites.
Nanoservicios
Servicios demasiado pequeños.
Sin observabilidad
Imposible de depurar.
Ignorar la latencia
Múltiples llamadas de red.
Conclusión
Los microservicios ofrecen escalabilidad y flexibilidad, pero con complejidad. Evalúe si es necesario para su contexto, invierta en observabilidad y opere con disciplina. Para aplicaciones móviles, céntrese en las API optimizadas y la resiliencia.
##Preguntas frecuentes
1) ¿Necesito Kubernetes para microservicios? No necesariamente. Pero ayuda mucho a escala.
2) ¿Cuántos servicios son demasiados? No existe un número mágico. Si el equipo no puede gestionarlo, es demasiado.
3) El móvil debe llamar directamente a microservicios? Generalmente no. Utilice API Gateway o BFF.
4) ¿Los microservicios son siempre mejores? No. Un monolito bien hecho puede ser mejor en muchos casos.
5) ¿Cómo empezar con microservicios? Inicie monolito modular. Extraer cuando sea necesario.
Lea también
- Backend para Aplicaciones: Arquitectura, Tecnologías y Mejores Prácticas
- Monolith vs Microservices: Qué arquitectura elegir
- Arquitectura de software escalable: cómo construir sistemas que crezcan
- Arquitectura de software escalable: mejores prácticas para el escalado
- Arquitectura de software escalable: mejores prácticas para empresas emergentes
- Arquitectura de software escalable: mejores prácticas para equipos pequeños
