Microservicios

Microservicios es un tipo de arquitectura que nos permite desacoplar sistemas pasando del clásico estilo monolítico a tener sistemas mucho más pequeños y mantenibles.

Definición

Se puede decir que los microservicios son un conjunto de componentes pequeños y autónomos que se colabiran entre si.

Small autonomous services that work together

SOA VS Microservices

SOA vs Microservicios

SOA Microservicios
Reusabilidad en servicios suministrados por diferentes aplicaciones Se enfoca en el servicios totalmente desacoplados
Un cambio sistemático requiere modificar el monolito Un cambio sistemático es para crear un nuevo servicios
Los DevOps y la entregas continuas llegan a ser populares pero no son lo importante Es altamente enfocado en los DevOps y las entregas continuas
Enfocado en negocios con funcionalidades reusables Más importante el concepto que el contexto delimitado
Para la comunicación se usan enterprise services bus ESB Para la comunicación se usan sistemas de mensajería menos elaborados
Soporta múltiple protocolos de mensajes Usa protocolos lijeros tales como HTTP, Rest y API de terceros
Usa una sola plataforma y todos los servicios se despliegan sobre esta Los servidores de aplicaciones no son muy usados, es más popular el uso de plataformas en la nube
El uso de contenedores es menos popular Usa contenedores (tales como docker)
Los servicios SOA comparten el almacenamiento de datos Cada microservicios tiene su propio sistema de almacenamiento de datos
Estándares y administación son comunes Administración es independiente con gran enfoque en equipos de colaboración y libertad de elección

Características

  • Componentes via servicios
  • Son organizados alrededor de las necesidades del negocio
  • Productos, no proyectos
  • Smart endpoints and dumb pipes
  • Gobernabilidad descentralizada
  • Gestión de datos descentralizada
  • Automatización
  • Diseñados para prevenir fallos
  • Diseño evolutivo

¿Qué se busca con los microservicios ?

Básicamente los microservicios para dar solución a los problemas dados en los sistemas monolíticos. Entre algunas soliciones se tienen.

  • Servicios pequeños e independientes –> principio de responsabilidad única
  • Unidades de despliegue pequeñas
  • Reducción de tiempo de desarrollo
  • Agilidad en hot fixes •Multitecnología
  • Fácil escalamiento horizontal

Ley de conway

organizations which design system…are constrained to produce designs which are copies of the communication structure of these organization

Ley de conway

Ventajas

  • Otorga a los desarrolladores libertad de desarrollar y desplegar servicios de forma independiente
  • Un microservicio se puede desarrollar con un equipo de trabajo mínimo. 
  • Se pueden usar diferentes lenguajes de programación en diferentes módulos. 
  • Fácil integración y despliegue automático (por ejemplo con Jenkins…). 
  • Fácil de entender y modificar, por lo que la integración de nuevos miembros al equipo de desarrollo será muy rápida. 
  • Una nueva tecnología y adaptación de procesos se vuelve más fácil. Puede probar nuevas tecnologías con los microservicios más nuevos que creamos.
  • Ciclos de lanzamiento más rápidos.
  • Escalando con la nube.

Desventajas

  • Si se cuenta con un gran número de servicios, integrarlos y gestionarlos puede resultar muy complejo
  • Esta tecnología suele incurrir en un alto consumo de memoria
  • Fragmentar una aplicación en diferentes microservicios puede llevar muchas horas de planificación (y casi podría considerarse un arte).

Beneficios

  • Los desarrolladores podrán hacer uso de las tecnologías más actuals.
  • El uso de contenedores hará el desarrollo y despliegue de la app mucho más rápido.
  • Funcionalidad modular, con lo que la modificación de un módulo no afectará al funcionamiento del resto. 
  • Fácil de escalar e integrar con aplicaciones de terceros.

Desafíos

  • Fácil configuración
  • Automatización
  • Visibilidad
  • Contexto delimitado
  • Gestión de la configuración
  • Escalamiento de forma dinámica
  • Consistencia
  • Debugging