16 mayo 2017

De los Microservicios a Docker


Las nuevas tendencias en el ámbito del software, tratan de dar soluciones, que sean adaptables y que permitan la alta disponibilidad. En respuesta a estos retos se encuentra la arquitectura de microservicios. Un microservicio se implementa descomponiendo el sistema de información en partes con lógicas independientes.

 Actualmente los desarrollos de las aplicaciones y los servicios que incluyen,  se despliegan como una solución unificada y con la lógica de negocio muy interrelacionada con las capas de datos "Un sistema monolítico corriendo en un solo proceso", frente a los microservicios, que se implementa en un único proceso sencillo y se despliegan como soluciones de negocio independientes, aunque pueden estar relacionadas entre si, para generar una composición de microservicios avanzados.

Dada la dificultad en establecer como se modelizan microservicios "Procesos únicos y sencillos", hay diferentes características que nos pueden ayudar:

- Un sistema basado en Microservicios, es aquel que distribuye toda su organización de forma vertical, donde múltiples funcionalidades corresponden con múltiples servicios.

- A nivel de despliegue, se puede hacer de un solo servicio, sin hacer el despliegue de los demás.

- Si se produce un error crítico los demás microservicios seguirán funcionando, o se verán afectados de forma parcial.

- A nivel de escalabilidad y rendimiento, como son independientes, es posible agrupar y distribuir en varios servidores, ganando en la eficiencia, gracias a que cada servicio es independiente de los demás, así mismo se pueden aprovechar mejor los recursos en función de las características intrínsecas de cada microservicio o conjunto de ellos.

A la hora de utilizar este planteamiento, conviene establecer una clasificación básica en Servicios de negocio, Servicios Compuestos y API's, que podemos cruzar horizontalmente en base al dominio funcional de los mismos. Lo mas importante, es tener una arquitectura establecida, antes de ponerse a crear y desplegar microservicios, que se lleguen a convertir en una autentica amalgama de llamadas y relaciones ingobernables.

Ademas hemos de alinear las herramientas de despliegue con la entrega continua (ver DevOps) , para que nos permita desplegar los microservicios garantizando el servicio que ofrecemos a nuestros clientes o usuarios.

¿ Pero que ecosistema software da soporte a todas las necesidades de los microservicios ?, algunos de los posibles serian:

    - Microservicios: Spring Boot

    - Configuración del sistema distribuido y Seguridad: Spring Cloud Config

    - Gestión de logs: GrayLogs

    Netflix OSS  para Descubrimiento, Balanceo , Tolerancia a fallos y el Enrutamiento:
- y las soluciones de



y por ultimo os dejamos un articulo muy interesante de las implicaciones de las maquinas virtuales, cuando trabajamos con aplicaciones desplegadas sobre Servidores de Aplicaciones o cuando utilizamos contenedores Docker.




---------------------------------------------------------------------

Fuentes:

LuisMi Gracia "Un poco de Java Microservicios"
LuisMi Gracia "Un poco de Java Microservicios 2"
Microservicios con docker  
The decline of Java application servers when using docker containers
Daniel Sanchez, En mi local funciona