Microservicios: Buenas prácticas y stacks tecnológicos

Comparativa de arquitecturas basadas en microservicios con arquitecturas monolíticas y lista de buenas prácticas y de los stacks tecnológicos más adecuados

Conceptos sobre microservicios

A medida que las modernas tecnologías basadas en cloud avanzan en el rol crítico que ocupan en las iniciativas de negocio, el software y las organizaciones SaaS están incrementando los retos que proponen a los profesionales a la hora de crear y mantener software dinámicamente escalable y altamente disponible. En respuesta a estos retos, los equipos de ingenieros de desarrollo han innovado y desarrollado nuevas arquitecturas y soluciones de despliegue. Una de las más recientes en cloud software es la arquitectura de microservicios.

Esta innovadora solución implica la creación de entidades modulares, independientes, de bajo riesgo y altamente escalables. Todo ello dentro de un esfuerzo dirigido a:

  • Modularizar un producto de software
  • Incrementar la disponibilidad de las soluciones de hosting en cloud (a través de escalado elástico)
  • Limitar el riesgo de los fallos de los componentes separando el negocio
  • Evitar entregas de software en “big-bang”, desacoplando dependencias de las entidades lógicas

Un microservicio en la práctica se consigue simplemente dividiendo una solución de software en facciones lógicas independientes.

La arquitectura de microservicios y los conceptos de modularidad se contraponen con los paradigmas de desarrollo de software monolítico, en donde aplicaciones y servicios son construidos y desplegados como una solución unificada. Por el contrario, el concepto de microservicio crea valor de negocio, ya que limita el riesgo y ayuda a que los equipos de desarrollo puedan construir y desplegar pequeñas soluciones de software independientes. Cada entidad de software modular (microservicio) debe estar limitada a una única tarea o función e implementada con ese objetivo en mente. Las aplicaciones monolíticas sin embargo entrelazan dependencias entre componentes y acoplan la lógica de negocio con las capas de datos.

La siguiente figura muestra las diferencias indicadas entre ambos enfoques

Características de un microservicio

Lo cierto es que en el mundillo de la ingeniería del software cuando de se habla de microservicios todavía se hace con cierta ambigüedad.

Esto es resultado de la inmadurez de la arquitectura en sí misma y de la falta de convenciones y especificaciones de la industria respecto a estos temas tan actuales.

Con todo ello y basado en la investigación, un microserviciosi debe tener las siguientes características generales aceptadas por la comunidad:

  • Conforma una pequeña y singular unidad de despliegue, la cual puede desplegarse rápidamente y sin riesgo para el resto de unidades
  • Debe estar basado en patrones de diseño modulares, los cuales implican proveer o consumir interfaces con una única responsabilidad
  • Tiene la habilidad de escalar fácilmente (redundancia)
  • Tiene (donde aplique) una capa de datos modular no visible directamente desde las entidades externas, las capas de datos deben ser abstraídas vía APIs
  • Proporciona un aparato de comunicación entre servicios bien formado, preferiblemente a través de APIs REST o servicios de mensajería basado en colas
  • Tiene un “pipeline” propio y claramente definido y desplegado
  • Utiliza balanceadores de carga en el cliente para reducir la carga, siempre que sea posible

Basado también en la investigación y experiencia, un microservicio NO debe tener las siguientes características:

  • Conjunto monolítico de componentes inter – dependientes
  • Base de datos accesible y consumible por entidades externas
  • Elevado tiempo consumido durante su despliegue
  • Riesgo en el despliegue (puede afectar a otros componentes)
  • Un único punto de fallo que pueda provocar una cadena de fallos

Stacks tecnológicos que se llevan bien con los microservicios

Como la tendencia alrededor de la construcción, publicación y despliegue de microservicios continúa creciendo, nuevas tecnologías y plataformas evolucionan para prestarles su ayuda.

Una lista de las tecnologías más reconocidas es la siguiente:

Problemas comunes y buenas prácticas cuando se trabaja con microservicios

Diseñar, implementar y mantener microservicios puede consumir rápidamente muchos recursos humanos y de infraestructura si no se hace correctamente.

Cuando se trabaja con soluciones basadas en microservicios es importante aplicar buenas prácticas que mantengan el sistema y la solución flexible, eficiente y escalable.

Esto implica evitar problemas de rendimiento (muchas llamadas entre servicios), cuellos de botella o pesadillas operacionales.

Vamos a enumerar algunas buenas prácticas y algunos problemas que pueden producirse y que hay que evitar:

  • Evitar congestiones de tráfico haciendo hincapié en el cacheo de las peticiones a microservicios de alto uso
  • Implementar y adherirse a las prácticas culturales de DevOps. Los recursos de desarrollo necesitarán su propio camino hasta producción para sus cambios
  • Pasar los datos vía http headers cuando sea posible para reducir congestiones de tráfico ente microservicios
  • Implementar el patrón “Circuit Breaker” para evitar fallos en cadena y hacer al sistema más tolerante a fallos
  • Usar un servicio de mensajería basado en colas tal como RabbitMQ, OpenMQ, etc… cuando sea posible
  • Des sincronizar todo lo posible para incrementar el rendimiento
  • Implementar protocolos de restricción de acceso para reducir la disponibilidad de los microservicios a aquellos que no deben llamarlos
  • Usar soluciones de descubrimiento de servicios para que la arquitectura pueda dinámicamente expandirse o contraerse sin la intervención de un agente de gobierno
  • Esperar lo inesperado

La modularización de componentes en la ingeniería del software ha sido un tema candente durante muchos años y la llegada de esta nueva arquitectura de microservicios que ayuda a aliviar la aproximación del dinosaurio monolítico a la hora de desarrollar y desplegar software, es una innovación bienvenida.

Más información en http://martinfowler.com/microservices/

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s