Arquitecturas basadas en microservicios: Introducción

Hoy en día vivimos en la sociedad 2.0 donde las plataformas digitales dominan la forma de interactuar sobre el mundo pero, realmente, ¿esto siempre ha sido así? La respuesta es no, por ello han tenido que evolucionar para que sus servicios escalen a toda la demanda bajo un coste sostenible, además de que el mantenimiento y el desarrollo de las mismas sea algo sencillo.
En un corto espacio de tiempo nuestros teléfonos pasaron a ser inteligentes, nuestros coches se conectan ya a internet, etc… se prevé que existan 500 dispositivos conectados a internet en cada hogar.
Esto hace que los desarrolladores y administradores de sistemas tengan un nuevo reto, el cual nos ha llevado a las arquitecturas basadas en microservicios.

¿Cuál ha sido la evolución de las arquitecturas?

Durante los años noventa predominaban las arquitecturas SOA (Service Oriented Arquitecture), cuya motivación era la integración de los diferentes sistemas del negocio, sobre todo los legacy, para satisfacer los objetivos de negocio. Es una forma de diseñar sistemas distribuidos, sin estado y basados en contratos. Esta arquitectura nació en los años 80 con un modelo dirigido a objetos, con tecnologías como CORBA, y en los 90 evolucionó a un  modelo basado en componentes, con servicios web SOAP (Simple Object Access Protocol).
Estas arquitecturas siempre hacen referencia a una intercomunicación entre sistemas, ya sea bajo sistemas legacies o de distintas partes de la organización.

Este tipo de arquitecturas han tenido que evolucionar hacia un modelo basado en servicios, no solo propiciado por las necesidades de escalado, si no porque los sistemas informáticos están cada vez más abiertos al público con diferentes plataformas (Móvil, Web, Weareable…).
Esta arquitectura también se ha visto propiciada por la aparición de proveedores cloud que facilitan la puesta en marcha de este modelo, ya que con muy poco dinero podemos tener servidores, balanceadores… y un sin fin de servicios IaaS (Infrastructure as a Service) que nos proporciona la nube.

¿Qué son los microservicios?

No hay una definición estándar u oficial sobre esta arquitectura, pero creemos que la más apropiada es la que proporciona en su blog Martin Fowler. Lo define como el enfoque para desarrollar una aplicación compuesta por un conjunto de pequeños servicios (llamados microservicios). Cada uno de ellos se ejecuta como un único proceso y se comunican mediante mecanismos ligeros. Además, cada servicio debe desplegarse con total independencia, de forma automática y repetible. Gracias a la autonomía que hay entre ellos, se pueden usar diferentes lenguajes de programación, así como diferentes almacenamientos de datos. Aspecto, este último, que dependerá de cada caso de uso del microservicio.
Como cualquier arquitectura distribuida, la resiliencia del sistema y la monitorización son claves, ya que sin ellas, el mantenimiento del sistema sería inviable.

Ventajas Desventajas
Poder escalar los equipos horizontalmente, dado que los microservicios se han de poder ejecutar en paralelo, se podrá ampliar el equipo para soportar cargas de trabajo. Gracias a esta arquitectura, este punto resulta sencillo, ya que cada microservicio tiene independencia sobre los demás Al estar distribuido se le añade carga en la latencia de red, balanceo de carga y tolerancia a fallos
Mantenimiento amigable y sencillo Consistencia eventual, la consistencia del dato es difícil de obtener en este tipo de sistemas pero tratable
Posibilidad de combinar diferentes microservicios para su reutilización en diferentes partes del sistema, por ejemplo al api para frontend, para backoffice, etc… La dificultad operacional se dispara, ahora ya no tenemos una única aplicación monolítica con su base de datos, tenemos tantas aplicaciones y bases de datos como servicios componen la aplicación
Tolerancia a errores, en caso de producirse un fallo en un microservicio éste quedará aislado, limitándose a dicho microservicio y su funcionalidad, no se extenderá a la aplicación completa Testing de integración entre microservicios, es necesario añadir una capa más de testing para poder dar la independencia al despliegue
Disposición de una arquitectura políglota, según el caso de uso de cada microservicio podremos usar un lenguaje u otro, o distintas bases de datos según la necesidad, etc… Las desventajas son propias de cualquier arquitectura distribuida

 Referencias

   ≡   Infografía cuantos dispositivos hay conectados en la red   ≡   Artículo sobre microservicios de Martin Fowler   ≡   Site sobre microservicios de Martin Fowler   ≡   Página web de Sam Newman, autor del libro “Building Microservices”   ≡   Web de Chris Richardson dedicado a los microservicios   ≡