Arquitectura de microservicios: un sello distintivo para la competencia
Publicado: 2022-08-02Los sistemas monolíticos ya no son factibles en la época contemporánea de la contenedorización y la computación en la nube. Ha habido un crecimiento en la complejidad de los sistemas de software en los últimos años, y los sistemas monolíticos son cada vez más complejos de crear y mantener.
Los componentes del sistema se producen y agrupan como una sola unidad en un sistema monolítico. Todo el sistema tendría que volver a implementarse si se modificara un solo componente. Esto lo hace más difícil de escalar y menos versátil. La estructura interconectada e interrelacionada de un sistema autónomo puede ser un gran esfuerzo para los desarrolladores cuando construyen aplicaciones integrales. Los sistemas afectados también dificultan la realización de modificaciones clave, la adopción de nuevas pilas de tecnología o el envío de mejoras y actualizaciones. Una arquitectura orientada a servicios, que consta de una variedad de servicios que pueden comunicarse entre sí dentro de un sistema, estableció el marco para la transición desde la programación monolítica en primer lugar.
La arquitectura de microservicios fue el siguiente paso en el dominio, y fue un medio más unificado, pero granular, para establecer una estrategia de desarrollo de software exitosa. La frase "Arquitectura de microservicios" ha surgido durante los últimos años para describir una técnica particular de creación de sistemas de software como conjuntos de servicios de implementación independiente. Si bien no existe una definición específica de este estilo arquitectónico, existen varios rasgos similares que rodean la organización en torno a la capacidad empresarial, la implementación automatizada, la inteligencia en los puntos finales y la gestión descentralizada de idiomas y datos.
Es un enfoque de desarrollo de software que divide un sistema en secciones más pequeñas e independientes y luego las une. Los servicios autónomos se agrupan para satisfacer las demandas especializadas de un sector en particular. Spotify, Amazon, PayPal, Netflix y Twitter han tomado nota de este nuevo hallazgo y lo anuncian ampliamente.
Tabla de contenido
¿Qué es la Arquitectura de Microservicios?
La frase "Arquitectura de microservicios" se ha vuelto más popular en los últimos años para referirse a un enfoque específico de la arquitectura de los programas de software como conjuntos de servicios que se pueden implementar de forma independiente entre sí. A pesar de que este estilo arquitectónico no se puede definir con precisión, comparte ciertas características con otros enfoques arquitectónicos. Estos incluyen organización basada en la capacidad comercial, implementación automatizada, inteligencia en puntos finales y control descentralizado de idiomas y datos. En otras palabras, la capacidad de los microservicios para operar de manera independiente es la fuerza impulsora detrás de su ascenso a la cima de la escena del desarrollo de software.
La arquitectura de microservicios, más frecuentemente conocida simplemente como microservicios, es un paradigma de diseño que se utiliza al desarrollar software de aplicación. Los microservicios permiten dividir una aplicación grande en varias partes independientes más pequeñas, cada una de las cuales es responsable de su propio conjunto único de tareas. Una sola solicitud de usuario puede hacer que una aplicación que se basa en microservicios realice muchas llamadas a sus propios microservicios internos para construir su respuesta.
Los contenedores son un gran ejemplo de una arquitectura de microservicios, ya que lo liberan de la necesidad de preocuparse por las dependencias de los servicios, lo que le permite concentrarse en desarrollar los propios servicios. Los contenedores suelen ser la herramienta elegida para desarrollar aplicaciones nativas de la nube para plataformas contemporáneas en forma de microservicios. El término "arquitectura de microservicios" se refiere a un tipo de arquitectura de aplicación en la que la propia aplicación se construye como una colección de servicios. Ofrece un marco para crear, implementar y administrar de forma independiente diagramas arquitectónicos y servicios para microservicios.
Necesidad del desarrollo de la arquitectura de microservicios y limitaciones de la arquitectura monolítica
1. Escalado de aplicaciones
Debido a que las empresas exitosas a escala web experimentan una expansión exponencial, su software también debe permitir una gran escalabilidad horizontal. Ocasionalmente, solo una parte del software que es CPU o E/S debe escalarse y manejarse individualmente (implementado con programación políglota). El software que es monolítico funciona como una sola entidad y se crea utilizando un solo lenguaje de programación y Tech Stack. Para lograr el escalado horizontal, es necesario escalar toda la aplicación. Como el software monolítico solo admite un único lenguaje de programación, es imposible desarrollar incluso un solo módulo en un lenguaje de programación diferente o Tech Stack.
2. Velocidad de desarrollo
Para reducir el tiempo de comercialización, todas las empresas hoy en día desean un desarrollo rápido de funciones. En una aplicación monolítica grande, complicada y, a veces, de varios millones de líneas, la adición de nuevas funciones es extremadamente lenta debido a la enorme carga cognitiva que se coloca en el desarrollador. Los módulos de programas monolíticos masivos están estrechamente conectados, lo que dificulta el desarrollo de nuevas funciones. En consecuencia, agregar nuevas funciones a un programa monolítico suele ser lento y costoso.
3. Escalamiento del desarrollo
Con el fin de obtener una ventaja competitiva o aprovechar la fruta madura, las empresas con frecuencia buscan paralelizar el desarrollo mediante la contratación de más desarrolladores. Los desarrolladores no pueden trabajar de forma independiente en una base de código masiva, monolítica y estrechamente conectada y, con frecuencia, requieren sincronización y vigilancia adicionales para evitar interferir con el trabajo de los demás. Agregar desarrolladores adicionales no da como resultado un aumento en las funciones y, en ocasiones, puede resultar en menos funciones. Del mismo modo, debido a la alta carga cognitiva requerida para comprender toda la base de código monolítico, por lo general, los nuevos reclutas o los recién graduados tardan una cantidad considerable de tiempo en crear sus primeras líneas de código productivo. En 2008, tuve una entrevista con una empresa de telecomunicaciones con sede en Berlín donde el director técnico me dijo con una sonrisa de suficiencia que el código base C++ de la empresa incluía millones de líneas y que los nuevos ingenieros solo pueden producir código productivo después de cuatro a seis meses.
4. Ciclo de lanzamiento
El ciclo de lanzamiento de los grandes programas monolíticos suele ser excesivamente largo, oscilando entre seis y dos años y medio, con unos pocos meses adicionales a varios años de retraso debido a su tamaño. Los grandes ciclos de lanzamiento con frecuencia colocan a una corporación en una desventaja competitiva en la actualidad, ya que un nuevo competidor puede ingresar al mercado durante la brecha de lanzamiento.
5. Modularización
En la arquitectura monolítica, la barrera entre los módulos suele ser una interfaz interna. Tan pronto como aumenta el tamaño del programa, la separación entre módulos comienza a romperse. En consecuencia, los módulos de la arquitectura monolítica suelen estar estrechamente vinculados en lugar de acoplarse débilmente y tener una gran cohesión. Si comparamos el desarrollo de software con la sociedad, entonces la modularización monolítica es análoga a los principios moralistas y religiosos, que no pueden garantizar la ley y el orden en la sociedad.
6. Modernización
Las aplicaciones exitosas existentes requerían modernización por una variedad de razones (por ejemplo, aprovechar el hardware moderno, el navegador, el ancho de banda de la red, la pila tecnológica o atraer buenos desarrolladores). La modernización de un programa monolítico puede ser costosa y llevar mucho tiempo, ya que requiere una modernización Big Bang de toda la aplicación sin afectar el Servicio.
Tipos de Microservicios
Los microservicios diferenciales e integrales son los dos tipos distintos de microservicios.
una. Diferencial
En esta forma de arquitectura, la arquitectura se descompone en servicios independientes que pueden separarse en transacciones. Esto da como resultado la distribución de una sola transacción a muchos servicios.
b. Integral
Las aplicaciones de microservicios están diseñadas para combinar una multitud de microservicios en experiencias de usuario individualizadas. Estos programas cubren varias necesidades distintas, incluida la gestión del nivel de servicio, el aprovisionamiento bajo demanda y la composición dinámica.
Características de los Microservicios
1. Autónomo
Una arquitectura de microservicios permite que cada componente del servicio se construya, implemente, administre y escale por separado de los otros servicios. Los servicios no tienen que compartir nada de su código o cómo hacen las cosas con otros servicios. Toda la comunicación entre las diferentes partes se realiza a través de API bien definidas.
2. Especializado
Cada servicio se basa en un conjunto diferente de habilidades y un problema diferente. Con el tiempo, si los desarrolladores agregan más código a un servicio, el servicio podría dividirse en servicios más pequeños.
3. Componentización a través de Servicios
Aunque las arquitecturas de microservicios harán uso de bibliotecas, el principal método por el cual componen su propio software es descomponiéndolo en servicios. Las bibliotecas son componentes que están vinculados a un programa y se llaman mediante llamadas a funciones en memoria, mientras que los servicios son componentes fuera de proceso que se comunican con un mecanismo como una solicitud de servicio web o una llamada a procedimiento remoto. Definimos bibliotecas como componentes que están vinculados a un programa y se llaman mediante llamadas a funciones en memoria. (Esta es una idea distinta de lo que se conoce como objeto de servicio en muchos sistemas OO. A diferencia de las bibliotecas, los servicios se pueden implementar de forma independiente, que es una de las razones principales por las que se usan como componentes en lugar de bibliotecas. Un adicional El beneficio de emplear servicios en lugar de componentes es la generación de una interfaz de componentes más transparente.En la mayoría de los lenguajes de programación no existe una buena técnica para establecer una interfaz publicada explícita.
La documentación y la disciplina suelen ser las únicas cosas que evitan que los clientes violen la encapsulación de un componente, lo que daría como resultado un acoplamiento demasiado estrecho entre los componentes. Al utilizar protocolos explícitos de llamadas remotas, los servicios facilitan que sus usuarios eviten esto. El uso de servicios de este tipo tiene ciertos inconvenientes. Debido a que las llamadas realizadas de forma remota son más costosas que las realizadas dentro del mismo proceso, las API utilizadas de forma remota deben tener una granularidad más fina, lo que puede dificultar su uso. Cuando traspasas las fronteras de un proceso, es más difícil hacer cambios de comportamiento, lo que hace que sea más difícil si necesitas modificar la forma en que se distribuyen las responsabilidades entre los componentes.
4. Productos no Proyectos
La mayoría de las iniciativas de desarrollo de aplicaciones con las que nos encontramos siguen un paradigma llamado proyecto, en el que el objetivo principal es entregar una pieza de software que luego se considera terminada. Una vez finalizado el proyecto, el software se entrega a una organización de mantenimiento y el equipo responsable de su creación se desintegra.
Los defensores de los microservicios generalmente se alejan de esta arquitectura a favor del concepto de que un equipo debe poseer un producto en su totalidad durante toda su vida útil. El concepto de Amazon de "usted construye, lo opera", en el que un equipo de desarrollo asume la responsabilidad total del programa mientras se utiliza en producción, es una importante fuente de inspiración para esto. Esto pone a los desarrolladores en contacto diario con el funcionamiento de su software en producción y aumenta la comunicación con sus usuarios, ya que se requiere que asuman al menos parte de la carga de proporcionar soporte para el programa.
5. Gobernanza descentralizada
Además, los equipos de desarrollo de microservicios favorecen un enfoque distinto a los estándares. Prefieren proporcionar herramientas útiles que otros desarrolladores puedan usar para abordar desafíos comparables a los que enfrentan, en lugar de confiar en un conjunto de estándares codificados. Por lo general, estas herramientas se derivan de implementaciones y se comparten con una comunidad más grande, a veces, pero no siempre, utilizando un paradigma interno de código abierto. Ahora que git y github son el sistema de control de versiones elegido de facto, las técnicas de código abierto son cada vez más frecuentes dentro de las organizaciones.
Netflix es un gran ejemplo de una empresa que se adhiere a este principio. Compartir código valioso y, lo más importante, probado en batalla como bibliotecas ayuda a otros desarrolladores a manejar problemas comparables de manera similar, al tiempo que les permite elegir un método diferente si es necesario. Las bibliotecas compartidas tienden a concentrarse en las preocupaciones comunes del almacenamiento de datos, la comunicación entre procesos y la automatización de la infraestructura, como se analiza con más detalle a continuación.
Para la comunidad de microservicios, los gastos son especialmente indeseables.
6. Estándares probados en batalla y estándares aplicados
Es un poco paradójico porque los equipos de microservicios prefieren evitar el tipo de estándares estrictamente impuestos por los grupos de diseño empresarial, pero utilizarán e incluso abogarán por estándares abiertos como HTTP, ATOM y otros microformatos.
La distinción principal es cómo se producen e implementan los estándares. Los estándares controlados por organizaciones como el IETF no se convierten en estándares hasta que hay varias implementaciones en vivo de ellos en el mundo en general, que con frecuencia son el resultado de iniciativas exitosas de código abierto.
Estos estándares son un mundo diferente de la mayoría de los estándares comerciales, que con frecuencia son producidos por personas con experiencia limitada en programación reciente o excesiva influencia de los proveedores.
7. Automatización de infraestructura
Un efecto secundario que hemos visto de una mayor automatización como consecuencia de la entrega y el despliegue continuos es la introducción de herramientas útiles para ayudar a los desarrolladores y al personal de operaciones. Las herramientas para producir artefactos, mantener bases de código, iniciar servicios básicos o agregar monitoreo y registro estándar están relativamente extendidas en la actualidad. El mejor ejemplo en la web es, sin duda, la colección de herramientas de código abierto de Netflix, aunque hay otras, en particular Dropwizard, que hemos utilizado mucho.
Convierta su idea de aplicación en realidad
Construyamos una nueva aplicación juntos
Descripción general del mecanismo de comunicación en una arquitectura de microservicios
Los servicios que componen una arquitectura de microservicios se ejecutan en varios servidores diferentes. Se utilizan protocolos como HTTP, AMQP y TCP para facilitar la comunicación entre estos muchos servicios. Los dos protocolos con mayor adopción generalizada son HTTP/REST y mensajería asíncrona. El protocolo HTTP suele ser utilizado por una interfaz de programación de aplicaciones (API) REST para servicios en línea. Los clientes pueden obtener acceso y modificar los recursos de una aplicación utilizando un localizador uniforme de recursos junto con métodos HTTP como GET, POST, PUT y DELETE (URL). Una interfaz de programación de aplicaciones (API) REST actúa como un punto de entrada a la funcionalidad de una aplicación. Los clientes comunican sus necesidades a los servicios mediante el envío de solicitudes a las API. Los clientes tienen la opción de comunicarse con los microservicios directamente o a través de una puerta de enlace API.
Se especifica un único punto de entrada para todas y cada una de las solicitudes realizadas a los servicios mediante un patrón de puerta de enlace API. La puerta de enlace de la interfaz de programación de aplicaciones (API), cuando recibe una solicitud de un cliente, dirige la solicitud al servicio adecuado.
El patrón de puerta de enlace API tiene varias variantes, una de las cuales es el backend para el patrón frontend. Este diseño crea una puerta de enlace API distinta para cada tipo de cliente (por ejemplo, una puerta de enlace para clientes móviles y otra para aplicaciones web).
Se recomienda como práctica mantener bajos los niveles de comunicación entre los distintos servicios. La comunicación asincrónica es superior a la comunicación sincrónica en situaciones en las que la comunicación es imprescindible. No es necesario que el servicio que envió la solicitud espere una respuesta antes de continuar con sus operaciones.
Cuando se incorporan a la base de datos, las colas de mensajería y los sistemas de transmisión son buenas formas de habilitar la comunicación asíncrona. Además, cuando estos sistemas proporcionan semántica transaccional para una operación de datos y el envío de un mensaje, pueden cumplir con ambos requisitos. Debido a esto, la implementación de microservicios se hace más fácil y escalable. Cuando solo se utilizan API REST, la comunicación entre los microservicios se ve obligada a ser sincrónica, lo que a menudo impide el crecimiento.
¿Para qué se utiliza la arquitectura de microservicios?
Los microservicios son un estilo arquitectónico moderno que tiene como objetivo diseñar sistemas complejos como colecciones de artefactos de software de grano fino y débilmente acoplados llamados microservicios; cada microservicio implementa una pequeña parte o incluso una sola función de la lógica empresarial de las aplicaciones. Los microservicios están ganando popularidad porque tienen como objetivo diseñar sistemas complejos como colecciones de artefactos de software de grano fino y débilmente acoplados. Los microservicios se emplean a menudo para acelerar el proceso de desarrollo de aplicaciones.
La idea de micro se desarrolló en respuesta a la infraestructura monolítica sobre la que se construyeron inicialmente la mayoría de las organizaciones, particularmente si el negocio en cuestión ha estado en funcionamiento durante al menos diez años. Cada componente de una arquitectura de microservicio incluye las siguientes características en lugar de un diseño monolítico:
- CPU única para él
- Su propio sistema operativo y entorno de tiempo de ejecución.
- En muchos casos, un equipo especializado trabajará en ello para garantizar que cada servicio se distinga de los demás.
Debido a este diseño, cada servicio puede:
- Ejecutar su propio procedimiento único
- Comunicarse de forma independiente entre sí sin necesidad de depender de la comunicación de los otros microservicios o de la aplicación en su conjunto.
Existe una adopción generalizada de arquitecturas de microservicios basadas en Java, en particular las creadas con Spring Boot. Además, los microservicios y la arquitectura orientada a servicios a menudo se comparan entre sí. Los dos enfoques tienen el mismo objetivo, que es dividir grandes programas de software en partes más manejables, pero su metodología es diferente. Además, muchas empresas están bajo la presión de sus rivales para realizar ajustes en sus sistemas lo más rápido posible y, al mismo tiempo, minimizar el impacto que dichos ajustes tienen en la disponibilidad de sus sistemas. Esto exige diseños, estilos arquitectónicos y técnicas de desarrollo adecuados. La ingeniería de software ofrece una variedad de paradigmas que pueden satisfacer parcialmente esas necesidades. Estos paradigmas descomponen los sistemas de software en unidades de software de grano fino, lo que mejora la modularidad, la capacidad de mantenimiento y la reutilización y, como resultado, reduce la cantidad de tiempo necesario para llevar un producto al mercado.
En pocas palabras, ofrece agilidad a largo plazo. Los microservicios permiten una mejor capacidad de mantenimiento en sistemas complejos, grandes y altamente escalables al permitir la creación de aplicaciones que se basan en una gran cantidad de servicios implementables de forma independiente, cada uno de los cuales tiene su propio ciclo de vida granular y autónomo. Esto se logra al permitir la creación de aplicaciones basadas en una gran cantidad de servicios.
Los microservicios tienen la ventaja adicional de poder escalar horizontalmente por derecho propio. No necesita tener una sola aplicación monolítica que deba escalar horizontalmente como una sola entidad, ya que en su lugar puede escalar microservicios individuales. Podrá hacer crecer solo la región funcional del programa que requiere potencia de procesamiento adicional o ancho de banda de red para satisfacer la demanda de esta manera, en lugar de escalar otras partes de la aplicación que no requieren escalamiento. Eso da como resultado un ahorro de costos debido a la cantidad reducida de hardware requerido.
Estos son algunos ejemplos de arquitectura de microservicios
una. Reubicación del sitio web
La reubicación de un sitio web es posible; por ejemplo, un sitio web alojado en una plataforma monolítica compleja se puede reubicar en una plataforma de microservicios basada en contenedores y en la nube.
b. Contenido multimedia
Se puede usar un sistema de almacenamiento de objetos escalable para almacenar imágenes y activos de video, y se puede usar una arquitectura de microservicios para ofrecer estos materiales directamente a la web o dispositivos móviles.
C. Negociaciones Financieras y Facturación
Es posible tratar el procesamiento de pagos y el pedido como dos piezas de servicio distintas y separadas. Esto hace posible aceptar pagos incluso si hay un problema con el sistema de facturación.
d. Procesamiento de datos
Los servicios de procesamiento de datos modulares pueden mejorar su soporte en la nube con el uso de una plataforma de microservicios, que también se puede utilizar para el procesamiento de datos.
Patrones de diseño para microservicios
¡El lenguaje de patrones es tu guía!
a) Patrones de descomposición
- Bulkhead separa los recursos importantes, como el grupo de conexiones, la memoria y la CPU, para cada carga de trabajo o servicio. Al implementar mamparos, una sola carga de trabajo (o servicio) no puede usar todos los recursos, lo que priva a otros. Este enfoque mejora la solidez del sistema al eliminar las fallas en cascada causadas por un servicio. Este patrón se denomina mamparo porque se asemeja a las particiones seccionadas del casco de un barco. Particione las instancias de servicio en distintos grupos, en función de las necesidades de carga y disponibilidad del cliente. Esta arquitectura ayuda a aislar fallas y le permite preservar la capacidad de servicio para algunos usuarios, incluso durante una falla.
- Sidecar instala componentes útiles de una aplicación como un contenedor o proceso distinto para permitir el aislamiento y la encapsulación. Este patrón también puede permitir que las aplicaciones se compongan de componentes y tecnologías dispares. Este patrón se denomina Sidecar porque se parece a un sidecar enganchado a una motocicleta. En el diseño, el sidecar está acoplado a una aplicación principal y ofrece funcionalidades de soporte para la aplicación. El sidecar también sigue el mismo tiempo de vida que la aplicación principal, se crea y finaliza junto con la aplicación principal. El patrón sidecar se conoce con frecuencia como el patrón sidekick y es el último patrón de descomposición que mostramos en la publicación.
- Strangler Fig admite la refactorización incremental de una aplicación, reemplazando gradualmente piezas específicas de funcionalidad con nuevos servicios.
b) Patrones de Integración
1. Patrón de microservicio encadenado
Habrá varias dependencias para servicios individuales o microservicios, por ejemplo, la venta del microservicio depende de los productos y el pedido de los microservicios. Un patrón de diseño de microservicio encadenado lo ayudará a brindar una respuesta consolidada a su solicitud. Un microservicio-1 recibe la solicitud y luego se comunica con un microservicio-2; también puede comunicarse con un microservicio-3. Todas estas llamadas de servicio son síncronas.
2. Patrón de agregador
Al separar la actividad comercial en muchas piezas de código lógicas más pequeñas, se vuelve vital considerar cómo se fusionarán los datos proporcionados por cada servicio. El cliente no se hace responsable de esto.
El patrón Aggregator ayuda a solucionar este problema. Describe cómo podríamos combinar datos de varias fuentes y luego dar el resultado final al usuario. Esto es posible de dos maneras:
- Un microservicio compuesto realizará llamadas a todos los microservicios necesarios, agregará y cambiará los datos y luego los devolverá.
- Además de dividir la solicitud en varios microservicios, una API Gateway también puede agregar los datos antes de dárselos al consumidor.
3. Patrón de representación
Solo ofrecemos microservicios a través de la puerta de enlace API. Permito que GW adquiera características de API, como seguridad y clasificación de API. En este caso, la puerta de enlace API se compone de tres módulos API:
- API móvil, que implementa la API para el cliente móvil FTGO
- API del navegador, que implementa la API en la aplicación de JavaScript que se ejecuta en el navegador
- API pública, que implementa la API para desarrolladores externos
4. Patrón de rama
Es posible que un microservicio necesite obtener los datos necesarios de una variedad de fuentes diferentes, incluidos otros microservicios. El patrón de microservicio de rama es un híbrido de los patrones de diseño Agregador y Cadena. Permite el procesamiento simultáneo de solicitudes/respuestas de dos o más microservicios y combina los beneficios de ambos. El microservicio que se invoca puede estar compuesto por varios otros microservicios. El patrón Brach también se puede utilizar para convocar una sola cadena de microservicios o varias cadenas del mismo tipo, según los requisitos de su empresa.
Beneficios de la Arquitectura de Microservicios
En un futuro previsible, la necesidad de microservicios se expandirá dramáticamente. Usando Microservicios, los programas heredados se actualizan. A través de la refactorización, las aplicaciones monolíticas pueden dividirse en microservicios. Esto conduce a la modernización progresiva del software obsoleto y es preferible a volver a desarrollar el producto desde cero utilizando microservicios. El desarrollo de aplicaciones podría beneficiarse enormemente de un diseño de microservicios. A continuación se enumeran algunos de sus principales beneficios:
una. Productividad superior
Es más fácil crear y mantener una aplicación si se divide en secciones más pequeñas y autosuficientes. Dependiendo de sus requisitos, cada servicio puede desarrollarse, implementarse y mantenerse de forma independiente utilizando múltiples lenguajes de programación, tecnologías y entornos de software. Debido a que cada componente modular de una aplicación tiene una base de código más pequeña, es más sencillo lanzar, escalar, implementar y probar múltiples servicios, y las tareas relacionadas pueden dividirse entre los equipos de desarrollo y ejecutarse simultáneamente.
b. Mejor resiliencia
Cada microservicio en una arquitectura de microservicios es un único servicio diseñado para servir una característica de una aplicación y realizar tareas discretas. Cada microservicio se vincula con otros servicios utilizando interfaces simples para manejar las preocupaciones comerciales. Después de establecer un diseño basado en microservicios, todo el proceso de detección y solución de problemas relacionados con el rendimiento se vuelve bastante sencillo.
Además, como esta forma de diseño proporciona un mecanismo mejorado de aislamiento de fallas en comparación con los módulos individuales, las aplicaciones más grandes a menudo no se ven afectadas por una sola falla. Por lo tanto, a largo plazo, el riesgo de tiempo de inactividad futuro se reduce considerablemente, ya que los desarrolladores tienen una ventana de tiempo para lanzar una actualización o reemplazar un módulo sin tener que reiniciar todo el programa.
C. Escalabilidad ampliada
Los equipos de DevOps pueden elegir la pila de tecnología óptima para cada módulo sin preocuparse por la incompatibilidad si cada servicio se crea con un lenguaje de programación o tecnología diferente. Los servicios individuales se pueden desarrollar de forma independiente y se pueden agregar nuevos componentes sin tiempo de inactividad o redistribución del sistema. Además, los servicios pueden dividirse entre muchos servidores, mitigando el efecto de rendimiento de los componentes altamente exigentes. En cuestión de segundos, los microservicios pueden ofrecer escalamiento horizontal.
En realidad, es el alto escalamiento horizontal lo que obliga a organizaciones como Netflix, Spotify, Uber y Google a hacer la transición de la arquitectura monolítica a la de microservicios. En segundo lugar, si un microservicio requiere mucha CPU, se puede escribir en un lenguaje de programación optimizado para CPU (C/C++, Rust), mientras que otros microservicios se pueden escribir en un lenguaje interpretado (Java, PHP).
d. Integración Continua / Entrega Continua (CI/CD)
La entrega continua y la integración son elementos fundamentales tanto de la metodología ágil como de la filosofía DevOps. El diseño de microservicios permite que un equipo multifuncional cree, depure, pruebe, implemente y actualice servicios de forma independiente, lo que resultará en una solución de problemas y una implementación más rápidas a largo plazo.
mi. Modularización
En la arquitectura de microservicios, la barrera entre los microservicios consiste en interfaces físicas (de red) difíciles de cruzar. En consecuencia, los microservicios bien diseñados suelen proporcionar una modularización "ligeramente conectada y altamente coherente". Si el desarrollo de software se compara con la sociedad, entonces la modulación de microservicios se compara con las leyes nacionales e internacionales con sanciones policiales. Como ya sabemos, las estrictas normas nacionales e internacionales a menudo pueden mantener el orden social.
F. Calendario de lanzamiento
El mejor aspecto de la arquitectura de microservicios es que cada microservicio se puede implementar individualmente. Como resultado, el ciclo de lanzamiento de software para aplicaciones de microservicios es sustancialmente más corto y, con CI/CD, se pueden realizar muchos lanzamientos cada día.
Disadvantages of Microservices Architecture
una. Increased Complexity of Communication Between the Services
When an application is broken up into smaller parts, it takes more time to send and receive messages. When handling requests between the different modules, developers have to be extra careful. Different systems might talk to each other in different ways, so there might be a need for an interpreter. This can make it harder to set up the whole system all at once. One of the biggest problems with microservices is that it might be hard to switch from a monolith to microservices because it's hard to manage.
This basically means that a lot of services made by a lot of different teams are deployed in a lot of different places, making it very hard to manage them. For example, Monolithic Architecture gives the same answer whether a Web app has a few thousand lines of code or several million lines of code (Enterprise Java or Ruby on Rails or PHP). But in Microservice Architecture, there are many possible solutions depending on the applications and use cases.
So, Microservice Architecture is doomed to fail if the wrong solution is used for the wrong application size or type (like putting a child's clothes on an adult man or the other way around). Also, it's hard to design Microservices because they have a lot more moving parts than Monoliths. Most of the time, a Microservice with bad design is worse than a Monolith.
b. Complex Configuration
Despite being isolated and self-contained, a microservice must be regularly configured, especially when it is moved from development to test to staging to production. This arrangement may be rather intricate. Moreover, if a microservice must utilize other microservices, these bindings must be defined before deployment or even during runtime.
c. Context Boundary Translation
Despite the fact that it would be ideal if all microservices within a MOA used the same data structures and communication protocols to interact with one another, this is typically not the case.
d. More Assets in Return for More Autonomy
MOAs demand a great deal of horsepower. Remember that each MOA microservice has its own runtime environment and data storage. In some instances, even the most streamlined microservice might consume the same amount of resources as a single monolithic program.
mi. Unfeasible for Small Applications
Larger applications can benefit from microservices design. However, implementation will likely be more time-consuming and difficult for smaller applications.
F. Relatively Complex Deployment
The deployment might be a difficult and complicated process. During deployment, coordination between numerous services would be required. Deploying a WAR file in a container would not be as straightforward as it sounds.
g. Distributed Debugging
The difficulty of troubleshooting a MOA including hundreds of microservices communicating in concert is one of the downsides of microservices. Tracing the course of a request into and out of a MOA is challenging due to the independence of each container. The MOA is opaque if there is no effective monitoring mechanism in place. Logging the internals of a MOA offers a limited perspective, but MOA monitoring requires a comprehensive view.
h. Contributes to Enhanced Fault Tolerance
Large applications with several services deployed have more fault tolerance in the event that any one module fails. Microservices allow applications to continue functioning even if one service fails. This is because the services are not tightly coupled.
i. Costly
An improper service partition might be expensive. For instance, if an application is improperly partitioned, the services are connected to a certain degree, and they will create numerous inter-service interactions via the network, which can degrade performance.
j. Greater Security Risks
Lastly, because microservices will reside across several environments, computers, and API requests, they provide a greater number of entry points for an attacker to compromise the system.
k. Communication Complexities
Microservices accomplish rigorous modularity and development independence via process/network barriers, as previously mentioned. The disadvantage is that services may only communicate over the physical network, resulting in increased network latency. Microservices may connect with one another in a variety of methods, including synchronous communication using REST, gRPC, and asynchronous communication using Message Queue and Message Broker, each of which has advantages and disadvantages.
Synchronous communication is simpler to build, but it might result in a Distributed Monolith. Asynchronous Communication via Messaging provides greater flexibility at the expense of increased implementation complexity. In Microservice Architecture, choosing the appropriate Communication channel based on the application is equally tough.
yo Configuración compleja
A pesar de estar aislado y ser autónomo, un microservicio debe configurarse regularmente, especialmente cuando se mueve del desarrollo a la prueba, a la etapa de producción. Este arreglo puede ser bastante complicado. Además, si un microservicio debe utilizar otros microservicios, estos enlaces deben definirse antes de la implementación o incluso durante el tiempo de ejecución.
Herramientas de microservicios
1. Sistema operativo
El aspecto más importante del desarrollo de una aplicación es sentar una base sólida para la misma, que es algo de lo que es responsable el sistema operativo. Linux es un ejemplo de este tipo de sistema operativo que se utiliza con frecuencia en todo el proceso de desarrollo de aplicaciones. Tendrá acceso a un entorno de ejecución autónomo cuando utilice contenedores de Linux. Esto le brinda la capacidad de orquestar una amplia gama de servicios, desde almacenamiento y redes hasta seguridad y autenticación.
2. Lenguajes de programación
Con Emizentech, ahora puede ampliar sin problemas su repertorio de programación. Este instrumento es práctico y actualizado. En general, está diseñado para usarse con todos los lenguajes de programación. Además, es compatible con el código de bytes que se muestra en BEAM, que también se conoce como máquina virtual Erlang.
3. Herramientas de gestión y prueba de API (Puertas de enlace API)
El acto de crear y publicar API, hacer cumplir sus estándares de uso, restringir el acceso, cultivar la comunidad de desarrolladores, recopilar y analizar estadísticas de uso e informar sobre el rendimiento son todos componentes de la administración de API.
En realidad, una plataforma de gestión de API se compone de los siguientes elementos:
- Herramientas de desarrollo
- Puerta
- Informes y análisis
4. Herramientas de mensajería (mensajería y transmisión de eventos)
Para que se lleven a cabo las comunicaciones, el sistema de microservicios debe hacer uso de servicios independientes. Este es el factor principal que determina lo que la cola de mensajes requiere de sus usuarios. RabbitMQ y Apache Kafka son dos de las soluciones más populares que se utilizan para la mensajería.
LinkedIn es responsable de la creación de la tecnología conocida como Apache Kafka, que luego se aportó a la comunidad Apache.
La herramienta RabbitMQ utiliza patrones para facilitar la comunicación entre los muchos microservicios. Además de eso, ayuda en el proceso de escalado de aplicaciones al mismo tiempo.
5. Cajas de herramientas
En pocas palabras, un conjunto de herramientas es solo una colección de herramientas que se emplean durante la ejecución de un determinado procedimiento. El Toolkit es un componente de la arquitectura de microservicios que hace posible construir muchas aplicaciones. Debido a esto, existe una amplia variedad de juegos de herramientas, cada uno de los cuales tiene un objetivo distinto en su aplicación. Las muchas herramientas que están disponibles para elegir dentro de Fabric8 y Seneca.
- Fabric8 es una tecnología de plataforma como servicio que, con la ayuda de Git, permite a los desarrolladores de software crear un sistema de gestión de configuración para sus aplicaciones.
- Seneca, que funciona como un nodo, se utiliza en el proceso de desarrollo de microservicios orientados a mensajes.
6. Marcos Arquitectónicos y The Js Toolkit
Dado que los microservicios son un estilo arquitectónico, es fundamental prestar atención al marco arquitectónico que utilizan. Estos son los marcos que se utilizan junto con las tecnologías actuales para construir las aplicaciones más recientes. Goa y Kong son ahora los marcos arquitectónicos más populares.
7. Herramientas de orquestación
Debido a la forma general en que los contenedores y los microservicios funcionan juntos, la orquestación de contenedores es un tema muy importante en el que pensar. Conductor, Kubernetes e Istio son las tres soluciones de orquestación de microservicios que se usan con más frecuencia para la orquestación de contenedores. Sin embargo, hay muchas otras herramientas disponibles. Como parte del ecosistema de software de código abierto (OSS) que mantiene Netflix, el conductor sirve como motor de orquestación de microservicios. El conductor es un programa que se ejecuta en la nube y utiliza una implementación llamada orquestador de flujo para realizar diversas actividades utilizando microservicios. Además de esto, facilita el control y la visualización de todas las interacciones que se producen en los microservicios.
8. Herramientas de monitoreo
Una vez que se ha construido la aplicación de microservicio, se deben manejar las tareas asociadas con ella. Necesitará herramientas de monitoreo para sus microservicios para lograr lo mismo. Prometheus y Log Stash son las dos tecnologías de monitorización de microservicios más utilizadas. Logstash es una excelente pieza de software. Es una plataforma que le permite consolidar, almacenar y manipular datos, y es de código abierto.
9. Herramientas sin servidor
El componente significativo de SA de los microservicios es la tecnología sin servidor, a menudo conocida como función como servicio. Mejora la eficiencia del proceso de desmantelamiento de objetos en sus componentes más fundamentales. Tanto Claudia como AWS Lambda son ejemplos de herramientas sin servidor que se utilizan ampliamente para desarrollar microservicios. Las instalaciones de AWS Lambda y API Gateway también son parte de las responsabilidades de Claudia. Además de esto, Claudia es capaz de automatizar las actividades de implementación y configuración propensas a errores mientras mantiene su funcionalidad "lista para usar".
10. Contenedores, Docker y Kubernetes
- Contenedores: los contenedores esencialmente virtualizan el sistema operativo host (o kernel), aislando las necesidades de una aplicación de las de otros contenedores que se ejecutan en la misma computadora.
- Docker: Docker se compone de varias partes diferentes, incluido un tiempo de ejecución de contenedor denominado dockerd, un generador de imágenes de contenedor conocido como BuildKit y una interfaz de línea de comandos que se utiliza para interactuar con el generador, los contenedores y el motor. (llamado ventana acoplable).
- Kubernetes es una tecnología de administración de contenedores gratuita y de código abierto que combina un grupo de computadoras en un solo grupo de recursos informáticos. Kubernetes fue desarrollado por Google. Kubernetes le permite estructurar sus aplicaciones en forma de grupos de contenedores, que luego son ejecutados por el motor Docker. Kubernetes se encarga de garantizar que su aplicación continúe funcionando de la manera que usted especifique.
Patrones comunes en la arquitectura de microservicios
una. Patrón back-end-for-frontend (BFF)
BFF proporciona una interfaz sencilla entre la interfaz y los microservicios. En un escenario ideal, el equipo front-end también será responsable de administrar el BFF. Un solo BFF se refiere únicamente a una sola interfaz de usuario. Como consecuencia, podremos simplificar nuestras interfaces y tener una vista única de los datos a través de su backend.
b. Entidad y patrones agregados
Una entidad es una cosa distinta basada en su identidad. En un sitio web de comercio electrónico, por ejemplo, un objeto Producto puede identificarse por el nombre, el tipo y el precio del producto. Un agregado es un grupo de cosas que deben considerarse como una sola unidad. Por lo tanto, para el sitio web de comercio electrónico, un Pedido sería la colección (agregado) de cosas (entidades) que ha comprado un cliente. Estos patrones se utilizan para categorizar datos de manera significativa.
C. Patrones de descubrimiento de servicios
Desempeñan un papel crucial para facilitar el descubrimiento de servicios y aplicaciones. Las instancias de servicio pueden variar en el contexto de la arquitectura de microservicios debido a causas como la falla del servicio, la escalabilidad, la terminación del servicio y las actualizaciones. Estos patrones brindan herramientas de descubrimiento para lidiar con esta transitoriedad. Mediante el uso de controles de estado y fallas de servicio como disparadores de reequilibrio de tráfico, el equilibrio de carga puede emplear técnicas de descubrimiento de servicios.
d. Patrones de microservicios del adaptador
El diseño de Adapter Microservices se ajusta, si es necesario, entre una API orientada a la empresa construida con RESTful o técnicas de mensajería livianas (usando las mismas metodologías basadas en dominio que un microservicio típico) y una API heredada o un servicio SOAP clásico basado en WS-*. La adaptación es necesaria, por ejemplo, cuando un equipo de desarrollo carece de control descentralizado sobre la fuente de datos de una aplicación.
mi. Patrón de aplicación de estrangulador
Strangler Pattern es un patrón arquitectónico muy conocido para transformar lentamente una aplicación monolítica en microservicios al sustituir una funcionalidad específica con un nuevo servicio.
Anti-patrones en Arquitectura de Microservicios
una. Caos de cohesión
Los servicios deben alinearse claramente con una capacidad comercial y no deben intentar lograr nada fuera de su alcance. La separación funcional de preocupaciones es fundamental para que la arquitectura la gestione; de lo contrario, arruinaría la agilidad, el rendimiento y la escalabilidad, lo que daría como resultado una arquitectura estrechamente conectada con entropía de entrega y caos de cohesión.
b. Arquitectura de servicios en capas
Uno de los errores SOA más frecuentes fue no entender cómo lograr la reutilización del servicio. Los equipos estaban más preocupados por la cohesión técnica que por la reutilización funcional.
C. Complejidad
Otro factor importante para respaldar la arquitectura de microservicios es la madurez organizacional. Los equipos de desarrollo deben reformarse para asumir una mayor responsabilidad de la pila completa, DevOps, en lugar de simplemente enviar boletos de ida al equipo de infraestructura.
d. Mala estrategia de control de versiones
Una estrategia de control de versiones ineficaz da como resultado un código y dependencias inmanejables. Como resultado, debe implementarse un enfoque de control de versiones eficiente para la arquitectura de microservicios. Uno de los enfoques más básicos es crear una versión de API e incluir la versión en la URL de la ruta.
mi. Diseño inadecuado de patrones de acceso a datos de carga de trabajo de microservicios
Patrones inadecuados de acceso a datos de carga de trabajo de microservicios: la arquitectura de un microservicio depende de la base de datos de una organización. Los patrones de acceso a los datos en los microservicios deben estar claramente separados. A menudo es aceptable utilizar una sola base de datos en varias instancias de servicio, siempre que los datos estén en tablas/colecciones particionadas correctamente.
F. Trastorno de dependencia
El trastorno de dependencia es un antipatrón que se desarrolla cuando eres consciente de que los servicios deben implementarse en un orden específico para que funcionen correctamente. Cuando no hay control sobre la separación funcional de las preocupaciones, puede surgir el caos de cohesión.
Una buena forma de evitar este antipatrón es introduciendo una API Gateway.
Diferencias entre monolítica, microservicios y arquitectura orientada a servicios
microservicios | SOA | Monolítico | |
Diseño | Los servicios se construyen en unidades pequeñas y se expresan formalmente con API orientadas a los negocios. | Los servicios pueden variar en tamaño desde servicios de aplicaciones pequeñas hasta servicios empresariales muy grandes que incluyen muchas más funciones comerciales. | Las aplicaciones monolíticas evolucionan a un tamaño enorme, una situación en la que es difícil comprender la totalidad de la aplicación. |
usabilidad | Los servicios se exponen con un protocolo estándar, como una API RESTful, y otros servicios y aplicaciones los consumen o reutilizan. | Servicios expuestos con un protocolo estándar, como SOAP, y consumidos/reutilizados por otros servicios: aproveche el middleware de mensajería. | La reutilización limitada se realiza en aplicaciones monolíticas. Limitado |
Escalabilidad | Los servicios existen como artefactos de implementación independientes y se pueden escalar independientemente de otros servicios. | Las dependencias entre los servicios y los subcomponentes reutilizables pueden presentar desafíos de escalamiento. | Escalar aplicaciones monolíticas a menudo puede ser un desafío. |
Agilidad | Las unidades desplegables independientes más pequeñas facilitan la gestión de compilación/lanzamiento y, por lo tanto, una gran agilidad operativa. | Mejora el uso compartido de componentes que aumenta las dependencias y limita las capacidades de administración. | Difícil de lograr la agilidad operativa en el despliegue repetido de artefactos de aplicaciones monolíticas. |
Desarrollo | El desarrollo de servicios permite discretamente a los desarrolladores utilizar el marco de desarrollo adecuado para la tarea en cuestión. | Los componentes reutilizables y las prácticas estándar ayudan a los desarrolladores con la implementación. | Las aplicaciones monolíticas se implementan utilizando una única pila de desarrollo (es decir, JEE o .NET), lo que puede limitar la disponibilidad de "la herramienta adecuada para el trabajo". |
Mercados verticales clave que exigen microservicios
Atención médica: se prevé que el mercado de microservicios de atención médica crezca de $ 130 millones en 2015 a $ 519 millones para 2025. Las necesidades de una implementación más rápida del servicio, una aceptación más rápida de tecnologías novedosas y una mayor eficiencia están impulsando el desarrollo en la industria de la atención médica. La industria de la salud busca respuestas para sus necesidades de seguridad de datos y cumplimiento normativo, así como para superar las dificultades de implementación.
Banca, finanzas y seguros: Aspen Mesh identifica tres beneficios importantes de los microservicios para los servicios financieros: mayor seguridad a través de la creación de un servicio de identidad distinto, entrega más rápida de nuevas funciones y una capa API más fácil de administrar.
Gobierno: además de los diversos beneficios de la arquitectura de microservicios, las empresas gubernamentales pueden beneficiarse de su capacidad para diseñar funcionalidades que se correspondan con los objetivos comerciales, lo que permite que los equipos de TI establezcan o mejoren los servicios según las demandas de los constituyentes.
Venta minorista: Amazon y eBay han demostrado los beneficios de los microservicios para la industria minorista, incluidos servicios altamente accesibles y escalables y una gestión de errores y errores más efectiva.
Medios y entretenimiento: en 2009, Netflix migró a los microservicios y actualmente el servicio procesa 2 mil millones de solicitudes de borde todos los días utilizando más de 500 microservicios. El cambio ofrece velocidad, escalabilidad y accesibilidad.
Ejemplos de empresas que adoptaron la arquitectura de microservicios
Amazon, Coca-Cola y Zalando, entre otros, están transformando sus infraestructuras de TI en una arquitectura de microservicios. Además, están reorganizando sus estructuras organizativas internas y empujando a sus empresas a la vanguardia del mercado. La implementación de la arquitectura de microservicios se disfruta cuando se obtiene el conocimiento de los mejores de la industria. Estas son algunas de las instancias más efectivas de microservicios.
#1. Uber
El concepto de propiedad fue devastado por dependencias monolíticas entrelazadas. La migración se convirtió en un desafío. Los nuevos desarrolladores no pudieron contribuir al monolito. Pequeños errores llevaron a resultados catastróficos. Uber optó por implementar servicios basados en la nube. Uber desarrolló microservicios para varias operaciones, incluida la facturación y la gestión de pasajeros y viajes. Las puertas de enlace API se utilizan para comunicarse con los servicios.
Además, Uber estableció estándares mundiales para sus microservicios. Proporcionan criterios cuantitativos para la documentación, confiabilidad, tolerancia a fallas, etc. Estas características fueron monitoreadas utilizando indicadores comerciales como las visitas a la página. Pronto, sus servicios alcanzaron el pináculo de la excelencia.
#2. netflix
Netflix luego migró a una infraestructura de datos distribuidos basada en la nube. AWS se utilizó para ofrecer sistemas escalables horizontalmente y servicios/características adicionales. En 2009, Netflix inició su traslado, que finalizó después de casi tres años. Luego, Netflix convirtió todas sus aplicaciones orientadas al usuario en microservicios autónomos. En 2012, se terminó el cambio de imagen. Para 2015, Netflix eliminó todas las interrupciones del servicio y pudo procesar alrededor de 2 mil millones de consultas API por día. Actualmente, Netflix tiene más de 139 millones de usuarios en 190 países. Hoy, Netflix opera aproximadamente 700 sistemas de microservicios por separado.
#3. Amazonas
Amazon tenía un gran monolito en 2001. En 2021, prácticamente todo el mundo está familiarizado con Amazon Web Services (AWS), una solución interna que se convirtió en un servicio comercial de computación en la nube debido a su superioridad. Los microservicios son excelentes para el comercio electrónico porque pueden rastrear la actividad del usuario, las compras y el embudo de ventas completo. Según el gerente senior de productos de Amazon
Luego, producen datos que son útiles para optimizar la presentación del producto y el proceso de venta en sí. Amazon es una de las primeras empresas en las que los microservicios desempeñaron un papel importante en la transformación de toda la organización. El gigante mundial logró un éxito asombroso durante una época en la que el diseño de monolitos era "la norma" para construir sistemas de tecnología de la información.
Todas las modificaciones importantes del código se estancaron en el proceso de implementación durante semanas antes de que estuvieran disponibles para los usuarios. Amazon empleó microservicios para optimizar y reducir la duración del proceso. Al separar las estructuras en aplicaciones individuales, los desarrolladores pudieron determinar dónde estaban los cuellos de botella, la naturaleza de las ralentizaciones y reconstruir las estructuras como arquitecturas orientadas a servicios, cada una con un pequeño equipo dedicado a un solo servicio.
Lo que comenzó como una limpieza del sistema resultó en el crecimiento de uno de los principales actores en línea de la arquitectura contemporánea. Amazon fue pionera en el camino para otras empresas al lanzar una sucesión de tecnologías de código abierto, como AWS (Amazon Web Services), que ahora son omnipresentes.
#4. ebay
El sistema de eBay admite alrededor de mil microservicios. Las experiencias de front-end, como la web y las aplicaciones nativas de iOS y Android, contactan a los servicios intermediarios que coordinan las llamadas, que luego se comunican con los servicios de back-end. Cada uno de los servicios tiene su propio grupo de desarrollo autónomo. La mayoría de los microservicios de eBay evolucionaron sin un arquitecto y el sistema siempre se diseñó de abajo hacia arriba. La mayoría de las grandes empresas, como eBay, han aterrizado en una colección de microservicios políglotas que funcionan de acuerdo con los requisitos del cliente y, por supuesto, siempre están cambiando.
#5. Nube de sonido
Cada servicio se desarrolla e implementa de forma independiente, conectándose con otros servicios a través de la red utilizando estándares ligeros de intercambio de datos como JSON o Thrift. A lo largo de la duración del cambio, los nuevos microservicios no pudieron alterar el modelo relacional en MySQL o, peor aún, utilizar un motor de almacenamiento diferente. Para circunstancias extremas, como la mensajería de usuario a usuario en la que se reemplazó un modelo basado en subprocesos por uno similar a un chat, la empresa usó cronjobs para sincronizar bases de datos separadas.
#6. Spotify
Para evitar el infierno de sincronización dentro de la empresa, Spotify está diseñado en una arquitectura de microservicio con equipos autónomos de pila completa a cargo. Spotify emplea una arquitectura de microservicios en la que todos los desarrolladores de software escriben en "territorios" cerrados con sus propias capacidades únicas. Cada microservicio tiene una responsabilidad única y directa y, en la mayoría de las circunstancias, una base de datos y una lógica a las que no puede acceder ningún otro proceso.
¿Qué tipo de desafíos pueden ayudarlo a superar los microservicios?
Esta es la solución a la pregunta “¿qué dificultades resuelven los microservicios?”; examinemos los obstáculos que las arquitecturas de microservicios han ayudado a superar.
CASO 1 Saldo de eBay recuperado
eBay utiliza casi mil servicios. Muchos servicios front-end envían llamadas API, mientras que los servicios back-end realizan operaciones administrativas y relacionadas con el envío. eBay utilizó originalmente un programa monolítico Perl y C++. El sitio web de eBay es un producto principal, como lo es para muchos otros titanes de Internet. La necesidad de agregar varias funciones incrementales al sitio web de eBay siguió aumentando. Además, este tipo de sitio web tenía que ser accesible las 24 horas del día, los siete días de la semana, incluso cuando se añadían nuevas funciones.
Debido a la necesidad de minimizar el tiempo de inactividad, eBay optó por cambiar a una arquitectura de microservicios. Esto permitió que el sitio se volviera más estable y promovió la integración asíncrona. Se realizaron mejoras significativas en la flexibilidad de implementación y la duración del ciclo de lanzamiento. Cuando se aislaron los servicios, aumentó la eficiencia del rendimiento y se facilitó el escalamiento.
CASO 2 Uber y Expansión Rápida
Uber, el servicio de taxis más popular, comenzó con un solo paquete para servir a los viajeros en San Francisco, donde se implementó inicialmente. Este software estrechamente conectado pudo administrar la mayoría, si no todas, las actividades comerciales, incluidos los servicios de facturación, pagos y conexión de controladores. Sin embargo, a medida que la empresa se desarrollaba, las cosas comenzaron a decaer. Uber había estado ampliando su área de cobertura y ofreciendo otros servicios.
A medida que se agregaron más características, el paquete se hizo más cohesivo. Toda la lógica estaba contenida en un solo lugar, y comenzaron a surgir dificultades. Pronto, incluso una pequeña modificación exigió que se redistribuyera todo el programa. La integración continua se convierte casi de inmediato en una responsabilidad importante.
La ausencia del modelo de propiedad se debió a las muchas dependencias interdependientes del monolito. Por lo tanto, la migración fue difícil. También ocurrió que los desarrolladores recién contratados no pudieron contribuir al monolito. Incluso si ocurría un error menor, las consecuencias eran graves. Fue entonces cuando tomaron la decisión de implementar microservicios. Su movimiento tomó algún tiempo. Desmontaron todo el servicio y migraron la aplicación monolítica a una arquitectura orientada a microservicios creada con Python, Node.js y Apache Thrift.
CASO 3 Tiempo de actividad mejorado de Twitter
Era la misma vieja historia: Twitter utilizó por primera vez un diseño monolítico, lo que tenía mucho sentido. Sin embargo, cuando más personas se registraron en Twitter, surgieron problemas. El SDLC se hizo más grande y más engorroso, con tiempos de construcción más largos, y su escalabilidad se deterioró significativamente, con la aparición ocasional de advertencias de error de exceso de capacidad.
Twitter recurrió a cambiar la arquitectura a microservicios para solucionar este problema. Cada microservicio se creó para ser modular, bien definido y autónomo. Pueden probar e implementar individualmente cada componente. También se pueden medir de forma independiente. Pronto, las advertencias de error desaparecieron por completo.
CASO 4 KarmaWifi y Código Spaghetti
Hay personas, aparatos y una tienda en Karma. En un momento, con un programa monolítico disponible, el código relacionado con el usuario terminó en partes relacionadas con el dispositivo. Además, las API de la tienda siguieron las API del dispositivo. Pronto, se hizo difícil determinar qué cambió y quién lo cambió. Aunque el objetivo inicial era dividir el monolito en bibliotecas funcionales, se descubrió que la expansión y adaptación a versiones de software más nuevas sería un desafío. Además, no podrían experimentar con futuras innovaciones que se introducirán en el mercado.
En ese momento, habían optado por utilizar una arquitectura basada en microservicios. Cuando lo consideraron esencial, separaron partes de la aplicación de back-end en servicios individuales. Las partes eran inicialmente enormes, pero con el tiempo se dividieron en servicios más pequeños. Eventualmente, cada microservicio tenía una sola tarea y un tamaño máximo del que preocuparse.
CASO 5 Rendimiento mejorado de Walmart
La aventura de microservicios de Walmart comenzó con la adquisición de una plataforma DevOps de una pequeña empresa llamada OneOps. Eligieron convertirlo en una iniciativa de código abierto para poder contribuir a la comunidad.
Comenzaron a utilizar tecnologías como las bases de datos Node.js y Cassandra para crear varios microservicios que podrían activarse dinámicamente a través de las API. El objetivo era facilitar que los desarrolladores que trabajan en las muchas divisiones comerciales de Walmart sean dueños de sus aplicaciones y empoderarlos para hacerlo. Descubrieron que esto disminuía la dependencia de un grupo de TI centralizado.
En última instancia, la capacidad de los desarrolladores para ampliar las capacidades de back-end de las ofertas de comercio electrónico de la organización contribuyó a aumentar la agilidad empresarial.
¿Cómo implementar la arquitectura de microservicios en Android e iOS?
- Paso 1: Decide si es realmente lo que tu empresa necesita.
- Paso 2: En caso afirmativo, mire la infraestructura que ya existe.
- Paso 3: Prepare a su equipo para usar el método.
- Paso 4: si está cambiando de un sistema monolítico a un sistema de microservicios, consulte con su administrador de datos para ver si está bien informado y comprende la tarea.
- Paso 5: elija el lenguaje y el marco para la codificación.
- Paso 6: Configure la arquitectura básica con servicios, contenedores y plantillas de máquinas virtuales.
- Paso 7: divida la base de datos en muchas bases de datos más pequeñas si su arquitectura es un "monolito".
- Paso 8: coloque las puertas de enlace API en su lugar.
- Paso 9: Rastree el seguimiento y haga un mapa de él.
- Paso 10: Prueba usando automatización.
¿Son los microservicios el futuro?
El objetivo principal de este artículo es explicar los conceptos y principios fundamentales de los microservicios. Al hacer el esfuerzo de lograr esto, es evidente que consideramos que el estilo arquitectónico de los microservicios es un concepto esencial, uno que las aplicaciones corporativas deben examinar cuidadosamente. Recientemente, hemos desarrollado una serie de sistemas que emplean este método y conocemos otros que aprecian este método. Amazon, Netflix, The Guardian, el Servicio Digital del Gobierno del Reino Unido, realestate.com.au, Forward y comparethemarket.com se encuentran entre los que sabemos que son pioneros en el estilo arquitectónico de alguna forma.
A menudo, las ramificaciones reales de las decisiones arquitectónicas no son evidentes hasta varios años después. Un buen equipo con un fuerte impulso por la modularidad ha construido en ocasiones un diseño monolítico que se ha deteriorado con el tiempo. Muchas personas argumentan que dicho deterioro es menos posible con los microservicios, ya que los límites del servicio son evidentes y difíciles de corregir. Sin embargo, no podemos evaluar con precisión la madurez de las arquitecturas de microservicios hasta que tengamos una cantidad suficiente de sistemas con la edad suficiente.
Definitivamente hay razones para anticipar que los microservicios se desarrollarán lentamente. El éxito de cualquier esfuerzo de creación de componentes depende de qué tan bien encaje el software en los componentes. Es difícil determinar dónde deben colocarse los bordes del componente. El diseño evolutivo reconoce la dificultad de establecer límites correctos y, por lo tanto, la importancia de simplificar su reelaboración. Sin embargo, cuando sus componentes son servicios con comunicaciones externas, la refactorización es mucho más difícil que cuando se trabaja con bibliotecas en proceso.
Mover el código a través de las fronteras del servicio es complejo, cualquier modificación de la interfaz debe organizarse entre los participantes, se deben establecer capas de compatibilidad adicionales y las pruebas son complicadas. Si los componentes no se componen de forma ordenada, simplemente está trasladando la complejidad desde dentro de un componente a los vínculos entre los componentes. Esto no solo cambia la complejidad, sino que también la traslada a un lugar que es menos explícito y más difícil de gobernar. Al examinar el interior de un componente sencillo y diminuto, es fácil pasar por alto los vínculos complicados entre los servicios y concluir que las cosas son mejores de lo que realmente son.
Por último, hay que considerar la competencia del equipo. Es más probable que los equipos hábiles adopten nuevas prácticas. Sin embargo, es posible que un enfoque que sea más exitoso para un equipo altamente calificado no siempre funcione para un equipo menos calificado. Hemos visto varios ejemplos de equipos incompetentes que construyen estructuras monolíticas descuidadas, pero llevará tiempo determinar qué sucede cuando ocurre este tipo de caos con los microservicios. Un equipo pésimo siempre producirá un sistema deficiente; es difícil decir si los microservicios mejoran o empeoran la situación en esta circunstancia.
Así que escribimos esto con optimismo cauteloso. ¡Creemos que los microservicios están aquí para quedarse!
¿Por qué elegir EmizenTech?
Emizentech puede ayudarlo a migrar su aplicación de una arquitectura monolítica a una arquitectura de microservicios. Podemos ayudarlo a hacer que su aplicación corporativa sea simple de mantener y escalable. Si desea hacer crecer y desarrollar su negocio y está buscando nuevas formas de hacerlo, emizentech puede ayudarlo de la manera correcta y al mismo tiempo garantizar un crecimiento a largo plazo. También puede visitar nuestro sitio web para obtener más información sobre los microservicios, averiguar si su empresa está lista para ellos y hablar sobre cómo implementar esta arquitectura. Es una forma de hacer software que se enfoca en dividir una aplicación en módulos que solo hacen una cosa y tienen interfaces bien definidas.
Las características distintivas de nuestros servicios son:
- Una arquitectura basada en dominios para evitar fallas en las aplicaciones
- Garantice un alto grado de escalabilidad
- Diseño de base de datos descentralizado
- Habilite el aislamiento simple de fallas y
- Habilite la entrega continua mediante el uso de la cultura DevOps.
Pensamientos finales
¡Da el siguiente paso!
En este blog, nos hemos esforzado por investigar las diversas facetas de la arquitectura de microservicios y las posibilidades que presenta. La funcionalidad de un sistema de aplicación se puede dividir en varias unidades funcionales más pequeñas cuando se utiliza un enfoque arquitectónico conocido como microservicios. La implementación y gestión de los servicios se manejan por separado. Cuando los sistemas monolíticos se dividen en piezas más pequeñas mediante una arquitectura de microservicios, la cantidad de componentes individuales aumenta drásticamente.
Por lo tanto, es necesario tener una gestión eficiente de las dependencias que existen entre ellos. Cuando se compara con la arquitectura de software monolítica, es cierto que crear y ejecutar una arquitectura de microservicios presenta una serie de desafíos y exige un cambio de paradigma. De manera similar, la arquitectura de microservicios no es de ninguna manera una bala mágica que pueda resolver los problemas de complejidad que surgen en cualquier tipo de sistema.
Cuando todo se toma en consideración, creemos que la arquitectura de microservicios es una herramienta extremadamente útil y conveniente para el desarrollo de software contemporáneo. La arquitectura de microservicios es la única estrategia viable para las grandes empresas que suelen generar software complicado, ya que es el único método para abordar de forma eficaz la complejidad y mantener una ventaja competitiva en el mercado. La arquitectura de microservicios debe utilizarse para el desarrollo de software sostenible, que puede generar beneficios a largo plazo, no solo para las grandes corporaciones sino también para las pequeñas y medianas empresas.
Es importante tener en cuenta que los primeros en adoptar la arquitectura de microservicios, como Spotify, Netflix, LinkedIn, Amazon y Google, pudieron obtener importantes ventajas competitivas sobre sus rivales como resultado de la adopción de la arquitectura de microservicios. El desarrollo y examen de un modelo arquitectónico son opciones viables para ayudar en este esfuerzo. Este método promete simplificar las cosas y simplificar la vida de los desarrolladores sin perjudicar el resultado final, lo cual es especialmente importante ahora que las empresas están entrando en un nuevo período de competencia feroz.
La gran mayoría de las empresas están interesadas en mejorar su rentabilidad y, en este contexto, se prevé que la arquitectura sin servidor adquiera una mayor popularidad en el transcurso de los próximos años. El alcance potencial de los microservicios en el futuro del mundo parece bastante prometedor.
¿Pueden los microservicios ayudar a su negocio a avanzar? ¡No dude en contactarnos para una consulta sin compromiso!
¡Gracias por leer!
Preguntas frecuentes sobre la arquitectura de microservicios
- ¿Por qué optaría por la Arquitectura de Microservicios?
El diseño de microservicios tiene varias ventajas sobre la arquitectura monolítica, que incluyen robustez, productividad, flexibilidad, escalabilidad, velocidad, dinamismo, mantenimiento mínimo, etc.
- ¿Cuáles son los 5 componentes de la arquitectura de microservicios?
Los cinco componentes básicos de la arquitectura de microservicios son microservicios, contenedores, malla de servicios, descubrimiento de servicios y puerta de enlace API.
- ¿Es la API REST un microservicio?
Sí, la API REST es una de las API más populares utilizadas para crear aplicaciones de microservicios.
- ¿Cuál es la diferencia entre microservicios y API?
La distinción principal entre las API y los microservicios es que los últimos se utilizan para crear una sola aplicación, mientras que los primeros se componen de una colección de servicios independientes pero interconectados. Las API son componentes de una aplicación que se encargan de facilitar la comunicación con otros programas de software. Therefore, APIs may be utilized to facilitate the creation of microservices.
- Is Kubernetes a microservice?
Yes, Kubernetes is an open-source orchestrator for deploying containerized applications (microservices).
- What language is used in microservices?
C++ is a good language for microservices in domains that require the characteristics of C++, such as runtime speed and direct memory access, and C++, like other languages, has a variety of infrastructures available to help you get started with developing microservices. C++ is a good language for microservices in domains that require the attributes of C++, such as runtime speed and direct memory access.
- ¿Por qué optaría por la Arquitectura de Microservicios?
>> Mayor agilidad y rápido tiempo de comercialización
>> Escalabilidad efectiva y actualización de aplicaciones
>> Costes de desarrollo optimizados
>> Alta confiabilidad, estabilidad y mantenibilidad
>> Flexibilidad en la elección de tecnologías
>> Enfoque láser en funciones comerciales individuales
>> Autonomía del equipo
>> Implementación y pruebas automatizadas
>> Mejor gestión de recursos
>> Deuda técnica reducida/evitada
También te puede interesar leer
- Desarrollo de aplicaciones Full Stack: guía completa
- Comercio sin cabeza: la solución al comercio tradicional
- Comercio componible
- Desarrollo back-end de aplicaciones móviles
- Cómo elegir una pila tecnológica para desarrollar una aplicación