stringtranslate.com

Microservicios

En ingeniería de software , una arquitectura de microservicio es una variante del estilo estructural de arquitectura orientada a servicios . Es un patrón arquitectónico que organiza una aplicación como una colección de servicios detallados y poco acoplados , que se comunican a través de protocolos ligeros . Uno de sus objetivos es que los equipos puedan desarrollar e implementar sus servicios independientemente de los demás. Esto se logra mediante la reducción de varias dependencias en la base del código, lo que permite a los desarrolladores desarrollar sus servicios con restricciones limitadas por parte de los usuarios y ocultar complejidad adicional a los usuarios. [1] Como consecuencia, las organizaciones pueden desarrollar software con un rápido crecimiento y tamaño, así como utilizar servicios disponibles más fácilmente. Se reducen los requisitos de comunicación. Estos beneficios tienen un costo para mantener el desacoplamiento. Las interfaces deben diseñarse cuidadosamente y tratarse como una API pública . Una técnica que se utiliza es tener múltiples interfaces en el mismo servicio, o múltiples versiones del mismo servicio, para no interrumpir a los usuarios existentes del código.

Introducción

No existe una definición única de microservicios. Una visión de consenso ha evolucionado con el tiempo en la industria. Algunas de las características definitorias que se citan con frecuencia incluyen:

Un microservicio no es una capa dentro de una aplicación monolítica (por ejemplo, el controlador web o el backend-for-frontend). [8] Más bien, es una pieza de funcionalidad empresarial autónoma con interfaces claras y puede, a través de sus propios componentes internos, implementar una arquitectura en capas. Desde una perspectiva estratégica, la arquitectura de microservicios sigue esencialmente la filosofía Unix de "Haz una cosa y hazla bien". [9] Martin Fowler describe una arquitectura basada en microservicios con las siguientes propiedades: [2]

Es común que se adopten arquitecturas de microservicios para aplicaciones nativas de la nube , computación sin servidor y aplicaciones que utilizan una implementación de contenedores livianos . Según Fowler, debido a la gran cantidad (en comparación con las implementaciones de aplicaciones monolíticas) de servicios, la entrega continua descentralizada y DevOps con monitoreo holístico de servicios son necesarios para desarrollar, mantener y operar dichas aplicaciones de manera efectiva. [13] Una consecuencia (y justificación) de seguir este enfoque es que los microservicios individuales se pueden escalar individualmente. En el enfoque monolítico, una aplicación que admita tres funciones tendría que escalarse en su totalidad incluso si solo una de estas funciones tuviera una restricción de recursos. [14] Con los microservicios, solo es necesario ampliar el microservicio que respalda la función con restricciones de recursos, proporcionando así beneficios de optimización de recursos y costos. [15]

Historia

Existen numerosas afirmaciones sobre el origen del término microservicios. Ya en 2005, Peter Rodgers introdujo el término "Micro- Web-Services " durante una presentación en la conferencia Web Services Edge. En contra del pensamiento convencional y en el apogeo de la curva de exageración de la arquitectura orientada a servicios (SOA) SOAP , defendió los " servicios REST " y en la diapositiva número 4 de la presentación de la conferencia, analiza " Los componentes de software son microservicios web". [16] Continúa diciendo: "Los microservicios se componen utilizando canalizaciones similares a Unix (la Web se encuentra con Unix = verdadero acoplamiento flexible ). Los servicios pueden llamar a servicios (+ tiempos de ejecución de múltiples idiomas). Los conjuntos de servicios complejos se abstraen detrás "Interfaces URI simples . Cualquier servicio, con cualquier granularidad, puede estar expuesto". Describió cómo una plataforma de microservicios bien diseñada "aplica los principios arquitectónicos subyacentes de los servicios Web y REST junto con programación y canalizaciones similares a Unix para proporcionar una flexibilidad radical y una simplicidad mejorada en arquitecturas orientadas a servicios. [16]

El trabajo de Rodgers se originó en 1999 con el proyecto de investigación Dexter en los laboratorios Hewlett Packard , cuyo objetivo era hacer que el código fuera menos frágil y hacer que los sistemas de software complejos y de gran escala fueran resistentes al cambio. [17] En última instancia, este camino de investigación condujo al desarrollo de la computación orientada a recursos (ROC), una abstracción de computación generalizada en la que REST es un subconjunto especial.

En 2005, Alistair Cockburn escribió sobre la arquitectura hexagonal , que es un patrón de diseño de software que se utiliza junto con los microservicios. Este patrón hace posible el diseño del microservicio ya que aísla en capas la lógica de negocio de los servicios auxiliares necesarios para poder implementar y ejecutar el microservicio de forma completamente independiente de los demás.

Un taller de arquitectos de software celebrado cerca de Venecia en mayo de 2011 utilizó el término "microservicio" para describir lo que los participantes vieron como un estilo arquitectónico común que muchos de ellos habían estado explorando recientemente. [18] En mayo de 2012, el mismo grupo decidió utilizar "microservicios" como el nombre más apropiado. James Lewis presentó algunas de esas ideas como un estudio de caso en marzo de 2012 en el 33º Grado en Cracovia en Microservicios: Java, el estilo Unix, [19] al igual que Fred George [20] aproximadamente al mismo tiempo. Adrian Cockcroft, ex director de Cloud Systems de Netflix, [21] describió este enfoque como "SOA de grano fino", fue pionero en el estilo a escala web, al igual que muchos de los otros mencionados en este artículo: Joe Walnes, Dan North. , Evan Bottcher y Graham Tackley. [22]

Los microservicios son una especialización de un enfoque de implementación para arquitecturas orientadas a servicios que se utilizan para construir sistemas de software flexibles y desplegables de forma independiente . [5] El enfoque de microservicios es la primera realización de SOA que siguió a la introducción de DevOps y se está volviendo más popular para construir sistemas implementados continuamente . [23]

En febrero de 2020, el Informe de investigación de mercado de microservicios en la nube predijo que el tamaño del mercado global de arquitectura de microservicios aumentará a una tasa compuesta anual del 21,37% de 2019 a 2026 y alcanzará los 3.100 millones de dólares en 2026. [24]

Granularidad del servicio

Un paso clave en la definición de una arquitectura de microservicio es determinar qué tan grande debe ser un microservicio individual. No existe consenso ni prueba de fuego para esto, ya que la respuesta correcta depende del contexto empresarial y organizacional. [25] Por ejemplo, Amazon utiliza una arquitectura orientada a servicios donde el servicio a menudo se asigna 1:1 con un equipo de 3 a 10 ingenieros. [26] Generalmente, la terminología es la siguiente: los servicios que se dedican a una sola tarea, como llamar a un sistema backend particular o realizar un tipo particular de cálculo, se denominan servicios atómicos . De manera similar, los servicios que llaman a dichos servicios atómicos para consolidar una producción se denominan servicios compuestos .

Se considera una mala práctica hacer que el servicio sea demasiado pequeño, ya que entonces la sobrecarga del tiempo de ejecución y la complejidad operativa pueden anular los beneficios del enfoque. Cuando las cosas se vuelven demasiado detalladas, se deben considerar enfoques alternativos, como empaquetar la función como una biblioteca o trasladar la función a otros microservicios. [5]

Si se emplea un diseño basado en dominios para modelar el dominio para el cual se construye el sistema, entonces un microservicio podría ser tan pequeño como un agregado o tan grande como un contexto acotado. [27]

En la granularidad de la discusión de microservicios hay un espectro, en un extremo están los Anemic Services, que no tienen una gran cantidad de responsabilidades, y en el otro extremo, los Modular Monolith, que son grandes módulos de un sistema.

Beneficios

Los beneficios de descomponer una aplicación en diferentes servicios más pequeños son numerosos:

Críticas y preocupaciones

El enfoque de microservicios está sujeto a críticas por una serie de cuestiones:

Carga cognitiva

La arquitectura introduce complejidad adicional y nuevos problemas que abordar, como latencia de red , diseño de formato de mensaje , [45] respaldo /disponibilidad/consistencia (BAC), [46] equilibrio de carga y tolerancia a fallas . [39] Todos estos problemas deben abordarse a escala. La complejidad de una aplicación monolítica no desaparece si se vuelve a implementar como un conjunto de microservicios. Parte de la complejidad se traduce en complejidad operativa. [47] Otros lugares donde la complejidad se manifiesta son el aumento del tráfico de red y el resultado de un rendimiento más lento. Además, una aplicación compuesta por cualquier número de microservicios tiene una mayor cantidad de puntos de interfaz para acceder a su respectivo ecosistema , lo que aumenta la complejidad arquitectónica. [48] ​​Se han aplicado varios principios de organización (como hipermedia como motor del estado de la aplicación (HATEOAS), interfaz y documentación del modelo de datos capturado a través de Swagger , etc.) para reducir el impacto de dicha complejidad adicional.

Tecnologías

Los microservicios informáticos se pueden implementar en diferentes lenguajes de programación y pueden utilizar diferentes infraestructuras. Por lo tanto, las opciones tecnológicas más importantes son la forma en que los microservicios se comunican entre sí (síncrono, asíncrono, integración de UI) y los protocolos utilizados para la comunicación (RESTful HTTP, mensajería, GraphQL ...). En un sistema tradicional, la mayoría de las opciones tecnológicas, como el lenguaje de programación, afectan a todo el sistema. Por tanto, el enfoque a la hora de elegir tecnologías es bastante diferente. [49]

La Fundación Eclipse ha publicado una especificación para el desarrollo de microservicios, Eclipse MicroProfile. [50] [51]

Malla de servicio

En una malla de servicios, cada instancia de servicio se empareja con una instancia de un servidor proxy inverso, llamado proxy de servicio, proxy sidecar o sidecar. La instancia de servicio y el proxy complementario comparten un contenedor, y los contenedores se administran mediante una herramienta de orquestación de contenedores como Kubernetes , Nomad, Docker Swarm o DC/OS. Los servidores proxy son responsables de la comunicación con otras instancias de servicio y pueden admitir capacidades tales como descubrimiento de servicio (instancia), equilibrio de carga, autenticación y autorización, comunicaciones seguras y otras.

En una malla de servicios, se dice que las instancias de servicio y sus servidores proxy constituyen el plano de datos, que incluye no sólo la gestión de datos sino también el procesamiento y la respuesta de solicitudes. La malla de servicios también incluye un plano de control para gestionar la interacción entre servicios, mediado por sus representantes secundarios. [ cita necesaria ]

Una comparación de plataformas

Implementar una arquitectura de microservicios es muy difícil. Hay muchas preocupaciones (consulte la tabla a continuación) que cualquier arquitectura de microservicio debe abordar. Netflix desarrolló un marco de microservicios para respaldar sus aplicaciones internas y luego abrió [52] muchas partes de ese marco. Muchas de estas herramientas se han popularizado a través de Spring Framework ; se han reimplementado como herramientas basadas en Spring bajo el paraguas del proyecto Spring Cloud [53] . La siguiente tabla muestra una comparación de una característica de implementación del ecosistema de Kubernetes con un equivalente del mundo Spring Cloud. [54] Un aspecto digno de mención del ecosistema Spring Cloud es que todas son tecnologías basadas en Java, mientras que Kubernetes es una plataforma de ejecución políglota.

Ver también

Referencias

  1. ^ "Arquitecturas de microservicios: ¿más que la suma de sus partes?". Guía digital de IONOS . 2 de marzo de 2020 . Consultado el 29 de marzo de 2022 .
  2. ^ abcd Martin Fowler. "Microservicios". Archivado desde el original el 14 de febrero de 2018.
  3. ^ Newman, Sam (20 de febrero de 2015). Creación de microservicios . Medios O'Reilly. ISBN 978-1491950357.
  4. ^ Wolff, Eberhard (12 de octubre de 2016). Microservicios: arquitecturas de software flexibles . Addison-Wesley. ISBN 978-0134602417.
  5. ^ abc Pautasso, Cesare (2017). "Microservicios en la práctica, parte 1: verificación de la realidad y diseño de servicios". Software IEEE . 34 (1): 91–98. doi :10.1109/MS.2017.24. S2CID  5635705.
  6. ^ abcd Chen, Lianping (2018). Microservicios: arquitectura para entrega continua y DevOps. La Conferencia Internacional IEEE sobre Arquitectura de Software (ICSA 2018). IEEE.
  7. ^ ab Nadareishvili, I., Mitra, R., McLarty, M., Amundsen, M., Arquitectura de microservicios: alineación de principios, prácticas y cultura, O'Reilly 2016
  8. ^ "Patrón de backends para frontends". Patrones de diseño de la nube de Microsoft Azure . Microsoft.
  9. ^ Lucas Krause. Microservicios: patrones y aplicaciones . ASIN  B00VJ3NP4A.
  10. ^ Ford, norte; Richards, M; Sadalage, P; Dehghani, Z. "Arquitectura de software: las partes difíciles". Trabajos de pensamiento . Consultado el 20 de enero de 2023 .
  11. ^ "CI/CD para arquitecturas de microservicios", Azure Architecture Center, Microsoft . Consultado el 9 de enero de 2018.
  12. ^ Josuttis, N. (2007). SOA en la práctica. Sebastopol, California, Estados Unidos: O'Reilly. ISBN 978-0-596-52955-0
  13. ^ Martin Fowler (28 de agosto de 2014). "Requisitos previos del microservicio". Archivado desde el original el 3 de octubre de 2023.
  14. ^ Richardson, Chris (noviembre de 2018). Patrones de microservicios . Publicaciones de Manning. 1.4.1 Cubo de escala y microservicios. ISBN 9781617294549.
  15. ^ Mendonca, Nabor C.; Jamshidi, Pooyan; Garlan, David; Pahl, Claus (16 de octubre de 2019). "Desarrollo de sistemas de microservicios autoadaptativos: desafíos y direcciones" (PDF) . Software IEEE . 38 (2): 70–79. arXiv : 1910.07660 . doi :10.1109/MS.2019.2955937. S2CID  204744007. Archivado (PDF) desde el original el 6 de febrero de 2023.
  16. ^ ab Rodgers, Peter (15 de febrero de 2005). "Desarrollo orientado a servicios en NetKernel: patrones, procesos y productos para reducir la complejidad del sistema". Exposición CloudComputing . Medios SYS-CON. Archivado desde el original el 20 de mayo de 2018 . Consultado el 19 de agosto de 2015 .
  17. ^ Russell, Perry; Rodgers, Peter; Sellman, Royston (2004). "Arquitectura y Diseño de una Plataforma de Aplicaciones XML". Informes técnicos de HP . pag. 62 . Consultado el 20 de agosto de 2015 .
  18. ^ Dragoni, Nicola; Giallorenzo, Saverio; Lafuente, Alberto Lluch; Mazzara, Manuel; Montesi, Fabricio; Mustafin, Ruslán; Safina, Larisa (2017). "Microservicios: ayer, hoy y mañana". Ingeniería de Software Presente y Ulterior . págs. 195-216. arXiv : 1606.04036 . doi :10.1007/978-3-319-67425-4_12. ISBN 978-3-319-67424-7. S2CID  14612986.
  19. ^ James Lewis. "Microservicios: Java, el estilo Unix".
  20. ^ Fred George (20 de marzo de 2013). "Arquitectura de microservicios: un viaje personal de descubrimiento".
  21. ^ Farrow, Rik (2012). "Netflix se dirige a las nubes" (PDF) .
  22. ^ James Lewis y Martin Fowler. "Microservicios".
  23. ^ "Implementación continua: estrategias". javacodegeeks.com . 10 de diciembre de 2014 . Consultado el 28 de diciembre de 2016 .
  24. ^ Investigación, mercado verificado. "Tendencias del mercado de microservicios en la nube 2020, participación de mercado, tamaño de la industria, oportunidades, análisis y pronóstico para 2026: noticias instantáneas del mercado tecnológico" . Consultado el 18 de febrero de 2020 .
  25. ^ O. Zimmermann, Descomposición de servicios específicos de dominio con patrones de API de microservicios, Microservicios 2019, https://www.conf-micro.services/2019/slides//keynotes/Zimmerman.pdf
  26. ^ "Mandato SOA de Amazon". 13 de octubre de 2011.
  27. ^ Vaughn, Vernon (2016). "Diseño basado en dominios destilado" . Profesional de Addison-Wesley. ISBN 978-0-13-443442-1.
  28. ^ Yousif, Mazin (2016). "Microservicios". Computación en la nube IEEE . 3 (5): 4–5. doi :10.1109/MCC.2016.101.
  29. ^ Dragoni, Nicola; Lanese, Iván; Larsen, Stephan Thordal; Mazzara, Manuel; Mustafin, Ruslán; Safina, Larisa (2017). "Microservicios: cómo hacer que su aplicación escale" (PDF) . Perspectivas de la informática de sistemas . Apuntes de conferencias sobre informática. vol. 10742, págs. 95-104. arXiv : 1702.07149 . Código Bib : 2017arXiv170207149D. doi :10.1007/978-3-319-74313-4_8. ISBN 978-3-319-74312-7. S2CID  1643730.
  30. ^ Newman, Sam (2015). Creación de microservicios . O'Reilly. ISBN 978-1491950357.
  31. ^ Wolff, Eberhard (2016). Microservicios: arquitectura de software flexible . Addison Wesley. ISBN 978-0134602417.
  32. ^ Knoche, Holger; Hasselbring, Wilhelm (2019). "Impulsores y barreras para la adopción de microservicios: una encuesta entre profesionales en Alemania". Modelado empresarial y arquitecturas de sistemas de información . 14 : 1:1–35–1:1–35. doi :10.18417/emisa.14.1.
  33. ^ ab Taibi, Davide; Lenarduzzi, Valentina; Pahl, Claus; Janes, Andrea (2017). "Microservicios en el desarrollo ágil de software: un estudio basado en talleres sobre problemas, ventajas y desventajas". Actas de los talleres científicos XP2017 . doi :10.1145/3120459.3120483. S2CID  28134110.
  34. ^ Richardson, Chris. "Patrón de arquitectura de microservicio". microservicios.io . Consultado el 19 de marzo de 2017 .
  35. ^ Chen, Lianping; Ali Babar, Mahoma (2014). "Hacia una comprensión basada en la evidencia del surgimiento de la arquitectura mediante la refactorización continua en el desarrollo de software ágil". Actas de trabajo de la Conferencia IEEE/IFIP sobre Arquitectura de Software 2014 WICSA 2014 . La 11ª Conferencia de Trabajo IEEE/IFIP sobre Arquitectura de Software (WICSA 2014). IEEE. doi :10.1109/WICSA.2014.45.
  36. ^ Balalaie, Armin; Heydarnoori, Abbas; Jamshidi, Pooyan (mayo de 2016). "La arquitectura de microservicios permite DevOps: migración a una arquitectura nativa de la nube" (PDF) . Software IEEE . 33 (3): 42–52. doi : 10.1109/ms.2016.64. hdl : 10044/1/40557. ISSN  0740-7459. S2CID  18802650.
  37. ^ Stenberg, enero (11 de agosto de 2014). "Experiencias de fracasos con microservicios".
  38. ^ Calandra, Mariano (7 de abril de 2021). "Por qué las pruebas unitarias no son suficientes cuando se trata de microservicios".
  39. ^ ab "Desarrollo de microservicios para PaaS con Spring y Cloud Foundry".
  40. ^ Tilkov, Stefan (17 de noviembre de 2014). "¿Qué tan pequeño debe ser su microservicio?". Innoq . Consultado el 4 de enero de 2017 .
  41. ^ Lanza, Michele; Ducasse, Stéphane (2002). "Comprensión de la evolución del software mediante una combinación de visualización de software y métricas de software" (PDF) . En Actas de LMO 2002 (Langages et Modèles à Objets) : 135–149. Archivado desde el original (PDF) el 27 de febrero de 2021.
  42. ^ Richardson, Chris (noviembre de 2018). "Capítulo 4. Gestión de transacciones con sagas". Patrones de microservicios . Publicaciones de Manning. ISBN 978-1-61729454-9.
  43. ^ Devoxx (30 de agosto de 2017). "Diez consejos para fracasar gravemente en microservicios por David Schmitz". YouTube . Archivado desde el original el 22 de abril de 2021.
  44. ^ abc Löwy, Juval (2019). Software de enderezamiento 1ª ed . Profesional de Addison-Wesley. págs. 73–75. ISBN 978-0136524038.
  45. ^ Pautasso, César (2017). "Microservicios en la práctica, parte 2: integración de servicios y sostenibilidad". Software IEEE . 34 (2): 97-104. doi :10.1109/MS.2017.56. S2CID  30256045.
  46. ^ Pautasso, César (2018). "Recuperación consistente ante desastres para microservicios: el teorema de BAC". Computación en la nube IEEE . 5 (1): 49–59. doi :10.1109/MCC.2018.011791714. S2CID  4560021.
  47. ^ Fowler, Martín . "Compensaciones de microservicios".
  48. ^ "BRASS Sistemas de software adaptables a recursos de construcción". Gobierno de los Estados Unidos. DARPA. 7 de abril de 2015."Sin embargo, el acceso a los componentes del sistema y a las interfaces entre los clientes y sus aplicaciones está mediado por una serie de mecanismos que a menudo no están relacionados, incluidas interfaces de programación de aplicaciones (API) documentadas informalmente, interfaces de funciones extrañas idiosincrásicas, definiciones de modelos complejas y mal entendidas o publicidad . formatos de datos hoc . Estos mecanismos generalmente proporcionan sólo una comprensión parcial e incompleta de la semántica de los propios componentes. En presencia de tal complejidad, no es sorprendente que las aplicaciones típicamente incluyan muchas suposiciones sobre el comportamiento esperado del ecosistema con el que interactúan. ".
  49. ^ Wolff, Eberhard (15 de abril de 2018). Microservicios: una guía práctica. Plataforma de publicación independiente CreateSpace. ISBN 978-1717075901.
  50. ^ Swart, Stephanie (14 de diciembre de 2016). "Microperfil Eclipse". proyectos.eclipse.org .
  51. ^ "Microperfil". MicroPerfil . Consultado el 11 de abril de 2021 .
  52. ^ Netflix OSS, Git Hub
  53. ^ Nube, primavera
  54. ^ "Spring Cloud para microservicios en comparación con Kubernetes", Desarrolladores , Red Hat, 9 de diciembre de 2016
  55. ^ Somashekar, Gagan; Gandhi, Anshul (26 de abril de 2021). "Hacia una configuración óptima de los microservicios". Actas del 1er Taller sobre Sistemas y Aprendizaje Automático . EuroMLSys '21. En línea, Reino Unido: Asociación de Maquinaria de Computación. págs. 7-14. doi :10.1145/3437984.3458828.
  56. ^ Gestión de microservicios con la malla de servicios de Istio, Kubernetes, mayo de 2017
  57. ^ El administrador de paquetes de Kubernetes, Helm

Otras lecturas