¿Cuáles son los pros y los contras de la arquitectura de microservicios?

Buena pregunta, respuesta complicada 🙂

Hay cuatro razones básicas para usar un microservicio: escalado, prueba, escalado nuevamente e implementación.

La primera escala se refiere al número de personas u organizaciones en un proyecto. Esperemos que esté lo suficientemente lejos en la ingeniería de software para darse cuenta de que las dependencias entre las partes son las que lo hacen difícil. Por ejemplo, si tiene SQL disperso en todo su código, dificulta la refactorización de la base de datos, pero si tiene un módulo que encapsula el SQL, entonces la refactorización se hace mucho más simple. Como es, más al punto, mantenimiento.

A medida que crece un proyecto de software, esto se vuelve más difícil, por lo que tiene sentido factorizar partes del proyecto en servicios separados completos. En lugar de tener un módulo de base de datos, ahora tenemos un servicio de base de datos … que se hace preguntas en (normalmente) el resto y, por lo tanto, está completamente separado del resto del proyecto. Esto hace que el desarrollo y el mantenimiento del software sean mucho más simples.

También simplifica las pruebas. Ahora que hemos dividido la aplicación en fragmentos ejecutables por separado; y trozos que están diseñados para usarse como una caja negra, ahora tenemos un modelo de prueba de caja negra. En resumen, los autores del servicio deben proporcionar una declaración de lo que realmente hace el servicio expuesto; y “todo” que los probadores necesitan hacer es probar contra esta especificación. Obviamente, en la práctica, hay mucho más por probar, pero este es un respaldo realmente sólido de una estrategia de prueba.

Los microservicios, particularmente si no tienen estado o son leídos, también se escalan magníficamente. Todo lo que realmente necesita hacer para escalar tal cosa es ejecutar más de una instancia en más de un nodo y luego equilibrar la carga entre ellos. Hay algunas advertencias sobre su uso en máquinas virtuales, como que básicamente no tiene sentido ejecutar dos instancias en máquinas virtuales en el mismo nodo, pero de todos modos debería usar contenedores 🙂

Y, finalmente, para la implementación, los microservicios significan que los nuevos componentes se pueden insertar en aplicaciones en ejecución sin eliminarlos. Quizás lo más relevante es que estos nuevos componentes se pueden deshacer si algo sale mal. También da lugar a una amplia variedad de técnicas de prueba, tales como “despliegue canario” (poner un poco de tráfico en el nuevo servicio y asegurarse de que se comportará) y “prueba en vivo” (enviar datos reales a dos versiones del mismo servicio y ver si los resultados son los mismos).

Contras: para proyectos más pequeños, los microservicios imponen una sobrecarga de administración que simplemente no es necesaria: puede componer en un fragmento monolítico y que no sea un problema. Los microservicios también agregan latencia a la aplicación en cuestión, por lo que, incluso si la capacidad del sistema aumenta, su rendimiento, como lo atestigua el usuario final, no lo hará. Y finalmente, los microservicios reintroducen el infierno de dependencia de versiones, exactamente lo que estábamos tratando de evitar mediante el uso de contenedores en primer lugar. Las API que evolucionan (sí, lo harán) deben ser versionadas y el trabajo debe realizarse para garantizar que un microservicio siempre esté asociado con la versión correcta del servicio que lo utiliza, o que el microservicio sigue siendo compatible con versiones anteriores, o que algunos el control de versiones tiene lugar … lo que significa servicios web … lo que significa SOAP … lo que significa XML … y todo tipo de secuencias de validación über dolorosas con un rendimiento deficiente asociado.

En resumen: utilícelos si el proyecto será grande y se preocupa por la calidad, o si tiene una gran capacidad y / o requisitos de tiempo de actividad.

La arquitectura de microservicios se usa ampliamente en las últimas empresas de tecnología como Netflix, Twitter, Amazon, Airbnb, etc.

Algunos de los pros y contras que se me ocurren son los siguientes:

Pros :

  • Es más fácil implementar un microservicio individual en comparación con un monolito.
  • Es más fácil desarrollar un microservicio para una tarea específica.
  • Es mucho más fácil cambiar la implementación subyacente de un microservicio.
  • Es más fácil escalar un microservicio.
  • Es más fácil depurar cualquier problema con un microservicio específico.

Contras :

  • Es muy difícil mantener múltiples microservicios.
  • Es muy difícil mantener el control de versiones entre microservicios.
  • Es extremadamente difícil encontrar buenos arquitectos para crear la arquitectura Microservice de la manera correcta.

Sígueme en Gautam Gupta para obtener más información sobre la arquitectura de microservicios.

Los microservicios proporcionan numerosas ventajas sobre un monolito de software, que finalmente conducen a un mejor desarrollo de software:

  • Desarrollo independiente : todos los microservicios se pueden desarrollar fácilmente en función de su funcionalidad individual
  • Implementación independiente : los microservicios se pueden implementar individualmente en cualquier aplicación
  • Aislamiento de fallas : incluso si un servicio de la aplicación no funciona, el sistema continúa funcionando y la falla es fácilmente detectable
  • Pila de tecnología mixta : se pueden usar diferentes idiomas y tecnologías para crear diferentes servicios de la misma aplicación
  • Escalado granular : los componentes individuales pueden escalar según la necesidad, no es necesario escalar todos los componentes juntos

Algunas desventajas de los microservicios son:

  • El mantenimiento de una gran cantidad de microservicios es difícil
  • La dependencia de la versión surge debido al funcionamiento interdependiente de los microservicios dentro de una aplicación.

Si desea obtener más información sobre microservicios, puede consultar los siguientes blogs:

Arquitectura de microservicios: aprenda, cree e implemente aplicaciones | Edureka

¿Qué son los microservicios? Introducción a la arquitectura de microservicios | Edureka

Tutorial de microservicios para principiantes | Ejemplo de microservicios | Edureka

O mira esta serie de tutoriales:

https://www.youtube.com/playlist?list=PL9ooVrP1hQOEW2uMfPJ3TMmVq7W2okO6U

Supongamos que es una arquitectura de microservicio bien hecha. Hay muchas formas de hacerlo mal, como es el caso con todo, más o menos. Entonces:

pros:

  1. Más fácil de escalar en cuanto al rendimiento, a través de la naturaleza distribuida de la arquitectura
  2. Más fácil de auto-curar, porque una instancia de microservicio puede ser reemplazada rápidamente por otra instancia
  3. Es más fácil de escalar en cuanto a funcionalidad, debido a la gran separación de preocupaciones que permite a muchos equipos trabajar en paralelo con baja fricción

contras:

  1. Más difícil de arrancar: más trabajo, más devop
  2. Penalización de rendimiento si solo tiene un puñado de CPU