Índice de contenidos
Los microservicios son unidades funcionales concretas e independientes, que trabajan juntas para ofrecer la funcionalidad general de una aplicación. Cada microservicio puede ser actualizado o escalado sin que esto afecte a la disponibilidad de los demás unidades y de la aplicación en su conjunto. Los microservicios son los principales componentes de una Arquitectura de Microservicios.
El Cloud ha cambiado para siempre el mundo de la computación y ha favorecido la proliferación de las aplicaciones basadas en microservicios en detrimento de las arquitecturas monolíticas. Veamos juntos cómo la arquitectura de microservicios está ayudando a empresas innovadoras a crear aplicaciones más agiles y escalables.
¿Qué son los microservicios?
Según James Lewis y Martin Fowler (los creadores del concepto) los microservicios son un enfoque para desarrollar una única aplicación como un conjunto de pequeños servicios, cada uno ejecutándose en su propio proceso y comunicándose con mecanismos ligeros, a menudo una API a través de HTTP.
Estos servicios se desarrollan alrededor de capacidades de negocio y se pueden implementar de forma independiente y completamente automatizada. Existe un mínimo de administración centralizada de estos servicios, que puede escribirse en diferentes lenguajes de programación y utilizando diferentes tecnologías de almacenamiento de datos.
Los microservicios se adaptan perfectamente a los requerimientos de agilidad, escalabilidad y confiabilidad de las aplicaciones modernas en la nube.
Microservicios vs arquitectura monolítica
Los microservicios surgen como una alternativa a la manera tradicional de desarrollar aplicaciones, que se denomina arquitectura monolítica. Este tipo de aplicaciones es muy dependiente del hardware sobre el que se instala, y se configura como un “bloque” único – el monolito, precisamente – compuesto por tres niveles: el front end, la lógica de business y los datos. Esta gran dependencia del hardware se materializa en largos tiempos de inactividad a la hora de realizar actualizaciones del software o despliegues de nuevo hardware para añadir más capacidad.
El modelo monolítico es totalmente incompatible con la gran velocidad de los ciclos de desarrollos y con los requerimientos de disponibilidad actuales. Hoy en día, sería impensable tener que pasar por un ciclo entero de integración y testing de una aplicación entera cada vez que se modifique una de sus partes. Un e-commerce cuya web no esté disponible 24/7 perdería un gran número de clientes, que se pasarían a la competencia. De la misma manera, cada vez es menos aceptable que la web de un banco sufra unas ventanas de mantenimiento, lo que hasta hace poco era la norma.
Microservicios: características principales
Más allá de la definición, para poder entender mejor los microservicios, hay que analizar sus características principales.
- Están enfocados a escenarios empresariales: a diferencia del enfoque monolítico, cada microservicio de desarrolla a partir de un escenario concreto de cliente o negocio, por lo cual son más simples y menos condicionados por la tecnología.
- Son desarrollados por equipos pequeños: su enfoque a producto, permite a un equipo de desarrollo seguir vinculado al servicio que ha desarrollado a lo largo de todo su ciclo de vida – en contraposición con el modelo enfocado a proyecto, donde el equipo es únicamente responsable del desarrollo del software que a continuación se traslada a otro equipo para su mantenimiento.
- Permiten un alto nivel de desacoplamiento: cada microservicio mantiene su propio dominio lógico, comunicándose y compartiendo datos con los demás, con un enfoque RESTful y utilizando los protocolos HTTP y TCP, y XML o JSON como formato de serialización. En palabra de Martin Fowler los microservicios son una arquitectura con “puntos finales inteligentes y tuberías tontas”.
- Son independientes de lenguajes concretos: cada microservicio puede ser desarrollados en un distinto lenguaje de programación (C++, C#, Java, etc.) y apoyarse a diversas tecnologías de almacenamiento a segunda de las ventajas que aportan para el objetivo del servicio.
- Son gestionados de forma independiente: tanto su implementación, actualización y escalado se realizan de forma independiente, lo que aplica también al control de versiones y a al almacenamiento de los estados de los servicios.
- Tienen nombres únicos: cada microservicio tiene un nombre único para que se pueda resolver su ubicación; un registro de servicios se ocupa de recopilar un directorio.
- Son resilientes: en caso de error, un microservicio puede reiniciarse en otra maquina para seguir estando disponible, evitando la pérdida de datos y manteniendo su coherencia.
Principales plataformas de microservicios
Para que podamos disfrutar de todos los beneficios de rentabilidad, escalabilidad y disponibilidad, es necesario disponer de una plataforma de microservicios.
Una plataforma de microservicios ofrece funcionalidades como el descubrimiento, un directorio y la monitorización de los servicios. Esto es fundamental sobre todo cuando un servicio está en mantenimiento o se escala, caso en el cual la plataforma se ocupa de comunicar la información de ubicación actualizada a todos los demás microservicios a para que puedan establecer o restablecer rápidamente la comunicación.
Además, una plataforma de microservicios traslada automáticamente las instancias a máquinas virtuales o a otros servidores cuando el software o hardware en el que se ejecutan fallan o deben reiniciarse para realizar actualizaciones.
Estas son algunas de las principales plataformas más populares para desarrollar e implementar aplicaciones de microservicios:
- Docker Swarm y Docker Compose. La filosofía de contenedores Docker se alinea de forma natural con las arquitecturas de microservicios.
- Kubernetes. Es un sistema de código abierto que automatiza la implementación, las operaciones y el escalado de las aplicaciones en contenedores. Originalmente desarrollado por Google, se basa en sus experiencias en servicios como Google Search y Gmail.
- Mesosphere. Mesosphere Datacenter Operating System (DCOS) es un administrador de clúster escalable que incluye Mesosphere’s Marathon, una herramienta de orquestación de contenedores de nivel de producción
- OpenShift. Es una plataforma como servicio (PaaS) que aprovecha el empaquetado basado en contenedores Docker para implementar orquestación de contenedores y capacidades de administración informática para Kubernetes.
- Pivotal Cloud Foundry. Permite arquitecturas de microservicios combinando flujo de trabajo y programación de contenedores desde Cloud Foundry con integraciones para patrones de microservicios
- Service Fabric. Desarrollado por Microsoft, potencia sus servicios en la nube a gran escala, incluidos SQL DB, DocDB, Intune, Cortana y Skype for Business, así como muchos servicios internos de infraestructura de Azure.
Casos de éxito
Abrazar los microservicios ha ayudado a grandes empresas a ser tan ágiles e innovadoras como startups. Algunos de los casos más importantes son:
- Netflix: hace ya unos años, esta empresa acometió un gran cambio, transformándose de una aplicación monolítica de alquiler de DVD a una arquitectura de microservicios que le permite ofrecer servicios de streaming digital de calidad en centenares de distintas pantallas y dispositivos a millones de clientes en todo el mundo.
- Amazon también tuvo que adoptar los microservicios, como parte de su transición desde una tienda de libros online a un proveedor de servicios en la nube. Gracias a los microservicios, su web ha podido implementar de forma exitosa novedosos servicios y se ha consolidado como uno de los principales referentes del comercio electrónico.
- Twitter también adoptó los microservicios para poder soportar la ingente cantidad de trafico que recibe.
- Y así, casi todas las grandes compañías de Internet como Ebay o el mismo Google.
Retos de los microservicios
Aunque traen muchas ventajas, los microservicios son un concepto relativamente nuevo y, por lo cual, presentan bastante retos:
- En primer lugar, la complejidad: Una aplicación basada en microservicios es más compleja que un monolito, ya que está compuesta por muchos servicios distintos e independientes. Se necesita por lo cual de una política de gobernanza adecuada.
- Además, manejar los fallos es más complicado, ya que se necesita monitorizar distintas piezas para detectar los posibles problemas.
- Finalmente, no todos los profesionales de IT poseen los conocimientos necesarios para desarrollar y gestionar correctamente una arquitectura de microservicios.
¿Son los microservicios para mi?
Muchos expertos desaconsejan abordar desde cero la complejidad de los microservicios, llevando a cabo más bien un cambio gradual. En este sentido, IBM ha publicado una interesante guía que detalla las 5 clases de decisiones clave que tiene que tomar una organización antes de abrazar una arquitectura de microservicios:
- Decisiones de negocio: en comparación con el enfoque monolítico tradicional, una estrategia de microservicios implica inversiones financieras, en la cultura de empresa y en nuevos desarrollos y operaciones (como DevOps).
- Decisiones de arquitectura y diseño: los microservicios introducen nuevos enfoques y consideraciones para la arquitectura y el diseño; es necesario asegurarse de que se están utilizando los enfoques arquitectónicos más adecuados y tomar las decisiones necesarias para el diseño de la aplicación que nos ayuden a lograr nuestros objetivos comerciales.
- Decisiones de implementación: hay que considerar varias opciones de implementación que necesita una arquitectura de microservicios, incluidas las plataformas, los frameworks y los lenguajes de programación.
- Decisiones de resiliencia: para crear una arquitectura de microservicios, es necesario tener en cuenta su tolerancia a fallos, lo que incluye alta disponibilidad, conmutación por error (failover), recuperación de desastres, interrupción de circuitos, aislamiento, etc.
- Decisiones operativas: y, por último, hay que asegurarse de que nuestro equipo pueda monitorear y administrar el ecosistema de microservicios.
Hemos visto como la arquitectura enfocada a microservicios es una magnifica respuesta a las necesidades actuales de desarrollo y oferta de servicios, y como empresas la han adoptado con éxito. Aún así, se trata de un concepto reciente y que va a madurar más con el tiempo. Por otro lado, es un modelo que introduce más complejidad, al existir más componentes que administrar y monitorizar. Definitivamente, los microservicios pueden dar lo mejor de sí mismos en empresas que hayan adoptados prácticas modernas de ingeniería del software, como DevOps.
¿Y tu empresa, está lista para el cambio?
Material relacionado
Artículos
- ¿Conoces las ventajas del cloud computing?
- Todo lo que necesitas saber para aprovechar tus servidores en la nube
- PostgreSQL vs MySQL ¿Cuál usar para mi proyecto?
eBooks