Los microservicios son un sistema de desarrollo software que en los últimos años ha gozado de una gran popularidad, los miles de estándares web, lenguajes de programación, plataformas de bases de datos y componentes de servidores web independientes que los desarrolladores utilizan como herramientas en el ciclo de vida del desarrollo de software contemporáneo.
Los microservicios influyen de manera positiva en aspectos como el tiempo, rendimiento o la estabilidad de proyectos. Estos proponen su propia arquitectura.
Antiguamente la mayor cantidad de servicios que se conocían eran a través de arquitecturas monolíticas, es decir la aplicación era desarrollada como una única unidad, esto traía consigo sus ventajas y sus desventajas entre sus desventajas principales radica el de la poca escalabilidad, ¿actualmente se sigue usando está arquitectura? Sí, solo que en menor volumen que anteriormente.
¿Qué son los microservicios?
Los microservicios son un enfoque arquitectónico y organizativo para el desarrollo de software donde el software está compuesto por pequeños servicios independientes que se comunican a través de API bien definidas. Los propietarios de estos servicios son equipos pequeños independientes.
Una arquitectura de microservicios funciona con un conjunto de pequeños servicios que se ejecutan de manera independiente y autónoma. Incluso cada uno de ellos puede estar en un lenguaje de programación diferente. Este tipo de servicios nos permite contar con infraestructuras IT más flexibles y adaptables, ya que para modificar un único servicio no es necesario alterar el resto de la infraestructura.
Las arquitecturas de microservicios hacen que las aplicaciones sean más fáciles de escalar y más rápidas de desarrollar. Esto permite la innovación y acelera el tiempo de comercialización de las nuevas características.
¿Cómo funciona la arquitectura de microservicios?
La principal misión de los microservicios consiste en aumentar la funcionalidad disponible en un servidor web con respecto a la que ofrece de forma predeterminada la plataforma de gestión del sistema operativo, la red o el centro de datos.
Una arquitectura de microservicios funciona con un conjunto de pequeños servicios que se ejecutan de manera independiente y autónoma. Incluso cada uno de ellos puede estar en un lenguaje de programación diferente. Este tipo de servicios nos permite contar con infraestructuras IT más flexibles y adaptables, ya que para modificar un único servicio no es necesario alterar el resto de la infraestructura.
Características
- Cada servicio componente en una arquitectura de microservicios se puede desarrollar, implementar, operar y escalar sin afectar el funcionamiento de otros servicios.
- Puede ser descompuesto en diferentes partes independientes. Por ello cada uno de los servicios puede ser desplegado y modificado sin afectar a otros aspectos funcionales de la aplicación.
- Los servicios no necesitan compartir ninguno de sus códigos o implementaciones con otros servicios. Cualquier comunicación entre componentes individuales ocurre a través de API bien definidas.
- Tienen en cuenta aspectos como las capacidades, necesidades y preferencias del negocio o cliente donde será implantado.
- En cuanto, a la arquitectura, se usan módulos multifuncionales consiguiendo la creación de un módulo común para todos ofreciendo un servicio en concreto.
- Tiene ventajas en cuanto al ahorro de tiempo y la comodidad en tareas de mantenimiento evitando que, al revisar un módulo, el resto del equipo no pueda completar su jornada.
- Cada servicio está diseñado para un conjunto de capacidades y se enfoca en resolver un problema específico. Si los desarrolladores aportan más código a un servicio a lo largo del tiempo y el servicio se vuelve complejo, se puede dividir en servicios más pequeños.
- Cada módulo es independiente ya que, cada uno de ellos cuenta con su propia base de datos, es decir, no acuden todos a la misma. Así evitamos la sobrecarga y la caída de la aplicación.
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, esto se debe en gran parte debido a que 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.
Ventajas
- Agilidad.
- Escalado Flexible
- Implementación Sencilla
- Libertad tecnológica.
- Código reutilizable.
- Resistencia.
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.
Un ejemplo de Microservicios
El siguiente ejemplo lo estaremos basando en un video del canal Vida MRR Diseño y desarrollo web de un estimado amigo de esta comunidad Marcos Rivas En la arquitectura tradicional o monolítica comúnmente se construye una aplicación en la que se incluyen todas las capas de base de datos, de negocio e incluso la interfaz dentro de un contenedor.
El enfoque orientado a microservicios nos dice que podemos desmenuzar esa aplicación en varios servicios que funcionan de forma independiente, de tal forma que cada componente del negocio lo separemos y la comunicación entre ellos también; digamos el frontend o el componente principal que administra todos ellos sea a través de mensajes, HTTPS o recursos rest.
Si te interesa ver un ejemplo gráfico y detallado te dejo el Video de Marcos Rivas para que lo puedas checar.
¿Son los microservicios para cualquier empresa?
Al momento de pasar tu arquitectura monolítica a una arquitectura de microservicios es importante que te cuestiones o te preguntes
- 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, entre otros.
- Decisiones operativas: y, por último, hay que asegurarse de que nuestro equipo pueda monitorear y administrar el ecosistema de microservicios.
Mi experiencia personal
En mi caso particular desde hace años vengo trabajando en diversas