Ing. Yonatan Romero
Universidad Nacional de La Matanza
Los servicios son componentes out-of-process que se comunican por peticiones de web services o RPC.
Pequeños cambios en la aplicación no requieren un despliegue completo
Actualizaciones de dependencias internas y/o externas sin impacto (si no se modifica la interfaz pública, claro)
Las llamadas remotas son más costosas que llamadas intra-proceso
Es dificil definir correctamente las interfaces y estructura de los servicios
Pérdida de integridad referencial
Al dividir grandes aplicaciones en servicios es posible crear equipos de trabajo inteligentemente
Optimiza la comunicación entre equipos de trabajo y minimiza la cantidad de aprobaciones
Todas las habilidades necesarias para desarrollo: UI, base de datos y middleware
Cada equipo interfuncional es encargado de construir y operar cada PRODUCTO
Productos ≠ Proyectos
Los equipos interfuncionales son los dueños del producto durante toda la vida del mismo
"You build, you run it"
Equipo de desarrollo totalmente responsable del producto en producción.
En vez de ver el software como una lista de funcionalidades que debe ser completada
Esta arquitectura enfatiza en la relaciones interpersonales dónde la pregunta es cómo el software puede asistir a los usuarios en mejorar su productividad en el negocio
Amazon utiliza la noción "dos pizzas"
Equipos no mucho más grandes que la cantidad de personas que comen dos pizzas sin quedarse con hambre
Una de las tendencias del gobierno centralizado es intentar estandarizar una sóla tecnología para todos los problemas
No todos los problemas son clavos, ni todas las soluciones son martillos
Dividir en servicios permite elegir las mejores herramientas, lenguajes y plataformas técnológicas más adecuadas para el problema a resolver
Mayor uso de lenguajes no "clásicos" como R, Ruby, Python, Scala, Matlab, etc
En aplicaciones monolíticas se suele usar una sola base de datos donde conviven todas la información que necesitan los módulos. Se usa la misma plataforma para todas las aplicaciones de la organización
Los microservicios utilizan el almacen de datos más correcto para su funcionalidad. Por ejemplo base de datos documentales (MongoDB) o de clave-valor (Redis)
GRAN DESAFÍO: Consistencia de datos
La automatización de infraestructura ha mejorado notablemente los últimos años.
Reduce errores humanos
Permite la integración continúa y la entrega continua
Las instancias de los microservicios pueden fallar. Es necesario un sistema de monitoreo y de recuperación automática.
Generalmente se desarrolla un panel de control para monitorear el estado de todas las instancias de la aplicación
Amazon AWS
Netflix
Spotify