GNU/Linux >> Tutoriales Linux >  >> Cent OS

¿Qué son los Microservicios? Introducción a la Arquitectura de Microservicios

Introducción

En la última década, el desarrollo de aplicaciones ha evolucionado rápidamente para mantenerse al día con los avances tecnológicos y las necesidades de los consumidores.

Mientras que el desarrollo tradicional se basaba en una gran parte del código, la mayoría de las aplicaciones actuales se crean a partir de varias miniaplicaciones. o microservicios , cada uno responsable de una única funcionalidad de la aplicación.

Juntos forman un sistema denominado arquitectura de microservicios.

¿Qué son los microservicios?

Microservicios , o más bien la arquitectura de microservicios , es un sistema que se utiliza para desarrollar una aplicación, basado en una selección de servicios individuales que trabajan juntos para garantizar un rendimiento fluido y con gran capacidad de respuesta.

Si está creando una aplicación web utilizando la arquitectura de microservicio, la divide en funcionalidades individuales, desarrollando e implementando cada una como una aplicación separada.

A diferencia del desarrollo monolítico, donde todo se fusiona y, por lo tanto, dependen unos de otros, la arquitectura de microservicio consta de múltiples módulos de componentes autónomos. Es un tipo de arquitectura que se basa en el sistema de acoplamiento flexible .

Nota :El acoplamiento débil está estructurando un sistema en el que los elementos no se conocen entre sí, pero pueden comunicarse.

Por ejemplo, un sitio web de comercio electrónico requiere muchos servicios diferentes, incluidos pagos en línea, devoluciones, perfiles de usuario, etc. Para crear el sitio web, los desarrolladores se dividirían en equipos, cada uno responsable de crear uno de los microservicios en uso.

¿Cómo se comunican los microservicios entre sí?

Una vez que haya comprendido la estructura, es posible que se pregunte cómo se unen estas entidades separadas para crear un servicio o aplicación armoniosa. La respuesta se reduce a establecer una comunicación directa, rápida e impecable. entre todos los servicios. Por lo tanto, los microservicios se comunican entre sí a través de API .

Interfaz de programación de aplicaciones (API ) es un punto de acceso de cada funcionalidad modular que permite que los módulos interactúen. Un microservicio usa esta interfaz para enviar y responder solicitudes de otros módulos.

Cada microservicio debe tener un punto final de API claramente definido (un extremo de un canal de comunicación) para garantizar que siempre esté accesible para consultas. En la mayoría de los casos, se trata de API REST sin estado. . Sin puntos finales claramente definidos, el sistema no sabe dónde buscar la información que necesita.

Por lo tanto, los equipos DEV usarían estándares y patrones oficiales para compartir puntos finales entre ellos. Es su responsabilidad establecer la API REST a través de la colaboración y una comunicación clara.

La diferencia entre la arquitectura tradicional y la arquitectura de microservicios

Para comprender mejor los microservicios, comparémoslos con el sistema utilizado antes de su desarrollo:arquitectura monolítica .

Arquitectura monolítica funcionó bien para los sistemas tradicionales del lado del servidor. Son sistemas basados ​​en una única aplicación. Todas las funcionalidades residen en una estructura, utilizan el mismo sistema de archivos, se comunican con el mismo servidor y finalmente se implementan en la misma máquina.

Este tipo de arquitectura permite a los desarrolladores crear aplicaciones más rápido, ya que solo necesitan construir las características esenciales a las que luego agregarían otras funcionalidades. Además, el rendimiento fue más rápido ya que el proceso no involucra API.

Con la expansión de las aplicaciones web surgió la necesidad de agilidad y tiempo de actividad constante. La arquitectura monolítica tenía demasiados obstáculos para mantenerse al día con estas demandas.

Contras de la arquitectura monolítica

Como estos sistemas tenían un proceso de acoplamiento estrecho, cualquier cambio realizado en el código podría poner en peligro el rendimiento de toda la aplicación. Las funcionalidades eran demasiado interdependientes para una nueva era tecnológica que demandaba constantes innovaciones y adaptaciones.

Otro problema con la arquitectura monolítica era su incapacidad para escalar funcionalidades individuales. Un aspecto crucial de las empresas exitosas es su capacidad para mantenerse al día con las demandas de los consumidores. Naturalmente, estas demandas dependen de varios factores y fluctúan con el tiempo.

En algún momento, su empresa necesitará escalar solo una determinada función de su servicio para responder a un número creciente de solicitudes. Con las aplicaciones monolíticas, no podía escalar elementos individuales, sino que tenía que escalar la aplicación como un todo.

Beneficios de los microservicios

La introducción de microservicios resolvió muchos problemas que el desarrollo monolítico no pudo.

1. Altamente Flexible

En primer lugar, la arquitectura de microservicios es muy flexible. . Dado que cada microservicio es independiente, los programadores pueden crear módulos utilizando diferentes lenguajes o plataformas. Estos módulos podrán comunicarse entre sí gracias a las API.

Además, con los microservicios, ninguna organización tiene que comprometerse a largo plazo con una pila de tecnología. Así, los desarrolladores siempre pueden trabajar con la última tecnología.

2. Módulos de funcionalidad reutilizables

Además, esta función permite a los desarrolladores reutilizar módulos de funcionalidad y aplicarlos a otras aplicaciones. El uso de microservicios ya perfeccionados ahorra recursos de la empresa y permite a los desarrolladores centrarse en otros proyectos.

3. Resiliente a los Cambios

Otra característica importante es que el sistema es bastante resistente a los cambios. Combinadas libremente, las funcionalidades dentro de una aplicación no son tan codependientes. Los desarrolladores pueden agregar nuevas funciones de manera eficiente o modificar las existentes. Alteran el código de un módulo en lugar de la aplicación completa.

4. Escalable

A diferencia de las aplicaciones monolíticas, los microservicios son excelentes para escala . Se aseguran de que su aplicación esté en funcionamiento en todo momento, sin gastar dinero en módulos no utilizados. Dado que implementa funcionalidades en diferentes servidores, el sistema le permite escalar solo los recursos necesarios.

5. Ciclos de desarrollo más rápidos

En un modelo distribuido, la aplicación se divide en servicios más pequeños. Si su organización ha adoptado el desarrollo ágil, sus equipos pueden actualizarlo más fácilmente y acelerar los ciclos de desarrollo.

Desde una perspectiva comercial, los ciclos de desarrollo más rápidos son una de las mayores mejoras introducidas por los microservicios.

6. Modelo Transparente

Los nuevos empleados, por ejemplo, comprenderán y modificarán el código más fácilmente. Esto se basa en el hecho de que la aplicación se distribuye entre numerosos servicios. Manejar un microservicio a la vez es más fácil que abordar un sistema integrado completo.

Inconvenientes de los microservicios

1. Complejidad

El principal inconveniente de la arquitectura de microservicios es su complejidad. . En comparación con las aplicaciones monolíticas, el sistema recientemente desarrollado tiene muchos más componentes. Estos componentes (microservicios) tienen que funcionar perfectamente por sí mismos y dentro del sistema.

2. gastos

Este sistema también es más caro . Debido a que los servicios se implementan en varios servidores, la aplicación termina requiriendo una cantidad más significativa de CPU y más entornos de tiempo de ejecución. Además, debido a su necesidad de comunicación constante, los microservicios realizan muchas llamadas remotas. Estos y otros factores se suman, por lo que requieren un presupuesto ampliado para el desarrollo.

3. Seguridad

Los microservicios también requieren mayor seguridad medidas. Como se mencionó anteriormente, los servicios se comunican entre sí a través de API. Esto significa que intercambian información a través de la red, lo que siempre es una amenaza potencial. Por esta razón, el mantenimiento y las actualizaciones deben ser impecables.

4. Rendimiento

La complejidad de la arquitectura también influye en su rendimiento . Como los microservicios incluyen múltiples instancias de JVM (Java Virtual Machine) y comunicación entre procesos, su eficiencia puede ser más lenta que con las aplicaciones monolíticas.

Desafíos para la adopción de microservicios

1. Diseño de un modelo distribuido

El desafío inicial para adoptar microservicios es diseñar un modelo confiable y sostenible . Los microservicios usan un sistema distribuido libremente, por lo que es probable que termine con un diseño complejo. Todas las dependencias del sistema deben ser cuidadosamente consideradas y tenidas en cuenta.

2. Pruebas de integración

Otro desafío es la integración y las pruebas de extremo a extremo. Las pruebas se vuelven más difíciles y, sin embargo, más importantes que nunca. Los microservicios deben comunicarse y apoyarse entre sí, por lo que todos los servicios deben estar libres de errores. Un error en un servicio puede causar un error fatal en otro. Esta es la razón por la cual las pruebas continuas con microservicios son primordiales.

3. Despliegue

Si todavía está implementando manualmente, su equipo inicialmente tendrá que invertir tiempo en automatizar el proceso. Debido a la complejidad de los modelos distribuidos, la implementación manual se vuelve demasiado compleja.

4. Supervisión y registro

Las organizaciones que adopten microservicios deben establecer un sistema centralizado de seguimiento y registro . Si no se configura, es imposible identificar y depurar problemas.

5. Depuración

Debido a todos los factores mencionados anteriormente y otras complejidades, como el equilibrio de carga y la latencia, problemas de depuración , en un sistema distribuido, es complejo. No existe una respuesta simple sobre qué enfoque funciona mejor y seguramente pasará algún tiempo antes de que encuentre lo que funciona mejor para su proyecto.

6. Otras consideraciones

Finalmente, su organización necesita adaptarse para adoptar un modelo de microservicio. La forma en que sus equipos trabajan y cooperan deberá cambiar. Impulse un cambio en la cultura de su empresa para preparar a sus equipos para los microservicios.

Ejemplos de Microservicios

Microservicios en Java

Puede desarrollar microservicios usando diferentes lenguajes. Sin embargo, Java todavía se considera una de las mejores opciones para crear aplicaciones con dicha arquitectura.

Se utilizan varios marcos de microservicios para desarrollar con Java, incluidos:

  • Bota de primavera
  • Arrogancia
  • Jersey
  • Asistente para soltar
  • JHipster
  • Vert.x
  • Reproducir

Además, la configuración de microservicios se usa a menudo para admitir un entorno de aprendizaje automático (ML), ya que permite múltiples marcos de aprendizaje automático en el flujo de trabajo. TensorFlow, Apache Mahout y Apache Singa son ejemplos de marcos de ML utilizados con Java.

Al recopilar, agregar y analizar el flujo de datos, los marcos pueden predecir el resultado y proporcionar una comparación entre modelos.

Microservicios en Docker

Docker es otro gran software para crear microservicios. Como utiliza contenedores para ejecutar entornos virtuales, la plataforma permite varias formas de organizar los microservicios:

  • Cada contenedor puede estar dedicado a un servicio individual.
  • Un solo servicio se puede separar en varios contenedores para procesos separados dentro del servicio.

Los contenedores son una forma práctica de aislar microservicios. Son livianos, implementables y escalables a varios sistemas operativos e infraestructura.

Si está ejecutando una aplicación Docker de varios contenedores, Docker Compose es una herramienta que puede ayudarlo a administrar y configurar todos sus microservicios. Todo esto se hace con un solo yaml y realiza las tareas de lanzamiento, ejecución, comunicación y cierre de contenedores con un solo comando coordinado.

Las aplicaciones de contenedores múltiples con numerosos hosts Docker se administran mejor con una plataforma de orquestación de contenedores, como Swarm o Kubernetes. Ambas plataformas le permiten administrar grupos de servidores, cada uno con múltiples servicios en ellos. Para obtener más información sobre sus diferencias, consulte nuestro artículo Kubernetes frente a Docker Swarm.

La siguiente es una ilustración de cómo administrar clústeres de contenedores con Swarm y Compose colaborando en un sistema unificado.


Cent OS
  1. Debian vs Ubuntu:¿Cuáles son las diferencias?

  2. ¿Qué diferencias hay entre las distintas versiones de Emacs disponibles?

  3. ¿Qué son los contactos?

  4. ¿Qué son las páginas sucias en Linux?

  5. ¿Qué son build-essential y build-dep?

Cassandra vs MongoDB - ¿Cuáles son las diferencias?

Terraform vs Kubernetes:¿Cuáles son las diferencias?

¿Qué es Istio? - Arquitectura, Características, Beneficios y Desafíos

¿Qué son los inodos en Linux?

Qué es:Frameworks Javascript – Introducción

¿Qué son las cuentas de cPanel?

    PROS CONTRAS
    Independencia de los servicios. Cada contenedor de servicios tiene su propia lógica comercial y se enfoca en una sola capacidad comercial. La arquitectura admite unidades desplegables individuales independientes entre sí. Configuración compleja. Debido a su individualismo, configurar el sistema requiere más configuración y recursos, lo que genera una sobrecarga operativa.
    Despliegue flexible/ágil. Cada microservicio se puede escalar de forma independiente con la oportunidad de usar diferentes tecnologías y ejecutarse en diferentes pilas y productos. Complejidad operativa. Es más difícil solucionar problemas, depurar y rastrear transacciones a través del ecosistema de microservicios. Abordar problemas en el sistema exige altos niveles de automatización.
    Tolerancia a fallos. Los microservicios son unidades débilmente acopladas que se pueden restaurar automáticamente. Estas unidades no son codependientes, lo que permite a los desarrolladores aumentar la disponibilidad de cada unidad, cuando sea necesario. Riesgo de seguridad. Aunque los servicios aislados son más tolerantes a fallas, la misma función puede generar problemas de seguridad durante las transacciones entre unidades.
    Admite CI/CD. Dado que los microservicios se implementan de forma independiente, se pueden desarrollar e implementar varias instancias simultáneamente. Por lo tanto, conduce a lanzamientos de software más rápidos y frecuentes. Interfaces codependientes. Los servicios se comunican a través de interfaces que son interdependientes. Es imposible modificar una interfaz sin ajustar la otra.
    Agiliza la adición de nuevas funciones. Es más fácil agregar nuevas funciones cambiando los servicios existentes o agregando otros nuevos sin interrumpir el rendimiento de otros servicios. Rendimiento más lento. En comparación con las aplicaciones monolíticas, los microservicios necesitan más tiempo para realizar tareas debido a su arquitectura compleja y la comunicación entre procesos.