¿Qué son los microservicios?
La arquitectura de microservicios es un enfoque en el que una única aplicación consta de muchos servicios más pequeños que están débilmente acoplados y se pueden implementar de forma independiente.
Los microservicios (o arquitectura de microservicios) son un enfoque arquitectónico nativo de la nube en el que una única aplicación se compone de muchos componentes o servicios más pequeños que están débilmente acoplados y se pueden implementar de forma independiente.
Estos servicios normalmente
Si bien gran parte del debate sobre los microservicios gira en torno a definiciones y características arquitectónicas, su valor se puede encontrar de manera más general a través de beneficios empresariales y organizacionales bastante simples: p>
Los microservicios también se pueden entender por lo que no son.
Las dos comparaciones más comunes con la arquitectura de microservicios son la arquitectura monolítica y la arquitectura orientada a servicios (SOA).
La diferencia entre microservicios y arquitectura monolítica es que los microservicios constan de muchos servicios más pequeños y poco acoplados que conforman una aplicación, a diferencia del enfoque monolítico de una aplicación grande y estrechamente acoplada
Es posible que la diferencia entre microservicios y SOA no esté clara.
Si bien se pueden hacer comparaciones técnicas entre microservicios y SOA, especialmente en torno a la función de un bus de servicios empresariales (ESB), es más fácil pensar en la diferencia como una de alcance.
SOA es un esfuerzo a nivel empresarial para estandarizar la forma en que todos los servicios web de una organización se comunican e integran entre sí, mientras que la arquitectura de microservicios es específica de la aplicación.
Los microservicios probablemente sean al menos tan populares entre los ejecutivos y líderes de proyectos como lo son entre los desarrolladores.
Esta es una de las características más inusuales de los microservicios, ya que el entusiasmo por la arquitectura suele estar reservado a los equipos de desarrollo de software.
La razón es que los microservicios reflejan mejor la forma en que muchos líderes empresariales quieren construir y ejecutar sus equipos y procesos de desarrollo.
En otras palabras, los microservicios son un modelo arquitectónico que facilita mejor un modelo operativo deseado.
En una encuesta reciente de IBM a más de 1200 desarrolladores y directores de TI, el 87% de los usuarios de microservicios coincidieron en que vale la pena adoptarlos.
Quizás una de las características más importantes de los microservicios es que, debido a que los servicios son más pequeños y se pueden implementar de forma independiente, ya no se requiere una ley del Congreso para cambiar una línea de código o agregar nueva funcionalidad a una aplicación.
Los microservicios prometen a las organizaciones un antídoto a las frustraciones internas asociadas con pequeños cambios que requieren mucho tiempo.
No requiere doctorado.
Ver o comprender el valor de un enfoque que promueva mejor la velocidad y la agilidad en la informática.
Pero la velocidad no es el único valor de diseñar servicios de esta manera.
Un modelo organizativo emergente común es reunir equipos multifuncionales en torno a un problema, servicio o producto empresarial.
El modelo de microservicios encaja perfectamente en esta tendencia, ya que permite a las organizaciones crear equipos pequeños y multifuncionales en torno a un servicio o conjunto de servicios y ejecutarlos de forma ágil.
El acoplamiento flexible de los microservicios también crea un nivel de aislamiento de fallas y una mejor resiliencia para la aplicación.
El pequeño tamaño del servicio, junto con límites y patrones de comunicación claros, hace que sea más fácil para los nuevos miembros del equipo comprender el código base y contribuir a él rápidamente, con claros beneficios en términos de velocidad y moral de los empleados. .
En el modelo de arquitectura tradicional de n niveles, las aplicaciones suelen compartir una pila pública, con una gran base de datos relacional que respalda toda la aplicación.
Este enfoque tiene varias desventajas obvias, una de las cuales es que cada componente de la aplicación debe compartir una pila pública, un modelo de datos y una base de datos, incluso para una determinada empresa. Existe una herramienta mejor y más clara para trabajando con estos elementos.
Genera una arquitectura deficiente y es frustrante para los desarrolladores que están constantemente conscientes de que hay disponibles formas mejores y más eficientes de construir estos componentes.
Por el contrario, en un modelo de microservicios, los componentes se implementan de forma independiente y se comunican a través de alguna combinación de REST, transmisión de eventos y agentes de mensajes, por lo que la pila de cada servicio individual puede optimizarse para este servicio.
La tecnología cambia todo el tiempo y las aplicaciones que constan de múltiples servicios más pequeños se vuelven más fáciles y económicas de usar a medida que se desarrollan tecnologías más deseables.
Con los microservicios, los servicios individuales se pueden implementar de forma independiente, pero también se pueden escalar de forma independiente. Los beneficios resultantes son obvios: si se hacen correctamente, los microservicios requieren menos infraestructura que las aplicaciones monolíticas porque solo admiten el escalamiento a los componentes exactos que lo necesitan, como es el caso de las aplicaciones monolíticas. Expanda la aplicación completa a continuación.
Las importantes ventajas de los microservicios conllevan importantes desafíos.
Pasar de una arquitectura monolítica a microservicios significa una mayor complejidad de gestión: más servicios, creados por más equipos, implementados en más lugares.
Los problemas en un servicio pueden causar o ser causados por problemas en otros servicios.
Los datos de registro (utilizados para monitorear y solucionar problemas) son más grandes y pueden ser inconsistentes entre los servicios.
Las nuevas versiones pueden causar problemas de compatibilidad con versiones anteriores.
Las aplicaciones implican más conexiones de red, lo que significa más oportunidades de problemas de latencia y conectividad.
Un enfoque DevOps puede resolver muchos de estos problemas, pero la adopción de DevOps conlleva sus propios desafíos.
Sin embargo, estos desafíos no han impedido que quienes no los adoptan adopten microservicios, ni que los que los adoptan profundicen sus compromisos con los microservicios.
Los nuevos datos de una encuesta de IBM muestran que es probable o muy probable que el 56 % de los no usuarios actuales adopten microservicios en los próximos dos años, y que es probable que el 78 % de los usuarios actuales de microservicios aumenten el tiempo que invierten en ellos. microservicios, dinero y esfuerzo
La arquitectura de microservicios a menudo se describe como optimizada para DevOps e Integración Continua/Entrega Continua (CI/CD), y en el contexto de pequeños servicios que se pueden implementar con frecuencia, es fácil ver por qué.
Pero otra forma de ver la relación entre los microservicios y DevOps es que la arquitectura de microservicios en realidad requiere que DevOps tenga éxito.
Si bien una aplicación monolítica tiene una serie de desventajas analizadas anteriormente en este artículo, su beneficio es que no es un sistema distribuido complejo con múltiples partes móviles y pilas de tecnología independientes.
Por el contrario, dado el aumento masivo de la complejidad, las partes móviles y las dependencias que conllevan los microservicios, no es factible utilizar microservicios sin una inversión significativa en implementación, monitoreo y automatización del ciclo de vida.
Si bien casi cualquier herramienta o lenguaje moderno se puede utilizar en una arquitectura de microservicios, existen algunas herramientas centrales que se han convertido en definiciones de límites esenciales para los microservicios:
Clave para los microservicios Una de las elementos es que suele ser muy pequeño.
(Ninguna cantidad de código puede determinar si algo es un microservicio, pero el "micro" está ahí en el nombre).
Cuando Docker marcó el comienzo de los contenedores modernos en la era de 2013, también introdujo el modelo informático más estrechamente relacionado con los microservicios.
Debido a que los contenedores individuales no tienen la sobrecarga de su propio sistema operativo, son más pequeños y livianos que las máquinas virtuales tradicionales y pueden iniciarse y apagarse más rápido, lo que los convierte en una solución más pequeña y liviana en una arquitectura de microservicios. Una combinación perfecta para sus servicios.
A medida que proliferan los servicios y los contenedores, orquestar y gestionar grandes cantidades de contenedores se convierte rápidamente en uno de los desafíos clave.
Kubernetes es una plataforma de orquestación de contenedores de código abierto que se ha convertido en una de las soluciones de orquestación más populares porque hace lo que hace muy bien.
Los microservicios a menudo se comunican a través de API, especialmente cuando establecen el estado por primera vez.
Si bien es cierto que los clientes y los servicios pueden comunicarse directamente entre sí, una puerta de enlace API suele ser una capa intermedia útil, especialmente cuando la cantidad de servicios en una aplicación crece con el tiempo.
Una puerta de enlace API actúa como un proxy inverso para los clientes enrutando solicitudes, distribuyéndolas en múltiples servicios y proporcionando seguridad y autenticación adicionales.
Existe una variedad de tecnologías para implementar puertas de enlace API, incluidas plataformas de administración de API, pero si se implementa una arquitectura de microservicios utilizando contenedores y Kubernetes, la puerta de enlace generalmente se implementa usando Ingress o, más recientemente, Istio.
Si bien la mejor práctica puede ser diseñar servicios sin estado, el estado todavía existe y el servicio necesita saberlo.
Si bien las llamadas API suelen ser una forma eficaz de establecer inicialmente el estado de un servicio determinado, no es una forma particularmente eficaz de mantener el estado actualizado.
Encuestas constantes: "¿Ya llegamos a ese punto?". Este enfoque para mantener un servicio actualizado es simplemente poco práctico.
En cambio, es necesario combinar las llamadas API que establecen el estado con mensajería o transmisión de eventos para que los servicios puedan transmitir cambios de estado y otras partes interesadas puedan escuchar estos cambios y ajustarse en consecuencia.
Este trabajo probablemente sea más adecuado para un intermediario de mensajes de propósito general, pero en algunos casos una plataforma de transmisión de eventos (como Apache Kafka) puede ser más adecuada.
Al combinar microservicios con una arquitectura basada en eventos, los desarrolladores pueden crear sistemas distribuidos, altamente escalables, tolerantes a fallas y escalables que pueden consumir y procesar grandes cantidades de eventos o información en tiempo real.
La arquitectura sin servidor lleva algunos patrones centrales de microservicios y nube a su conclusión lógica.
En el caso de serverless, la unidad de ejecución no es solo un pequeño servicio, sino una función, que normalmente puede consistir en unas pocas líneas de código.
La línea que separa las funciones sin servidor de los microservicios es borrosa, pero las funciones generalmente se consideran más pequeñas que los microservicios.
Las arquitecturas sin servidor y las plataformas de función como servicio (FaaS) son similares a los microservicios en el sentido de que ambas están interesadas en crear unidades de implementación más pequeñas y escalar con precisión en función de la demanda.
Los microservicios no están necesariamente completamente relacionados con la computación en la nube, pero hay varias razones importantes por las que se combinan con tanta frecuencia: razones que van más allá de que los microservicios se conviertan en un estilo arquitectónico popular para nuevas aplicaciones y que la nube se convierta en el nuevo motivo. es un destino de alojamiento popular para aplicaciones.
Una de las principales ventajas de una arquitectura de microservicios es la utilización y los beneficios de costos asociados con la implementación y el escalado de componentes individualmente.
Si bien estas ventajas todavía existen hasta cierto punto en la infraestructura local, los componentes pequeños y escalables de forma independiente combinados con la infraestructura de pago por uso bajo demanda es donde se puede encontrar una verdadera optimización de costos.
En segundo lugar, y quizás lo más importante, otro beneficio importante de los microservicios es que cada componente individual puede adoptar la pila que mejor se adapte a su trabajo específico.
Cuando usted mismo administra la proliferación de la pila, puede resultar en una complejidad y una sobrecarga significativas, pero usar la pila de soporte como un servicio en la nube puede reducir significativamente los desafíos de administración.
En otras palabras, aunque implementar tu propia infraestructura de microservicios no es imposible, no es aconsejable, especialmente al empezar.
En una arquitectura de microservicios, existen muchos patrones de diseño, comunicación e integración comunes y útiles que ayudan a resolver algunos de los desafíos y oportunidades más comunes, entre ellos:
Por ejemplo, en Las aplicaciones de escritorio utilizadas en dispositivos móviles tendrán limitaciones de tamaño de pantalla, visualización y rendimiento diferentes a las de los dispositivos móviles.
El modo BFF permite a los desarrolladores crear y admitir un tipo de backend para cada interfaz de usuario utilizando las mejores opciones para esa interfaz, en lugar de intentar admitir uno que funcione para cualquier interfaz pero que pueda afectar negativamente el rendimiento del backend universal.
Por ejemplo, en un sitio web de comercio electrónico, los objetos de producto pueden diferenciarse por nombre, tipo y precio del producto.
Un agregado es una colección de entidades relacionadas que deben tratarse como una unidad.
Entonces, para un sitio web de comercio electrónico, un pedido será una colección (colección) de productos (entidades) ordenados por un comprador.
Estos patrones se utilizan para clasificar datos de forma significativa.
En una arquitectura de microservicio, las instancias de servicio cambiarán dinámicamente debido a la ampliación, las actualizaciones, las fallas del servicio e incluso la terminación del servicio.
Estos patrones proporcionan mecanismos de descubrimiento para hacer frente a esta fugacidad.
El equilibrio de carga puede utilizar el patrón de descubrimiento de servicios mediante comprobaciones de estado y fallas del servicio como desencadenantes para reequilibrar el tráfico.
El propósito del patrón Adaptador es ayudar a traducir relaciones entre clases u objetos incompatibles.
Es posible que las aplicaciones que dependen de API de terceros necesiten utilizar el patrón del adaptador para garantizar que la aplicación y la API puedan comunicarse.
Este colorido nombre hace referencia a cómo una enredadera (microservicios) lentamente supera y asfixia a un árbol (aplicación monolítica) con el tiempo.
Si bien hay muchos patrones que funcionan bien para los microservicios, la misma cantidad de patrones puede atascar rápidamente a cualquier equipo de desarrollo.
Algunos de ellos, parafraseados como "lo que no se debe hacer" con los microservicios, son los siguientes:
Los microservicios son un sistema de gestión complejo una vez que una aplicación se vuelve demasiado grande y difícil de actualizar y mantener fácilmente. método sexual.
Solo cuando sientas que el dolor y la complejidad de un monolito comienzan a aparecer, vale la pena considerar cómo refactorizar la aplicación en servicios más pequeños.
En realidad, ni siquiera tienes un monolito que deba ser refactorizado hasta que sientes ese dolor.
Intentar realizar microservicios sin a) una implementación adecuada y una automatización de monitoreo ob) servicios de nube administrados para respaldar su ahora enorme infraestructura heterogénea es una receta para muchos dolores de cabeza innecesarios.
Ahórrese molestias para poder dedicar su tiempo a preocuparse.
Es mejor inclinarse hacia servicios más grandes y luego separarlos solo cuando comiencen a desarrollar las características que resuelven los microservicios; es decir, implementar cambios se vuelve difícil y lento, y el modelo de datos común se vuelve demasiado complejo o diferente. partes del servicio tienen diferentes requisitos de carga/escala.
La diferencia entre microservicios y SOA es que los proyectos de microservicios suelen implicar la refactorización de aplicaciones para hacerlas más fáciles de gestionar, mientras que SOA se centra en cambiar la forma en que funcionan los servicios de TI en toda la empresa.
Un proyecto de microservicios que evoluciona hacia un proyecto SOA puede colapsar por su propio peso.
Es mejor comenzar a una velocidad que pueda manejar, evitando la complejidad y utilizando tantas herramientas disponibles en el mercado como sea posible.