miércoles, 22 de febrero de 2017

98. Microservicios

Este es un tema muy interesante, por eso también vamos a abarcar algunos post, no he dejado el tema de DevOps, por que los micro servicios entran en dicho tema, tampoco quiero empezar por nano servicios que es otro tema interesante, sino que quiero avanzar poco a poco en este tema.

El computo se ha desarrollado de manera vertiginosa, en muy poco tiempo, hace unos cuantos años se hablaba siempre de aplicaciones monolíticas, que lo mas que se dividían en capas, para brindar seguridad y cierta especialización.

En algún momento hablamos de SOA, la arquitectura orientada a servicios, en donde considerábamos que todo era un servicio, todos los front end, son clientes de servicios en el backend, se busco una reutilización de código y de recursos, con grandes servicios que se encargaban de efectuar las tareas de una manera eficiente.

Después entramos a la era móvil, en donde el computo deja de estar en un escritorio y pasa a las manos de los usuarios, en donde se requiere un desarrollo ágil, y  cualquier error nos puede costar la venta de nuestro producto es aquí en donde podemos hablar de micro servicios

¿Qué es un micro servicio?

Es una Arquitectura para el desarrollo de aplicaciones por medio de pequeños servicios altamente especializados y aislados entre si.

Es construir nuestra aplicación por medio de piezas de lego.

¿Cómo es su arquitectura?

Cada micro servicio debe efectuar una sola actividad, tener su propia responsabilidad y ser altamente especializado.

Cada componente debe ser independiente de otro.

Esta independencia se debe dar en el desarrollo, ya que al ser especializados los componentes se convierten en cajas negras, esto también nos permite utilizar múltiples tecnologías para el desarrollo de los micro servicios.

Independientes en el despliegue, los micro servicios se pueden desplegar sin necesidad de desplegar toda la aplicación, esto permite que se hagan cambios con ventanas de mantenimiento pequeñas, permite el poder probar solo partes especificas de la aplicación por que se garantiza que el resto de la aplicación no tiene cambios.

Se tiene un ciclo de vida pequeño, al ser un componente pequeño este puede pasar en muy poco tiempo hasta producción.

No existe acoplamiento entre servicios, cada servicio es independiente, incluso de base de datos, al ser independientes, la información que almacena se puede guardar en sitios muy diversos sin necesidad de tener un repositorio centralizado.

Cada componente tiene su lógica interna el micro servicio y la comunicación entre ellos se efectúa por canales externos de comunicación.

Se trabaja con base a contratos.

¿Qué justifica su uso?

El ambiente cambiante en el que nos encontramos, en el que una aplicación necesita desarrollarse de una manera rápida, el no tener grandes ventanas de despliegue, el poder tener en los equipos de desarrollo a la gente especializada para cada función.

¿Cuáles son sus ventajas?

Pueden crecer muy rápidamente
Es posible encontrar cuellos de botella muy rápidamente y superarlos, escalando de manera individual
La pase de pruebas es rápida, ya que se prueba solo un componente
Se puede agregar funcionalidad nueva en muy poco tiempo
Cuentan con una gran estabilidad

¿Cuáles son sus desventajas?

No todo lo que brilla es oro, y menos en este caso.

Los micro servicios emplean un medio de comunicación que puede ser inestable, por lo que deben ser altamente tolerantes a fallos, todos los errores que puedan ocurrir deben estar controlados.

Al ser aplicaciones independientes estas pueden tener errores de manera independiente, por lo que un error en erras debe ser controlado por la aplicación que la invoca.

Se requiere que los equipos de desarrollo tengan mucha comunicación ya que el comportamiento real de los micro servicios se ve al momento en que se hace la integración de los mismos, por lo que se deben definir los contratos de manera detallada, para que realmente se de comunicación entre ellos.

No existe un control total de la aplicación, al estar separada en servicios, la aplicación se encuentra fragmentada.

Si no existe documentación, el nivel de entropía se incrementa, ya que se convierten en grafos con múltiples ramas y múltiples caminos.

Se incrementa la complejidad del despliegue, no es lo mismo desplegar un servicio que 100, por lo que se deben emplear herramientas de automatización.

Se incrementa el trabajo de administración por parte de infraestructura, no es lo mismo verificar que corra un servicio a que corran 100

Si no se cuentan con procesos automáticos de mantenimiento y despliegue se incrementa la posibilidad de error humano

Se debe contar con una infraestructura que soporte el modelo, mas servicios es mas memoria

Al ser servicios especializados cada servicio es una caja negra, se debe tener una confianza total en los desarrolladores.

Y lo mas importante, esta arquitectura no es para cualquier equipo de desarrollo, se debe tener una madurez entre las áreas, por que de otra forma se perderá el control en la administración de los micro servicios

Felices líneas











No hay comentarios.:

Publicar un comentario