Jump to section

¿Qué son los microservicios?

Copiar URL

Los microservicios son un tipo de arquitectura que sirve para diseñar aplicaciones. Se trata de un marco de diseño distribuido y sin conexión directa, por lo cual los cambios que lleva a cabo un equipo no afectan a toda la aplicación. Los desarrolladores pueden aprovecharlo para diseñar nuevas funciones con rapidez, y así satisfacer las necesidades cambiantes de la empresa.

Lo que distingue a la arquitectura de microservicios de los enfoques tradicionales y monolíticos es la forma en que fragmenta una aplicación hasta sus funciones principales. Cada una de ellas se denomina servicio y se puede diseñar e implementar de forma independiente, lo cual permite que funcionen (y fallen) sin afectar a las demás. De esta manera, puede adoptar la tecnología de DevOps y lograr la integración y la distribución continuas (CI/CD) sin problemas.

imagen

Acuérdese de la última vez que visitó una tienda en línea. Seguramente usó la barra de búsqueda del sitio para acceder a los productos. Esa búsqueda representa un servicio. Asimismo, es posible que haya visto recomendaciones sobre productos relacionados, que provienen de una base de datos con las preferencias del comprador y constituyen un servicio. Por último, si añadió algún artículo al carrito de compras en línea, también utilizó un servicio.

En resumen, un microservicio es una función principal de la aplicación que se ejecuta de forma independiente de las demás. Sin embargo, la arquitectura basada en ellos no solo abarca las funciones que no están conectadas de forma directa, sino que incluye la restructuración de los equipos de desarrollo y la comunicación entre los servicios con el objetivo de prepararse para las fallas inevitables, la futura necesidad de adaptación y la integración de las funciones nuevas.

Esto se logra ajustando los elementos básicos de una arquitectura orientada a los servicios (SOA) para admitir la implementación de los microservicios.

Si fragmentar las aplicaciones hasta sus funciones principales y evitar los riesgos de las arquitecturas monolíticas le resulta familiar, se debe a que la arquitectura de los microservicios es similar a la orientada a los servicios, un estilo consolidado para el diseño de software.

En los comienzos del desarrollo de aplicaciones, el más mínimo cambio en una aplicación requería ejecutar una actualización masiva de las versiones con su propio ciclo de control de calidad, lo cual podía retrasar a muchos subequipos. A este enfoque se lo conoce como "monolítico", ya que la totalidad del código fuente se crea en una sola unidad de implementación (por ejemplo, un archivo .war o .ear). Si las actualizaciones de una parte de la aplicación generan errores, se debe desconectar todo el sistema para analizarlo y solucionar el error. Este enfoque todavía es viable para las aplicaciones pequeñas, pero las empresas en crecimiento no pueden permitirse tanto tiempo de inactividad.

Piense en la arquitectura orientada a los servicios, la cual estructura las aplicaciones en servicios diferentes y reutilizables que se comunican a través de un bus de servicios empresariales (ESB). En ella, cada servicio se organiza en torno a un proceso empresarial en particular y cumple con un protocolo de comunicación (por ejemplo, SOAP, ActiveMQ o Apache Thrift) para admitir el uso compartido por medio del ESB. Todo el conjunto de servicios que se integra con el bus conforma la aplicación.

Por un lado, esto permite que los servicios se diseñen, se prueben y se optimicen de forma simultánea, sin recurrir a ciclos de desarrollo monolítico. Por otro lado, el ESB representa un punto único de fallas para todo el sistema. En el intento de eliminar la estructura monolítica, se creó una estructura similar que podría bloquear todos los procesos de la empresa.

¿En qué se diferencian estas arquitecturas? Los microservicios pueden establecer una comunicación (por lo general, sin estado) entre sí, por lo que las aplicaciones diseñadas con ellos son más tolerantes a los errores y dependen menos de un único ESB. Esto también permite que los equipos de desarrollo elijan sus propias herramientas, ya que los microservicios pueden comunicarse a través de interfaces de programación de aplicaciones (API) que no dependen de ningún lenguaje.

Si consideramos la historia de la arquitectura orientada a los servicios (SOA), los microservicios no son una idea tan innovadora. Sin embargo, los avances en las tecnologías de contenedores han hecho más viable su adopción. Con los contenedores de Linux, es posible ejecutar varias partes de una aplicación de forma independiente en el mismo hardware y con mucho más control sobre los elementos y los ciclos de vida individuales. Junto con los equipos de DevOps y API, los microservicios en contenedores constituyen la base de las aplicaciones nativas de la nube.

Los microservicios mejoran las rutinas e impulsan a sus equipos por medio del desarrollo distribuido. Además, usted tiene la posibilidad de desarrollar varios de ellos de forma simultánea, de modo que más desarrolladores pueden trabajar en la misma aplicación al mismo tiempo para agilizar el proceso de desarrollo.

Aplicaciones listas para la comercialización más rápidamente

Debido a la agilización de los ciclos de desarrollo, la arquitectura de microservicios permite implementar y actualizar los sistemas con mayor rapidez.

Gran escalabilidad

Cuando aumenta la demanda de ciertos servicios, puede realizar implementaciones en distintos servidores e infraestructuras para satisfacer sus necesidades.

Capacidad de recuperación

Si estos servicios independientes están bien diseñados, no afectarán a los demás. Esto significa que cuando un elemento falla, no altera el funcionamiento del resto de la aplicación, a diferencia de lo que sucede en el modelo monolítico.

Facilidad de implementación

Debido a que las aplicaciones basadas en microservicios son más modulares y pequeñas que las monolíticas tradicionales, ya no debe preocuparse por su implementación. Si bien requieren más coordinación, la cual puede obtener con una capa de malla de servicios, ofrecen grandes ventajas.

Accesibilidad

Gracias a que las aplicaciones más grandes se fragmentan en elementos más pequeños, los desarrolladores pueden comprender, actualizar y mejorar esas piezas más fácilmente; de esta manera, se obtienen ciclos de desarrollo más rápidos, sobre todo cuando se combinan con metodologías de desarrollo ágiles.

Enfoque más abierto

Los desarrolladores utilizan API que admiten varios lenguajes, así que tienen la posibilidad de elegir los mejores lenguajes y tecnologías para cada función.

Si su empresa tiene pensado migrar a una arquitectura de microservicios, no solo deberá cambiar la manera en que funcionan las aplicaciones, sino la forma de trabajar de las personas. Los cambios en la empresa y la cultura representan desafíos, en parte porque cada equipo tendrá un ritmo de implementación determinado y será responsable por un servicio único con su propio grupo de clientes. En general, los desarrolladores no deben preocuparse por estos cambios, pero son fundamentales para implementar la arquitectura de microservicios de manera exitosa.

Además de la cultura y los procesos, la complejidad y la eficiencia son dos desafíos importantes para este tipo de arquitectura. John Frizelle, arquitecto de plataformas de Red Hat Mobile, expuso estas ocho categorías de desafíos en la presentación que hizo en la Red Hat Summit de 2017:

  1. Diseño: destine tiempo a identificar las dependencias entre los servicios. Tenga en cuenta que completar un proceso de diseño puede desencadenar otros debido a esas dependencias. Asimismo, considere los efectos que tienen los microservicios en sus datos.
  2. Pruebas: las pruebas completas y de integración pueden tornarse más complejas e importantes que nunca. Tenga en cuenta que una falla en una parte de la arquitectura puede producir errores en los elementos cercanos, dependiendo de la manera en que haya diseñado sus servicios para que sean compatibles entre sí.
  3. Control de versiones: cuando actualice los sistemas a las nuevas versiones, corre el riesgo de eliminar la compatibilidad con las versiones anteriores. Para solucionarlo, puede diseñar los programas siguiendo una lógica condicional, pero esto se convierte en una tarea engorrosa y desagradable con rapidez. Otra opción es implementar varias versiones en vivo para distintos clientes, lo cual dificulta el mantenimiento y la gestión.
  4. Implementación: también representa un desafío, al menos durante la configuración inicial. Para simplificarla, debe invertir mucho en la automatización, ya que la complejidad de los microservicios resulta agobiante para realizar una implementación manual. Tenga en cuenta la manera y el orden en que lanzará los servicios.
  5. Registro: los sistemas distribuidos exigen concentrar los registros para poder integrar todos los elementos. De lo contrario, es imposible controlar la escalabilidad.
  6. Supervisión: resulta fundamental tener una vista centralizada del sistema para identificar las causas de los problemas.
  7. Depuración: la depuración remota por medio de su entorno de desarrollo integrado (IDE) local no funcionará para decenas o cientos de servicios. Lamentablemente, por el momento no hay una respuesta única sobre cómo realizar este proceso.
  8. Conectividad: considere la detección de servicios, ya sea centralizada o integrada.

Calcule los ahorros que obtendrá con la migración

Algunas infraestructuras virtuales imponen cada vez más acuerdos de licencias empresariales y, por lo tanto, limitan su elección de software. La virtualización open source podría allanar el camino hacia los contenedores.

Articulos relacionados

ARTÍCULO

Los microservicios respaldan la integración de la TI en el sector de la salud

Los microservicios permiten que los desarrolladores de varios sectores, como el de la salud, creen aplicaciones compuestas por servicios sin conexión directa, lo cual facilita los procesos de desarrollo, prueba, implementación y actualización.

ARTÍCULO

¿Qué son los microservicios?

Los microservicios son un tipo de arquitectura que permite diseñar aplicaciones cuyos elementos funcionan de forma independiente pero coordinada.

ARTÍCULO

¿Qué es una malla de servicios?

Una malla de servicios es una capa de infraestructura que se integra con las aplicaciones y documenta la interacción entre los servicios, lo cual permite optimizar la comunicación y evitar el downtime con facilidad.

Más información sobre los microservicios

Productos

Red Hat OpenShift

Plataforma de contenedores de Kubernetes empresarial con operaciones automatizadas integrales para gestionar implementaciones de nube híbrida, multicloud y edge computing.

Contenido adicional

Informe de analistas

El camino a las aplicaciones nativas de la nube

Ebook

Enseñarle a bailar a un elefante: resumen para ejecutivos

Capacitación

Curso de capacitación gratuito

Developing Cloud-Native Applications with Microservices Architectures

Illustration - mail

Obtenga más contenido como este

Suscríbase a nuestro boletín informativo: Red Hat Shares.