Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
1 ANÁLISIS DEL RENDIMIENTO DE LA TRANSACCIONALIDAD EN UN API GATEWAY DESARROLLADO CON EL PARADIGMA ORIENTADO A OBJETOS FRENTE AL PARADIGMA REACTIVO Autor Jairo Edinson Viuche Madroñero Universidad Distrital Francisco Jose de Caldas Facultad de Ingenieŕıa Especialización en Ingenieŕıa de Software Bogotá, Colombia Año 2019 2 ANÁLISIS DEL RENDIMIENTO DE LA TRANSACCIONALIDAD EN UN API GATEWAY DESARROLLADO CON EL PARADIGMA ORIENTADO A OBJETOS FRENTE AL PARADIGMA REACTIVO Autor Jairo Edinson Viuche Madroñero Monograf́ıa de grado Presentada como requisito para optar al t́ıtulo de Especialista en Ingenieŕıa de Software Director Dr. Roberto Ferro Escobar Revisor Msc. John Freddy Parra Universidad Distrital Francisco Jose de Caldas Facultad de Ingenieŕıa Especialización en Ingenieŕıa de Software Bogotá, Colombia Año 2019 Índice de figuras 1-1. Arquitectura microservicios con Api Gateway . . . . . . . . . . . . . . . . . 7 1-2. Ejemplo de composición de Api para un Api Gateway . . . . . . . . . . . . . 9 1-3. Arquitectura Api Gateway con múltiples clientes . . . . . . . . . . . . . . . . 10 1-4. Clasificación taxonómica de los vertebrados . . . . . . . . . . . . . . . . . . . 12 1-5. Caracteŕısticas de un sistema reactivo, y como se relacionan entre śı . . . . . 14 1-6. Relación en una implementación del flujo reactivo . . . . . . . . . . . . . . . 15 1-7. El zoo de los paradigmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1-8. Arquitectura en Api de Netflix . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2-1. Funciones del Api Gateway . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3-1. Diagrama de clases Api Gateway con paradigma orientado a objetos . . . . . 25 3-2. Diagrama de secuencia Api Gateway con paradigma orientado a objetos . . . 26 3-3. Diagrama de componentes Api Gateway con paradigma orientado a objetos . 26 3-4. Diagrama de flujo de datos f́ısico . . . . . . . . . . . . . . . . . . . . . . . . 27 3-5. Diagrama de secuencia Api Gateway con paradigma reactivo . . . . . . . . . 27 3-6. Concurrencia api reactivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4-1. Plataforma Jhipster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4-2. Ejemplo modelo de entidades microservicio en JDL Studio . . . . . . . . . . 30 4-3. Ejemplo lenguaje JDL en modelo de entidades para microservicio . . . . . . 31 4-4. Contenedores docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4-5. Documentación Swagger para microservicio . . . . . . . . . . . . . . . . . . . 32 4-6. Documentación detallada Swagger para microservicio . . . . . . . . . . . . . 33 4-7. Archivo app.js, ejecución principal del Api Gateway . . . . . . . . . . . . . . 34 4-8. Archivo router.js, contenedor de los microservicios que se desean consumir . 35 4-9. Gateway adapter, cada microservicio realiza su uso . . . . . . . . . . . . . . 35 4-10.Configuración de enrutamiento para cada microservicio, por servicio . . . . . 36 4-11.Configuración de archivo pom.xml del servidor eureka . . . . . . . . . . . . . 37 4-12.Configuración general del servidor . . . . . . . . . . . . . . . . . . . . . . . . 37 4-13.Clase principal de Spring boot, servidor eureka . . . . . . . . . . . . . . . . . 38 4-14.Dependencias pom.xml Api Gateway con spring cloud . . . . . . . . . . . . 38 4-15.Otras dependencias pom.xml Api Gateway con spring cloud . . . . . . . . . 39 4-16.Gateway Routing con spring cloud . . . . . . . . . . . . . . . . . . . . . . . 39 4-17.Servicio web, punto de entrada Api Gateway . . . . . . . . . . . . . . . . . . 40 4 ÍNDICE DE FIGURAS 4-18.Acción para la optención de url . . . . . . . . . . . . . . . . . . . . . . . . . 41 4-19.Transformador de url a request . . . . . . . . . . . . . . . . . . . . . . . . . 41 4-20.Consumo de servicio RestFul, microservicio . . . . . . . . . . . . . . . . . . . 41 4-21.Diagrama de despliegue de componentes del análisis . . . . . . . . . . . . . . 42 5-1. Logo Jirka It Solutions SAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5-2. Metamodelo punto de vista de organización . . . . . . . . . . . . . . . . . . 45 5-3. Punto de vista de organización . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5-4. Metamodelo punto de vista cooperación de actor . . . . . . . . . . . . . . . . 45 5-5. Punto de vista cooperación de actor . . . . . . . . . . . . . . . . . . . . . . . 46 5-6. Metamodelo punto de vista de función de negocio . . . . . . . . . . . . . . . 46 5-7. Punto de vista de función de negocio . . . . . . . . . . . . . . . . . . . . . . 47 5-8. Metamodelo punto de vista de proceso de negocio . . . . . . . . . . . . . . . 47 5-9. Punto de vista de proceso de negocio . . . . . . . . . . . . . . . . . . . . . . 48 5-10.Metamodelo punto de vista de cooperación de proceso de negocio . . . . . . 48 5-11.Punto de vista de cooperación de proceso de negocio . . . . . . . . . . . . . 49 5-12.Metamodelo punto vista de producto . . . . . . . . . . . . . . . . . . . . . . 50 5-13.Punto vista de producto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5-14.Metamodelo punto de vista de comportamiento de aplicación . . . . . . . . . 51 5-15.Punto de vista de comportamiento de aplicación . . . . . . . . . . . . . . . . 51 5-16.Metamodelo punto de vista de cooperación de aplicación . . . . . . . . . . . 52 5-17.Punto de vista de cooperación de aplicación . . . . . . . . . . . . . . . . . . 52 5-18.Metamodelo punto de vista de estructura de aplicación . . . . . . . . . . . . 53 5-19.Punto de vista de estructura de aplicación . . . . . . . . . . . . . . . . . . . 53 5-20.Metamodelo punto de vista de uso de aplicación . . . . . . . . . . . . . . . . 54 5-21.Punto de vista de uso de aplicación . . . . . . . . . . . . . . . . . . . . . . . 54 5-22.Metamodelo punto de vista de infraestructura . . . . . . . . . . . . . . . . . 55 5-23.Punto de vista de infraestructura . . . . . . . . . . . . . . . . . . . . . . . . 55 5-24.Metamodelo punto de vista de uso de infraestructura . . . . . . . . . . . . . 56 5-25.Punto de vista de uso de infraestructura . . . . . . . . . . . . . . . . . . . . 56 5-26.Metamodelo punto de vista de organización e implementación . . . . . . . . 57 5-27.Punto de vista de organización e implementación . . . . . . . . . . . . . . . 57 5-28.Metamodelo punto de vista de Estructura de Información . . . . . . . . . . . 58 5-29.Punto de vista de Estructura de Información . . . . . . . . . . . . . . . . . . 58 5-30.Metamodelo punto de vista de Realización del Servicio . . . . . . . . . . . . 59 5-31.Punto de vista de Realización del Servicio . . . . . . . . . . . . . . . . . . . 59 5-32.Punto de vista de Capas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5-33.Metamodelo punto de vista de stakeholder . . . . . . . . . . . . . . . . . . . 61 5-34.Punto de vista de stakeholder . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5-35.Metamodelo punto de vista de realización de objetivos . . . . . . . . . . . . 62 5-36.Punto de vista de realización de objetivos . . . . . . . . . . . . . . . . . . . . 62 5-37.Metamodelo punto de vista de contribución . . . . . . . . . . . . . . . . . . 63 5-38.Metamodelo punto de vista de contribución . . . . . . . . . . . . . . . . . . 63 5-39.Metamodelo punto de vista de principios . . . . . . . . . . . . . . . . . . . . 64 ÍNDICE DE FIGURAS 5 5-40.Ejemplo punto de vista de principios . . . . . . . . . . . . . . . . . . . . . . 64 5-41.Metamodelo punto de vista de realización de Requerimientos . . . . . . . . . 64 5-42.Ejemplo punto de vista de realización de requerimientos . . . . . . . . . . . . 65 5-43.Metamodelo punto de vista de motivación . . . . . . . . . . . . . . . . . . . 65 5-44.Ejemplo punto de vista de realización de requerimientos . . . . . . . . . . . . 66 5-45.Metamodelo punto de vista de proyecto . . . . . . . . . . . . . . . . . . . . . 665-46.Ejemplo punto de vista de proyecto . . . . . . . . . . . . . . . . . . . . . . . 67 5-47.Metamodelo punto de vista de migración . . . . . . . . . . . . . . . . . . . . 67 5-48.Ejemplo punto de vista de migración . . . . . . . . . . . . . . . . . . . . . . 68 5-49.Metamodelo punto de vista de migración e implementación . . . . . . . . . . 68 5-50.Punto de Vista de Migración e Implementación . . . . . . . . . . . . . . . . 69 6-1. Apache JMeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6-2. Respuesta de cada Api Gateway . . . . . . . . . . . . . . . . . . . . . . . . . 72 6-3. Promedio tiempos de respuesta para 100 peticiones . . . . . . . . . . . . . . 73 6-4. Tiempos Mı́nimo de respuesta para 100 peticiones . . . . . . . . . . . . . . . 73 6-5. Tiempos Máximo de respuesta para 100 peticiones . . . . . . . . . . . . . . . 74 6-6. Respuesta de cada Api Gateway . . . . . . . . . . . . . . . . . . . . . . . . . 75 6-7. Promedio tiempos de respuesta para 500 peticiones . . . . . . . . . . . . . . 75 6-8. Tiempos Mı́nimo de respuesta para 500 peticiones . . . . . . . . . . . . . . . 76 6-9. Tiempos Máximo de respuesta para 500 peticiones . . . . . . . . . . . . . . . 76 6-10.Respuesta de cada Api Gateway . . . . . . . . . . . . . . . . . . . . . . . . . 77 6-11.Promedio tiempos de respuesta para 1.000 peticiones . . . . . . . . . . . . . 78 6-12.Tiempos Mı́nimo de respuesta para 1.000 peticiones . . . . . . . . . . . . . . 78 6-13.Tiempos Máximo de respuesta para 1.000 peticiones . . . . . . . . . . . . . . 79 6-14.Respuesta de cada Api Gateway . . . . . . . . . . . . . . . . . . . . . . . . . 80 6-15.Promedio tiempos de respuesta para 5.000 peticiones . . . . . . . . . . . . . 81 6-16.Tiempos Mı́nimo de respuesta para 5.000 peticiones . . . . . . . . . . . . . . 81 6-17.Tiempos Máximo de respuesta para 5.000 peticiones . . . . . . . . . . . . . . 82 Índice de cuadros 6-1. Resumen de transaccionalidad para 100 peticiones http . . . . . . . . . . . . 72 6-2. Resumen de transaccionalidad para 500 peticiones http . . . . . . . . . . . . 74 6-3. Resumen de transaccionalidad para 1.000 peticiones http . . . . . . . . . . . 77 6-4. Resumen de transaccionalidad para 5.000 peticiones http . . . . . . . . . . . 80 Contenido Introducción 2 I Contextualización de la investigación 3 1. Descripción de la investigación 4 1.1. Planteamiento/Identificación del problema . . . . . . . . . . . . . . . . . . . 4 1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.1. Objetivo General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.2. Objetivos espećıficos . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3. Justificación del trabajo/investigación . . . . . . . . . . . . . . . . . . . . . . 6 1.4. Hipótesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.5. Marco referencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.5.1. Marco teórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.5.2. Marco conceptual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.6. Metodoloǵıa de la investigación . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.7. Organización del trabajo de grado . . . . . . . . . . . . . . . . . . . . . . . . 18 1.8. Estudio de sistemas previos . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 II Desarrollo de la investigación 22 2. Análisis del sistema 23 2.1. Requerimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3. Diseño de Api Gateway 25 3.1. Paradigma orientado a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.2. Paradigma reactivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4. Construcción e Implementación 29 4.1. Microservicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.2. Api Gateway Reactivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2.1. Api Gateway NodeJS . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2.2. Api Gateway Spring Cloud . . . . . . . . . . . . . . . . . . . . . . . . 35 4.3. Api Gateway Orientado a Objetos . . . . . . . . . . . . . . . . . . . . . . . . 40 CONTENIDO 1 4.4. Despliegue final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5. ADM-Archimate 43 5.1. Organización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.2. Punto de vista del negocio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.3. Punto de vista de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.4. Punto de vista tecnológico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.5. Punto de vista motivacional . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.6. Punto de vista implementación y migración . . . . . . . . . . . . . . . . . . 66 III Cierre de la investigación 70 6. Resultados y discusión 71 7. Conclusiones 83 7.1. Verificación, contraste y evaluación de los objetivos . . . . . . . . . . . . . . 83 7.2. Śıntesis del modelo propuesto . . . . . . . . . . . . . . . . . . . . . . . . . . 83 7.3. Aportes originales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 8. Prospectiva del trabajo de grado 85 8.1. Ĺıneas de investigación futuras . . . . . . . . . . . . . . . . . . . . . . . . . . 85 8.2. Trabajos de Investigación futuros . . . . . . . . . . . . . . . . . . . . . . . . 85 Bibliograf́ıa 87 Referencias web 89 2 CONTENIDO Introducción Este proyecto tiene como objetivo recabar información y formular una hipótesis acerca de la transaccionalidad en el componente API Gateway desarrollado con el paradigma orientado a objetos frente al paradigma reactivo. El componente Api Gateway es un patrón que bus- ca solucionar la forma que los diferentes clientes tratan de acceder a los microservicios del Banckend. Las aplicaciones con arquitectura a microservicios, han optado por incluir este patrón en su arquitectura y como es el caso de Netflix ha sido conveniente, puesto que ofrecen un API de servicios para cada tipo de cliente, de esta manera tiene una alta disponibilidad, escala- bilidad y rendimiento. En el mundo y Colombia no es la excepción, las aplicaciones en su mayoŕıa usan la pro- gramación orientada a objetos, brindando buenas soluciones para lo que fueron construidas. Sin embargo, en los últimos años viene emergiendo el paradigma reactivo, el cual es una buena alternativa por su manejo de recursos f́ısicos. Según la literatura sobre arquitectura de software actual, es conveniente que para el desa- rrollo de aplicación con una alta concurrencia, el paradigma elegido sea el reactivo, porque que aśı cada flujo tiene un manejo independiente, lo que puede llevar a que haya un servicio de atención mucho más rápido. Con el presente análisis lo que se busca es encontrar diferencias entre uno de los para- digma más usados, puede ser el más usado, y el paradigma que esta emergente y que en la literatura recomienda, adicional a esto se realizará con diversas libreŕıas de programación reactiva para dar peso a la conclusión. Parte I Contextualización de la investigación Caṕıtulo 1 Descripción de la investigación 1.1. Planteamiento/Identificación del problema El patrón Api Gateway ha demostrado ser conveniente para aplicaciones basadas en micro- servicios. Si no se tiene un Api Gateway, las aplicaciones clientes deben enviar solicitudes directamente a los microservicios y eso plantea problemas tales como: acoplamiento, dema- siados viajes de ida y vuelta, temas de seguridad, inconvenientes transversales, entre otros [2]. Por lo tanto, el api Gateway se encuentra entre: las aplicaciones clientes y los microser- vicios. Actúa como un proxy inverso, enrutando las solicitudes de los clientes a los servicios. También puede proporcionar caracteŕısticastransversales adicionales como autenticación, terminación SSL y cache. Por otro lado en los últimos años; el paradigma de la programación reactiva ha recibido una mayor atención, ya que cada vez más aplicaciones se han vuelto impulsadas por eventos [4, 1]. El paradigma gira en torno a la propagación del cambio para variables que vaŕıan continuamente en el tiempo. En otras palabras, el paradigma gira en torno al procesamiento aśıncrono de flujo de datos sin bloqueo. Este paradigma adopta un enfoque declarativo que permite a los desarrolladores especificar qué hacer, pero está dejando el tiempo de ejecución al lenguaje [4]. Al mismo tiempo, la programación orientada a objetos es un paradigma que posiblemen- te sea el más ampliamente utilizados hoy en d́ıa, trata los datos como objetos con atributos y métodos que pueden aplicarse a estos objetos y también ser heredados por otros objetos. En la actualidad, hay afirmaciones que a las aplicaciones con paradigma orientado a objetos cuando se les han realizado pruebas tanto de concepto como de carga, han evidenciado que a pesar de tener una respuesta aceptable en una cantidad mediana de usuarios y operaciones medianamente complejas, la capacidad del sistema se degrada de manera rápida al empezar a tener más usuarios concurrentes (alrededor de 1000 usuarios al mismo tiempo) [Web17]. Es dif́ıcil encontrar documentación a cerca de un API Gateway haya sido desarrollado con programación orientada a objetos, ¿a qué se debe este fenómeno?, las limitaciones que se mencionaron anteriormente ¿impactan la atención de solicitudes en este componente?, ¿Qué 1.2 Objetivos 5 diferencias tiene la programación reactiva frente a la programación orientada a objetos? Formulación del problema Para un componente API Gateway de la arquitectura de microservicios desarrollado bajo el paradigma orientado a objetos y el mismo componente desarrollado bajo el paradigma reactivo, ¿Qué API tiene mayor ı́ndice de atención a las peticiones enviadas en un lapso de tiempo dado? Sistematización del problema ¿Cómo proveer los API Gateways que serán objetos de estudio, en donde se determinará cuál tiene mayor rendimiento en su transaccionalidad? ¿Cómo se obtendrán los datos de la transaccionalidad de cada API Gateway para n peticiones en un lapso de tiempo dado? ¿Cómo demostrar qué API Gateway tiene mayor ı́ndice de atención a sus peticiones enviadas? 1.2. Objetivos 1.2.1. Objetivo General Analizar el rendimiento de la transaccionalidad en un API Gateway desarrollado con el paradigma orientado a objetos frente al paradigma reactivo, determinando qué paradigma tiene mayor ı́ndice de atención. 1.2.2. Objetivos espećıficos Desarrollar el API Gateway mediante las tecnoloǵıas Spring Cloud y NodeJS para el paradigma Reactivo y por parte del paradigma orientado a objetos con Java; los cuales serán objetos de estudio. Obtener los datos de la transaccionalidad de cada API Gateway con la ayuda de la herramienta: Apache JMeter; para n peticiones en un lapso de tiempo determinado, en donde n está en unidades de mil; estos datos representan a cada paradigma usado en el desarrollo del API. Clasificar los paradigmas de acuerdo al nivel de transaccionalidad del API, determi- nados por la comparación de resultados; el orden de la clasificación es el número de peticiones atendidas en un tiempo dado, de mayor a menor. 6 1 Descripción de la investigación 1.3. Justificación del trabajo/investigación En la actualidad las aplicaciones con arquitectura a microservicios están en su pleno auge, esto se debe a que han solventado varios inconvenientes comunes que presentan las aplica- ciones monoĺıticas. Entre algunas ventajas se tienen: Servicios pequeños e independientes (principio de responsabilidad única), unidades de despliegue pequeñas, reducción en tiempos de desarrollo, agilidad en hot fixes, multitecnoloǵıa, fácil escalado horizontal. El patrón Api Gateway nace en respuesta a cómo debeŕıan los clientes de una aplicación basada a microservicios acceder a los servicios individuales, porque estos sistemas necesi- tan mucha información que se distribuye en varios servicios dentro del catálogo de servicios [Web14]. Además, muchos tipos de clientes consumen los servicios del sistema, agregando más complejidad a las soluciones finales; cuando comenzamos a pensar en la evolución de esos servicios, respetando las comunicaciones y el intercambio de tamaño/formato de datos para cada uno de esos clientes; de esta manera, los servicios deben poder ”hablarçon cada uno de estos clientes (y ser fácilmente detectables) sin perder los requisitos no funcionales de rendimiento, mantenimiento, escalabilidad, seguridad y disponibilidad necesarios para so- portar estas soluciones distribuidas [Web14]. Las aplicaciones microservicios con el patrón API Gateway están orientadas para tener una alta concurrencia, como es el caso de Netflix, por tal motivo la literatura se centra en un enfoque reactivo, impulsado por eventos, ya que se considera que es mejor por si debe es- calarse al manejo de altas cargas. En la JVM, las bibliotecas basadas en NIO como Netty, Spring Reactor, etc. tienen sentido. NodeJS es otra opción. Con la realización del análisis de la transaccionalidad en el Api Gateway bajo el para- digma orientado a objetos frente al paradigma reactivo, lo que se pretende es determinar qué paradigma tiene mejor atención de solicitudes. Este análisis es una contribución para las aplicaciones basadas en arquitectura microservicios y por ende al desarrollo de software. 1.4 Hipótesis 7 1.4. Hipótesis Con el análisis de la transaccionalidad en el API Gateway desarrollado bajo el paradigma reactivo frente al paradigma orientado a objetos, para la funcionalidad de “mostrar regalo” de la aplicación microservicios seloreglo.com; se determinará que para el alto número de solicitudes concurrentes, el API Gateway desarrollado con programación reactiva responderá mayor número de peticiones en un tiempo dado. 1.5. Marco referencial 1.5.1. Marco teórico El patrón Api Gateway Un API Gateway es un servicio que es el único punto de entrada para las solicitudes de API en una aplicación desde fuera del firewall. Es similar al patrón de fachada del diseño orientado a objetos. Como una fachada, un Api Gateway encapsula la arquitectura interna de la aplicación y la proporciona a sus clientes. También podŕıa tener otras responsabilidades, tales como autenticación, monitoreo y limitación de velocidad. La figura 1-1 muestra la relación entre los clientes, el Api Gateway y los servicios [7]. Figura 1-1: Arquitectura microservicios con Api Gateway El API Gateway es responsable del enrutamiento de solicitudes, la composición de API y la traducción de protocolos. Todas las solicitudes de clientes externos primero van al API 8 1 Descripción de la investigación Gateway. Este encamina algunas solicitudes al servicio apropiado y da manejo a otras solici- tudes usando el patrón de composición de API e invocando múltiples servicios y agregando los resultados. También actúa como traductor entre protocolos amigables para el cliente, como HTTP y WebSockets, y los protocolos hostiles para el cliente que son utilizados por los servicios [7]. Enrutamiento de solicitudes Una de las funciones clave de un API Gateway es el en- rutamiento de solicitudes. Ya que implementa algunas operaciones de API al enrutar las solicitudes al servicio correspondiente. Cuando recibe una solicitud, el API Gateway consul- ta un mapa de enrutamiento que especifica a qué servicio enrutar la solicitud. Un mapa de enrutamiento podŕıa, por ejemplo, asignar un método HTTP y una ruta a la URL HTTP de un servicio. Esta función es idéntica a las funciones de proxy inverso proporcionadas por servidores web como NGINX [7] . Composición Api Un API Gateway normalmente hace más que un proxy inverso. Tam- bién podŕıa implementar algunas operacionesde API utilizando la composición. Como se muestra en la Figura 1-2, la aplicación móvil realiza una solicitud al API Gateway, que obtiene los detalles del pedido de múltiples servicios. Traducción del Protocolo Un API Gateway también puede realizar la traducción del protocolo. Puede proporcionar una API RESTful a clientes externos, aunque los servicios de la aplicación utilizan una combinación de protocolos que incluyen internamente REST y gRPC. Cuando sea necesario, la implementación de algunas operaciones de API se traduce entre la API externa RESTful y las API internas basadas en gRPC [7]. El API Gateway proporciona para cada cliente un API espećıfico Un API Ga- teway podŕıa proporcionar una única API de talla única para todos (OSFA). El problema con una única API es que los diferentes clientes a menudo tienen diferentes requisitos. Por ejemplo, una aplicación de terceros puede requerire que la operación de obtención de detalles de pedidos de la API devuelva los detalles completos de los pedidos, mientras que un cliente móvil solo necesita un subconjunto de los datos. Una forma de resolver este problema es dar a los clientes la opción de especificar en una solicitud qué campos y objetos relacionados debe devolver el servidor. Este enfoque es adecuado para una API pública que debe servir a una amplia gama de aplicaciones de terceros, pero a menudo no proporciona a los clientes el control que necesitan [7]. Un mejor enfoque es que el API Gateway proporcione a cada cliente su propia API. Por ejemplo, se podŕıa tener diferentes API para las aplicaciones móviles de Android e iPhone. Arquitectura Api Gateway Un API Gateway tiene una arquitectura modular en capas. Su arquitectura, que se muestra en la Figura 1-3. Arquitectura API Gateway con múltiples clientes, consta de dos capas, la capa API y una capa común. 1.5 Marco referencial 9 Figura 1-2: Ejemplo de composición de Api para un Api Gateway La capa API consta de uno o más módulos independientes. Cada módulo implementa una API para un cliente en particular. La capa común implementa una funcionalidad compartida que incluye funciones de borde como la autenticación. En este ejemplo, el API Gateway tiene tres módulos: Mobile API: Implementa el Api de servicios para clientes Móviles. Browser API: El cual implementa el API para aplicaciones Javascript ejecutadas por un navegador. Public API: Hace referencia al API de servicios para desarrolladores terceros. Beneficios de un Api Gateway Una de las principales ventajas de utilizar un API Gateway es que encapsula la estructura interna de la aplicación. En lugar de tener que invocar servicios espećıficos, los clientes hablan con el API. Este proporciona a cada cliente 10 1 Descripción de la investigación Figura 1-3: Arquitectura Api Gateway con múltiples clientes una API espećıfica para cliente. Esto reduce el número de viajes de ida y vuelta entre el cliente y la aplicación. También simplifica el código del cliente [7]. Inconvenientes de un Api Gateway El patrón API Gateway también tiene algunos inconvenientes. Es otro componente altamente disponible que debe ser desarrollado, imple- mentado y administrado. Esto crea el riesgo de que el componente se convierta en un cuello de botella de desarrollo. Los desarrolladores deben actualizar el API Gateway para exponer la API de sus servicios. Es importante que el proceso para actualizarlo sea lo más liviano po- sible. De lo contrario, los desarrolladores se ven obligados a esperar en ĺınea para actualizar el API Gateway [7]. Netflix como ejemplo de un API Gateway Un gran ejemplo de un API Gateway es el API de Netflix. El servicio de transmisión de Netflix está disponible en cientos de diferentes tipos de dispositivos, incluidos televisores, re- productores de Blu-ray, teléfonos inteligentes, etc. Inicialmente, Netflix intentó tener un API de estilo único para su servicio de transmisión. Desafortunadamente, pronto descubrieron que no funcionaba bien debido a la amplia gama de dispositivos y sus diferentes necesidades. Hoy en d́ıa, utilizan un API Gateway que implementa una API de servicios separada para cada dispositivo. En la primera versión del API Gateway de Netflix, cada equipo de clientes implementó su API utilizando scripts Groovy que realizan enrutamiento y composición de API. Cada secuencia de comandos invocó una o más API de servicio utilizando las bibliotecas de clien- 1.5 Marco referencial 11 te Java proporcionadas por los equipos de servicio. Por un lado, esto funciona bien y los desarrolladores de clientes han escrito más de miles de scripts. El API Gateway de Netflix maneja miles de millones de solicitudes por d́ıa; en promedio, cada API llama a los fanáticos a seis o siete servicios de back-end. Netflix ha encontrado que esta arquitectura monoĺıtica es algo incómoda. Como resultado, Netflix ahora se está moviendo a una arquitectura de API Gateway que es similar a los Backends para los patrones front-end. En esta nueva arquitectura, los equipos de clientes escriben módulos API utilizando NodeJS. Cada módulo API ejecuta su propio contenedor Docker. Los scripts no invocan los servicios directamente. En su lugar, invocan un segundo “API Gateway”, que expone las API de servicio utilizando Netflix Falcor. Netflix Falcor es una tecnoloǵıa de API que realiza una composición de API dinámica y declarativa, y permite a un cliente invocar múltiples servicios utilizando una sola solicitud. Esta nueva arquitectura tiene una serie de beneficios. Los módulos API están aislados entre śı, lo que mejora la confiabilidad y la capacidad de observación. Además, el módulo API del cliente es escalable de forma independiente. Programación Orientada a Objetos Un programa orientado a objetos (OOP) se ve como una colección de objetos interactivos, a diferencia del modelo convencional en el que un programa se ve como una lista de tareas (subrutinas) para realizar. En OOP, cada objeto es capaz de recibir mensajes, procesar datos y enviar mensajes a otros objetos. Cada objeto puede verse como una “máquina” independiente con una función o responsabilidad distinta. Las acciones o métodos en estos objetos están estrechamente asociados con el objeto [6]. Clase Una clase, es simplemente una abstracción que hacemos de nuestra experiencia sen- sible. El ser humano tiende a agrupar seres o cosas -objetos- con caracteŕısticas similares en grupos -clases-. Aśı, aun cuando existen por ejemplo multitud de vasos diferentes, podemos reconocer un vaso en cuanto lo vemos, incluso aun cuando ese modelo concreto de vaso no lo hayamos visto nunca. El concepto de vaso es una abstracción de nuestra experiencia sensible. Quizás el ejemplo más claro para exponer esto lo tengamos en las taxonomı́as; los biólogos han dividido a todo ser (vivo o inerte) sobre la tierra en distintas clases [5] . Tomemos como ejemplo una pequeña porción del inmenso árbol taxonómico: Ellos, llaman a cada una de estas parcelas reino, tipo, clase, especie, orden, familia, género, etc.; sin embargo, nosotros a todas las llamaremos del mismo modo: clase. Aśı, hablaremos de la clase animal, clase vegetal y clase mineral, o de la clase félidos y de las clases leo (león) y tigris (tigre). Cada clase posee unas cualidades que la diferencian de las otras. Aśı, por ejemplo, los vegetales se diferencian de los minerales -entre otras muchas cosas- en que los primeros son seres vivos y los minerales no. De los animales se diferencian en que las plantas son capaces de sintetizar clorofila a partir de la luz solar y los animales no [5]. Objeto En OOP, un objeto es un conjunto de datos y métodos como imaginamos que se habrá quedado igual, le vamos a dar más pistas [5]. 12 1 Descripción de la investigación Figura 1-4: Clasificación taxonómica de los vertebrados Los datos son lo que antes hemos llamado caracteŕısticas o atributos, los métodos son los comportamientos que pueden realizar [5]. Lo importantede un sistema OOP es que ambos, datos y métodos están tan intŕınseca- mente ligados, que forman una misma unidad conceptual y operacional. En OOP, no se pueden desligar los datos de los métodos de un objeto. Aśı es como ocurre en el mundo real [5]. Herencia Esta es la cualidad más importante de un sistema OOP, la que nos dará mayor potencia y productividad, permitiéndonos ahorrar horas y horas de codificación y de depu- ración de errores. Las cualidades comunes que comparten distintas clases, pueden y deben agruparse para formar una clase padre -también llamada superclase-. Por ejemplo, usted podŕıa derivar las clases presupuesto, albarán y factura de la superclase pedidos, ya que estas clases comparten caracteŕısticas comunes. De este modo, la clase padre poseeŕıa los métodos comunes a todas ellas y sólo tendŕıamos que añadir aquellos métodos propios de cada una de las subclases, pudiendo reutilizar el código escrito en la superclase desde cada una de las clases deriva- das. Aśı, si enseñamos a la clase padre a imprimirse, cada uno de los objetos de las clases inferiores sabrá automáticamente y sin escribir ni una solo ĺınea más de código imprimirse [5]. 1.5 Marco referencial 13 Encapsulamiento Hay muchos datos que no tiene por qué conocerlo aquel que esté usan- do la clase X; ya que son inherentes al objeto y solo controlan su funcionamiento interno. Esto es la encapsulación u ocultación; hacer las variables que son innecesarias para el trata- miento del objeto pero necesarias para su funcionamiento privadas, aśı como las funciones que no necesitan interacción del usuario o que solo pueden ser llamadas por otras funciones dentro del objeto (como por ejemplo, palpitar) [5]. La encapsulación es muy conveniente y nos permite colocar en funcionamiento nuestro ob- jeto en cualquier tipo de sistema, de una manera modular y escalable (algunas de las reglas de la ingenieria del software) [5]. Formas de encapsular: Abierto: hace que el miembro de la clase pueda ser accedido desde el exterior de la Clase cualquier parte del programa. Protegido: solo es accesible desde la Clase y las clases que heredan (a cualquier nivel). Cerrado: Solo es accesible desde la Clases. Polimorfismo Por polimorfismo entendemos aquella cualidad que poseen los objetos para responder de distinto modo ante el mismo mensaje. Pongamos por ejemplo las clases hombre, vaca y perro, si a todos les damos la orden - enviamos el mensaje- Come, cada uno de ellos sabe cómo hacerlo y realizará este comporta- miento a su modo. Veamos otro ejemplo algo más ilustrativo. Tomemos las clases barco, avión y coche, to- das ellas derivadas de la clase padre veh́ıculo; si les enviamos el mensaje Desplázate, cada una de ellas sabe cómo hacerlo. Realmente, y para ser exactos, los mensaje no se env́ıan a las clases, sino a todos o algunos de los objetos instanciados de las clases. Aśı, por ejemplo, podemos decirle a los objetos Juan Sebastián el Cano y Kontiqui, de la clase barco que se desplacen, con los que el resto de los objetos de esa clase permanecerán inmóviles. Paradigma reactivo Sistemas Reactivos En 1985, Harel y Puneli propusieron dos categoŕıas de sistemas [3, 4]. Hicieron una distin- ción entre sistemas transformacionales y reactivos. Un sistema de transformación se define como un sistema que responde a la entrada transformándolo y luego produciendo salidas. La naturaleza es que estos sistemas procesan la entrada y producen la salida de vez en cuando. 14 1 Descripción de la investigación Sin embargo, los sistemas reactivos se definen como sistemas que responden continuamente a las entradas. Harel y Puneli también señalan que los sistemas reactivos están presentes en todas partes, desde automóviles hasta teléfonos. La reactividad puede ser incluida por soft- ware o chips, por ejemplo. Tanto los sistemas transformacionales como los reactivos pueden ser śıncronos o aśıncronos. El centro de mayor atención para la programación reactiva está especialmente en combinar la programación reactiva y la distribución. Buenos ejemplos para la combinación de programa- ción reactiva y distribución son las aplicaciones web y las aplicaciones móviles distribuidas. Un inconveniente conocido de la combinación de programación reactiva y distribución es que puede provocar fallas [1, 4]. Evitar fallos es un factor a considerar cuando se utiliza la programación reactiva. Es más dif́ıcil evitarlos en los sistemas distribuidos debido a los pro- blemas de la red, como la latencia. La combinación de programación reactiva y distribución a menudo se denomina programación reactiva distribuida o microservicios reactivos. Figura 1-5: Caracteŕısticas de un sistema reactivo, y como se relacionan entre śı Programación reactiva En la comunidad Java, el paradigma de la programación reactiva ha logrado cada vez más atención en los últimos años. Las bibliotecas reactivas como Project Reactor y RxJava y la introducción de un estándar reactivo en la API de Java 9 han contribuido al mayor interés en la programación reactiva en Java. Esta programación se trata de flujos de datos y propagación de cambios. Para aplicaciones dirigidas por eventos, este paradigma es adecuado. Sin embargo, centrándose principalmente en el paradigma de la programación reactiva funcional [1, 4]. La programación reactiva reside dentro del paradigma de la programación declarativa. En 1.5 Marco referencial 15 contraste con la programación imperativa, donde el desarrollador usa declaraciones para cambiar el estado de un programa, en la programación declarativa el desarrollador define qué hacer, pero el tiempo de ejecución lo maneja el propio programa [1, 4]. Programación Reactiva vs Sistemas Reactivos La diferencia entre la programación reactiva y los sistemas reactivos están en sus aplicaciones. La programación reactiva se aplica a la lógica interna de los componentes, mientras que los sistemas se aplican a nivel arquitectónico para los sistemas. Las aplicaciones que implementan la programación reactiva son altamente controladas por eventos, lo que significa que son estos los que impulsan la ejecución en lugar de un hilo de ejecución. La programación reactiva facilita el desacoplamiento en el tiempo y, por lo tanto, la concurrencia. Los sistemas reactivos son altamente impulsados por mensajes. Los sistemas facilitaron el acoplamiento en el espacio y por lo tanto la distribución. Figura 1-6: Relación en una implementación del flujo reactivo La diferencia entre ser dirigido por eventos y por mensaje se define en el Reactivo Ma- nifiesto [Web3]. En el manifiesto, el evento controlado se define como oŕıgenes de eventos direccionables y el mensaje se define como destinatarios direccionables. Esto significa que los suscriptores en un sistema controlado por eventos se adjuntan a los editores, mientras que en un sistema dirigido por mensajes, los suscriptores esperan que los mensajes lleguen sin la necesidad de adjuntarlos al editor. 1.5.2. Marco conceptual Paradigma Un paradigma de programación indica un método de realizar cómputos y la manera en que se deben estructurar y organizar las tareas que debe llevar a cabo un programa [8]. Los paradigmas fundamentales están asociados a determinados modelos de cómputo. 16 1 Descripción de la investigación Tambien se asocian a un determinado estilo de programación. Los lenguajes de programación suelen implementar, a menudo de forma parcial, varios pa- radigmas [8]. Figura 1-7: El zoo de los paradigmas Patrón Los patrones son disciplinas de la Ingenieŕıa de Software que facilitan la reutilización del diseño y de la arquitectura. Son soluciones de problemas conocidos en la programación. No es obligatorio usar patrones pero reinventar la rueda en situaciones similares facilitan catálogos de elementos reusables, evitar reiteraciones, formular un vocabulario común entre programadores, estandarizar el diseñoy facilitar el aprendizaje de los nuevos programadores [Web2]. Arquitectura software La arquitectura de software es un tema creciente de la ingenieŕıa de software para ayudar a las personas a resolver problemas. Con él, los diseñadores o gerentes de proyectos tienen la oportunidad de supervisar el estado del software en un alto nivel. Además, la arquitectura del software puede reutilizarse, lo que permite ahorrar enormes costos y reducir los riesgos dentro de los procesos de desarrollo y las actividades posteriores, incluido el diseño de mo- delos, la implementación, las pruebas, la evaluación, el mantenimiento y la evolución [Web1]. 1.6 Metodoloǵıa de la investigación 17 Sin embargo, el seguimiento de la arquitectura del software es dif́ıcil, porque siempre se esconde detrás de lo que se puede tocar. Visualizarlo requiere un profundo conocimiento de la información global de los sistemas, aśı como excelentes habilidades y métodos. Las per- sonas de diferentes organizaciones o empresas utilizan diferentes estrategias para manejarlo, pero la mayoŕıa de ellas tiene algo en común. El resumen y el sol de estas experiencias se han convertido en la base de la ciencia de la arquitectura de software en la actualidad [Web1]. Servicio web Un servicio web realiza una tarea espećıfica o un conjunto de tareas. La descripción de servicio proporciona todos los detalles necesarios para interactuar con el servicio, incluidos los formatos de mensaje (que detallan las operaciones), los protocolos de transporte y la ubicación [Web6]. 1.6. Metodoloǵıa de la investigación Tipo de estudio El nivel de profundidad que aborda este proyecto, es el tipo de confirmatorio. Ya que la intención de este análisis es determinar qué paradigma tiene un mayor rendimiento en la atención de solicitudes en un API Gateway para un tiempo determinado. El nivel en la investigación hoĺıstica es la Integrativa y el holotipo de investigación es confirmatoria . Porque se verificará y demostrará con datos la conclusión final del presente trabajo. Método de investigación En aras de obtención de la respuesta planteada en la formulación del problema, es necesario establecer un procedimiento riguroso de manera organizada. Por lo anterior, se define como método de investigación el Método Cuantitativo, en donde a partir de diversas mediciones en la transaccionalidad del API Gateway, se encontrarán diferencias entre paradigmas de programación. Fuentes y técnicas para recolección de la información Las fuentes a los que se acudió para el marco referencial son: Documentación: Se revisó literatura tanto internet, tesis online, sistema BDigital (Bi- blioteca Digital) de la universidad Distrital Francisco José de Caldas, Trabajos de grado expuestos en RIUD (Repositorio Institucional) de la universidad Distrital Francisco José de Caldas. 18 1 Descripción de la investigación 1.7. Organización del trabajo de grado El trabajo realizado para el presente proyecto inicia con la Contextualización de la in- vestigación, en donde se puede identificar el planteamiento del problema, definición de la justificación, los objetivos para la investigación, hipótesis, marco referencial, metodoloǵıa y estudio de sistemas previos. En una segunda parte, se puede econtrar el Desarrollo de la investigación, la cual la compone los siguientes caṕıtulos: Fase de Análisis: Se realizó identificación de tecnoloǵıas y requerimientos de un Api Gateway. Fase de diseño: Modelamiento de cada Api Gateway mediante UML, y se acompaña el uso del componente en aplicaciones con microservicios mediante el uso de ADM- Archimate. Fase de construcción: Se muestra la implementación de cada uno de los Api Gateway haciendo uso de los microservicios. Fase de pruebas: Se realizan consumos de los servicios expuestos por cada Api Gateway mediante herramientas de análisis de peticiones RestFul. Para el cierre de la investigación, se presenta una muestreo de la recolección de datos para cada Api Gateway, orientado a objetos y reactivo; se presenta el comportamiento de cada Api Gateway mediante gráficas estad́ısticas y se realiza comparación de resultados en peti- ciones atendidas en un lapso de tiempo. Adicionalmente se discute a cerca de los resultados obtenidos, para finalmente concluir nues- tra hipótesis planteada. 1.8. Estudio de sistemas previos Hace aproximadamente un año, el equipo de API de Netflix comenzó a rediseñar la API para mejorar el rendimiento y permitir que los equipos de ingenieŕıa de UI en Netflix optimicen las aplicaciones de cliente para dispositivos espećıficos. Las filosof́ıas del rediseño se introdujeron en una publicación anterior acerca de abarcar las diferencias entre los diferentes clientes y dispositivos [Web5]. Netfilx además de: Disminuir el número de llamados, distribuir el desarrollo de la API, mitigar los riesgos de implementación, Soporta múltiples idiomas, distribuir operaciones, también presentó su arquitectura [Web5]. 1.8 Estudio de sistemas previos 19 Arquitectura Para lograr los objetivos por encima de nuestra arquitectura destilada en algunos puntos clave: Tiempo de ejecución poĺıglota dinámico. capa de servicio totalmente aśıncrono. Modelo de programación reactiva. El siguiente diagrama, Figura 1-8 y las siguientes anotaciones explican la arquitectura: Figura 1-8: Arquitectura en Api de Netflix 1. Endpoints dinámicos Todos los nuevos puntos finales de servicios web ahora se defi- nen dinámicamente en tiempo de ejecución. Cada equipo cliente puede desarrollar, probar, canarear e implementar nuevos puntos finales sin coordinación (a menos que dependan de la nueva funcionalidad de la capa de servicio API subyacente que se muestra en el elemento 5, en cuyo caso tendŕıan que esperar hasta que se implementen los cambios antes de presionar su punto final) [Web5]. 20 1 Descripción de la investigación 2. Administración y gestión de códigos Endpoint El código de punto final se publica en un clúster multirregional de Cassandra (replicado globalmente) a través de una API RESTful Endpoint Management utilizada por los equipos de clientes para administrar sus puntos finales [Web5]. 3. Lenguaje Runtime JVM poĺıglota dinámico Se puede admitir cualquier lenguaje JVM para que cada equipo pueda utilizar el idioma que mejor se adapte a ellos. El len- guaje Groovy JVM fue elegido como nuestro primer idioma compatible. La existencia de funciones de primera clase (cierres), sintaxis de lista / diccionario, rendimiento y capacidad de depuración fueron todos aspectos de nuestra decisión. Además, Groovy proporciona una sintaxis cómoda para una amplia gama de desarrolladores, lo que ayuda a reducir la curva de aprendizaje del primer idioma en la plataforma [Web5]. 4 y 5 API Java Aśıncrona + modelo de programación reactiva Adoptar la concu- rrencia fue un requisito clave para lograr mejoras de rendimiento, pero abstraer los detalles de implementación de ejecución paralela y seguridad de subprocesos de los desarrolladores clientes fue igualmente importante para reducir la complejidad y acelerar su tasa de inno- vación. El primer paso fue hacer que la API de Java fuera totalmente aśıncrona, ya que permite que las implementaciones de los métodos subyacentes controlen si algo se ejecuta simultáneamente o no, sin que cambie el código del cliente. Elegimos un modelo de pro- gramación reactivo con un estilo de programación funcional para manejar la composición y los flujos condicionales de devoluciones de llamada aśıncronas. Nuestra implementación está modelada a partir de Rx Observables [Web5]. 6. Tolerancia a fallos de Hystrix Como hemos descrito en una publicación anterior, todas las llamadas de servicio a los sistemas de back-end se realizan a través de la capa de tolerancia a fallos Hystrix (que se abrió recientemente, junto con su panel de control) que áısla los puntos finales dinámicos y la capa de servicio API de losinevitables fallos que Ocurre mientras se ejecutan miles de millones de llamadas de red cada d́ıa desde la API a los sistemas backend [Web5]. La capa Hystrix es intŕınsecamente multihilo debido a su uso de subprocesos para aislar dependencias y, por lo tanto, se aprovecha para la ejecución simultánea de llamadas de blo- queo a sistemas backend. Estas solicitudes aśıncronas se componen juntas a través del marco reactivo [Web5]. 7. Backend Services y Dependencias La Capa de servicios API abstrae todos los servicios de fondo y dependencias detrás de las fachadas. Como resultado, el código de punto final accede a la “funcionalidad” en lugar de a un “sistema”. Esto nos permite cambiar las implementaciones y la arquitectura subyacentes sin impacto o con un impacto limitado en el código que depende de la API. Por ejemplo, si un sistema backend se divide en 2 servicios diferentes, o 3 se combinan en uno solo, o una llamada de red remota se optimiza en un caché en memoria, ninguno de estos cambios debeŕıa afectar el código del punto final y, por 1.8 Estudio de sistemas previos 21 lo tanto, la capa de servicio API garantiza los modelos de objetos y otros acoplamientos cerrados similares se abstraen y no se les permite “filtrarse” en el código del punto final [Web5]. Parte II Desarrollo de la investigación Caṕıtulo 2 Análisis del sistema En una arquitectura de microservicios, un cliente puede interactuar con más de un servicio de frontEnd. Dado este hecho, ¿cómo sabe un cliente a qué puntos finales llamar? ¿Qué sucede cuando se introducen nuevos servicios o se refactorizan los servicios existentes? ¿Cómo ma- nejan los servicios la terminación SSL, la autenticación y otras inquietudes? El Api Gateway que se propone a continuación puede ayudar a enfrentar estos desaf́ıos. Figura 2-1: Funciones del Api Gateway Un API Gateway se encuentra entre los clientes y los servicios. Actúa como un proxy inverso, enrutando las solicitudes de los clientes a los servicios. También puede realizar varias tareas transversales, como la autenticación, la terminación SSL y la limitación de velocidad. Si no se despliega un API Gateway, los clientes deben enviar las solicitudes directamente a los servicios. 24 2 Análisis del sistema El Gateway ayuda a resolver estos problemas mediante el desacoplamiento de los clien- tes de los servicios. Estos pueden realizar una serie de funciones diferentes, y es posible que no las necesite todas. Las funciones que cumplirán cada Api desarrollado cumplen con los siguientes patrones de diseño que serán los requerimientos: 2.1. Requerimientos Gateway Routing Uso del Gateway como un proxy inverso para enrutar las solicitudes a uno o más servicios de backEnd. La puerta de enlace proporciona un único punto final para los clientes y ayuda a desvincular a los clientes de los servicios. Gateway Aggregation Utiliza el Gateway para agregar varias solicitudes individuales en una sola solicitud. Este patrón se aplica cuando una sola operación requiere llamadas a múltiples servicios backend. El cliente env́ıa una solicitud al Gateway. El Gateway env́ıa solicitudes a los diversos servicios de backEnd, y luego agrega los resultados y los env́ıa de vuelta al cliente. Esto ayuda a reducir el chattiness entre el cliente y el backend. Gateway Offloading Se usa el Gateway para descargar la funcionalidad de los servi- cios individuales a el mismo, en particular las preocupaciones transversales. Puede ser útil consolidar estas funciones en un solo lugar, en lugar de hacer que cada servicio sea responsa- ble de implementarlas. Esto es particularmente cierto para las caracteŕısticas que requieren habilidades especializadas para implementarse correctamente, como la autenticación y la au- torización. Estos son algunos ejemplos de la funcionalidad que se podŕıa descargar en un Gateway: Terminación SSL. Autenticación. Caché de respuestas. Caṕıtulo 3 Diseño de Api Gateway En el presente caṕıtulo se presentan los diseños del API Gateway desarrollados bajo el paradigma orientado a objetos y el reactivo respectivamente. Se hace uso de diagramas que el autor considera representativos para la monograf́ıa. 3.1. Paradigma orientado a objetos En función del desarrollo del Api Gateway usando el paradigma orientado a objetos se usan los diagramas de clases, secuencia y componentes para resaltar su diseño. Figura 3-1: Diagrama de clases Api Gateway con paradigma orientado a objetos 26 3 Diseño de Api Gateway Diagrama de secuencia Figura 3-2: Diagrama de secuencia Api Gateway con paradigma orientado a objetos Diagrama de componentes Figura 3-3: Diagrama de componentes Api Gateway con paradigma orientado a objetos 3.2 Paradigma reactivo 27 3.2. Paradigma reactivo En función del desarrollo del Api Gateway usando el paradigma reactivo se usan los diagra- mas flujos de datos, secuencia. En adición, la figura 3-6 muestra la concurrencia en el Api Gateway reactivo, elemento que no tiene el Api bajo el paradigma orientado a objetos. Figura 3-4: Diagrama de flujo de datos f́ısico Figura 3-5: Diagrama de secuencia Api Gateway con paradigma reactivo 28 3 Diseño de Api Gateway Figura 3-6: Concurrencia api reactivo Caṕıtulo 4 Construcción e Implementación 4.1. Microservicios Aunque los microservicios no hacen parte del análisis de transaccionalidad del presente tra- bajo, son la fuente de datos para cada API Gateway desarrollados. Con el ánimo de conservar la misma fuente de datos y la razón del patrón API Gateway se comenta a continuación su desarrollo: Construcción con JHipster JHipster es una plataforma de desarrollo para generar, desarrollar e implementar aplicacio- nes web Spring Boot + Angular / React / Vue y microservicios Spring [Web10]. El objetivo es generar para usted una aplicación web completa y moderna o una arquitectura de microservicio, unificando: Figura 4-1: Plataforma Jhipster Un Stack de Java robusto y de alto rendimiento en el lado del servidor con Spring Boot. Un frontal moderno, elegante y moderno, con Angular, React y Bootstrap. Una robusta arquitectura de microservicio con JHipster Registry, Netflix OSS, Elastic Stack y Docker. 30 4 Construcción e Implementación Una vez instalado, ver gúıa de instalación en [Web10]; se realizó modelo de entidades del negocio del microservicio; Una caracteŕıtica de Jhipster es generar código a partir de este modelo. Figura 4-2: Ejemplo modelo de entidades microservicio en JDL Studio En https://start.jhipster.tech/jdl-studio/ se puede realizar el archivo .jh, el cual es de gran ayuda para la exposición de un Api RestFul. Implementación con Docker Un contenedor es una unidad estándar de software que empaqueta el código y todas sus dependencias para que la aplicación se ejecute de forma rápida y confiable de un entorno informático a otro. Una imagen de contenedor Docker es un paquete de software liviano, independiente y ejecutable que incluye todo lo necesario para ejecutar una aplicación: códi- go, tiempo de ejecución, herramientas del sistema, bibliotecas del sistema y configuraciones [Web9]. Una vez construido el microservicio, se despliega en una instancia de Jhipster aparte con la intención de que cada microservicio sea modular mediante contenedores Docker. https://start.jhipster.tech/jdl-studio/ 4.1 Microservicios 31 Figura 4-3: Ejemplo lenguaje JDL en modelo de entidades para microservicio Documentación con Swagger Simplifica el desarrollo de API para usuarios, equipos y empresas con el conjunto de herra- mientas de código abierto y profesional de Swagger. Descubre cómo te puede ayudar Swagger [Web15]. Para el ejercicio la documuntación de cada microservicio es como se refleja en la figura 32 4 Construcción e Implementación Figura 4-4: Contenedores docker Figura 4-5: Documentación Swagger para microservicio 4.1 Microservicios 33 Figura 4-6: Documentación detallada Swagger para microservicio 34 4 Construccióne Implementación 4.2. Api Gateway Reactivo 4.2.1. Api Gateway NodeJS NodeJS Concebido como un entorno de ejecución de JavaScript orientado a eventos aśıncronos, Node está diseñado para construir aplicaciones en red escalables. En dichas aplicaciones, se pueden manejar muchas conexiones concurrentes. Por cada conexión el callback será ejecutado, sin embargo si no hay trabajo que hacer Node estará durmiendo [Web7]. ExpressJS Express es una infraestructura de aplicaciones web Node.js mı́nima y flexible que proporcio- na un conjunto sólido de caracteŕısticas para las aplicaciones web y móviles [Web8]. Con miles de métodos de programa de utilidad HTTP y middleware a su disposición, la creación de una API sólida es rápida y sencilla [Web8]. Aprovechando esta tecnoloǵıa se creó el Api Gateway nodeJS haciendo uso del siguiente código, Figura 4-7 - Figura 4-10: Figura 4-7: Archivo app.js, ejecución principal del Api Gateway 4.2 Api Gateway Reactivo 35 Figura 4-8: Archivo router.js, contenedor de los microservicios que se desean consumir Figura 4-9: Gateway adapter, cada microservicio realiza su uso 4.2.2. Api Gateway Spring Cloud Este proyecto proporciona una biblioteca para construir una API Gateway sobre Spring MVC. Spring Cloud Gateway tiene como objetivo proporcionar una forma sencilla y eficaz de enrutar a las API y brindarles preocupaciones transversales, como la seguridad, monitoreo / métrica y la resistencia [Web12]. Servidor Eureka Eureka Server es una aplicación que contiene la información sobre todas las aplicaciones de servicio al cliente. Cada Microservicio se registrará en el servidor Eureka y el servidor Eureka conoce todas las aplicaciones cliente que se ejecutan en cada puerto y dirección IP. Eureka 36 4 Construcción e Implementación Figura 4-10: Configuración de enrutamiento para cada microservicio, por servicio Server también se conoce como Discovery Server [Web16]. El servidor eureka desarrollado para el funcinamiento del api gateway está bajo el siguiente código (figura 4-11 - figura 4-13): Por otro lado el Api Gateway con spring cloud, se desarrolló bajo la siguientes sentencias (figura 4-14 - figura 4-16): 4.2 Api Gateway Reactivo 37 Figura 4-11: Configuración de archivo pom.xml del servidor eureka Figura 4-12: Configuración general del servidor 38 4 Construcción e Implementación Figura 4-13: Clase principal de Spring boot, servidor eureka Figura 4-14: Dependencias pom.xml Api Gateway con spring cloud 4.2 Api Gateway Reactivo 39 Figura 4-15: Otras dependencias pom.xml Api Gateway con spring cloud Figura 4-16: Gateway Routing con spring cloud 40 4 Construcción e Implementación 4.3. Api Gateway Orientado a Objetos Spring boot SpringBoot nace con la intención de simplificar los siguientes pasos: seleccionar los jar con maven y despliegues en servidor; con la intención de que el programador se centre en el desarrollo de la aplicación [Web4]. A continuación se incluye código en spring boot que hace referencia al Api Gateway orien- tado a objetos: Figura 4-17: Servicio web, punto de entrada Api Gateway 4.4 Despliegue final 41 Figura 4-18: Acción para la optención de url Figura 4-19: Transformador de url a request Figura 4-20: Consumo de servicio RestFul, microservicio 4.4. Despliegue final 42 4 Construcción e Implementación Figura 4-21: Diagrama de despliegue de componentes del análisis Caṕıtulo 5 ADM-Archimate Archimate 2.1 facilita el modelado de la arquitectura empresarial, permitiendo bosquejar la organización desde diversos puntos de vista donde se reflejan tanto los involucrados en el negocio, la infraestructura y la misma solución como los diferentes componentes, dando una visión general que describe a la perfección la organización y su solución informática. El presente trabajo es del interés para la empresa Jirka IT Solutions, el cual sin nin- guna duda le sacará provecho para sus desarrollos futuros. Por esta razón el ejercicio de arquitectura empresarial se realizará sobre esta compañ́ıa 5.1. Organización Jirka IT Solutions SAS Jirka es una compañ́ıa especializada en servicios IT de desarrollo de software que ofrecemos soluciones integrales con los más altos estándares tecnológicos del sector. Nos caracterizamos por la investigación e innovación al fin de promover el desarrollo de soluciones que ayuden a la transformación de la sociedad. Figura 5-1: Logo Jirka It Solutions SAS 44 5 ADM-Archimate Misión Jirka es una compañ́ıa especializada en servicios IT de desarrollo de software y Software Factory que ofrece soluciones integrales con los más altos estándares tecnológicos del sec- tor. Nos caracterizamos por la investigación e innovación al fin de promover el desarrollo de soluciones que ayuden a la transformación de la sociedad, por ello, estamos comprometidos con la excelencia, la responsabilidad y la calidad, de la mano con nuestro Talento Humano, quienes poseen una alta formación profesional enmarcada en las excelentes relaciones hu- manas, con el objetivo de dar respuesta a las necesidades de nuestros clientes, proveedores y colaboradores; conocemos la satisfacción que ofrece el éxito y estamos comprometidos en lograrlo. Visión A 2020, ser la compañ́ıa ĺıder en servicios IT de desarrollo de software y Software Factory del Mercado, con casos de éxitos que posicionan a nuestros clientes como referentes de la adop- ción de nuestras soluciones tecnológicas, enmarcadas en los más altos estándares del sector; demostrando siempre nuestro compromiso social soportado en la investigación e innovación, de la mano con la formación de nuestro Talento Humano para afrontar los retos que diaria- mente impone la excelencia, construyendo relaciones basadas en la ética, la responsabilidad y la confianza. 5.2. Punto de vista del negocio Los puntos de vista del negocio visualizan y definen los procesos de negocio, servicios y funciones de la organización, los cuales se ofrecen a los clientes externos y son generados por la organización por medio de procesos de negocios, a través de actores y sus diferentes roles de participación. Punto de vista organizacional Este punto de vista se centra en la organización interna de la empresa, una red de empresas, un departamento u otra entidad organizacional. Se pueden modelar diagramas de bloques anidados o de una forma más tradicional como un organigrama. Estos diagramas ayudan en la visualización e identificación de las responsabilidades, jerarqúıas y competencias de una organización. Punto de vista cooperación de actor Este punto de vista se centra en las relaciones de cooperación entre los actores y su entorno, para ello se puede utilizar el diagrama de contexto, el cual permite exponer la organización 5.2 Punto de vista del negocio 45 Figura 5-2: Metamodelo punto de vista de organización Figura 5-3: Punto de vista de organización en un ambiente de entidades externas tales como clientes, proveedores y demás colabora- dores del negocio. Estos diagramas ayudan a determinar las dependencias externas y sus colaboraciones, y a su vez visualizar la cadena de valor o la red de actores en la cual opera. Figura 5-4: Metamodelo punto de vista cooperación de actor 46 5 ADM-Archimate Figura 5-5: Punto de vista cooperación de actor Punto de vista de función del negocio Este punto de vista visualiza las principales funciones de negocio de la organización y las relaciones de los flujos de información, el valor y los bienes entre ellos. Estas funciones per- miten representar las caracteŕısticas de más estabilidad en una empresa en función de su actividad principal, sin importar los cambios de la organización o desarrollos tecnológicos. Figura 5-6: Metamodelo punto de vista de función de negocio Punto de vista proceso del negocio Este punto de vista visualiza una estructura de alto nivel y la composición de uno o más procesos de negocio. Permite mostrarlos servicios a través de los procesos que contribuyen 5.2 Punto de vista del negocio 47 Figura 5-7: Punto de vista de función de negocio al producto final de la organización, aśı como los roles en los procesos y las responsabilidades de los actores implicados. Figura 5-8: Metamodelo punto de vista de proceso de negocio 48 5 ADM-Archimate Figura 5-9: Punto de vista de proceso de negocio Punto de vista cooperación proceso del negocio Este punto de vista visualiza la relación entre los procesos de negocio y su entorno, aśı como las dependencias entre estos mismos. Sus caracteŕısticas son: Figura 5-10: Metamodelo punto de vista de cooperación de proceso de negocio 5.2 Punto de vista del negocio 49 Figura 5-11: Punto de vista de cooperación de proceso de negocio Punto de vista de producto Este punto de vista visualiza el valor de los productos hacia el cliente o las partes externas implicadas, muestra la composición de los productos en función de los servicios, contratos o acuerdos. Visualiza las interfaces en las que el producto es presentado y los eventos asociados con el producto. 50 5 ADM-Archimate Figura 5-12: Metamodelo punto vista de producto Figura 5-13: Punto vista de producto 5.3. Punto de vista de la aplicación Los puntos de vista de la aplicación visualizan y definen las aplicaciones de software que gestionan los componentes del negocio y los servicios, los componentes reusables, aśı como las interfaces que relacionan y comunican los componentes del negocio. 5.3 Punto de vista de la aplicación 51 Punto de vista de comportamiento de aplicación Este punto de vista visualiza y define el comportamiento a nivel interno de las aplicaciones, se utiliza para modelar y diseñar el comportamiento de las aplicaciones o componentes y lograr identificar el proceso funcional entre las aplicaciones. Figura 5-14: Metamodelo punto de vista de comportamiento de aplicación Figura 5-15: Punto de vista de comportamiento de aplicación 52 5 ADM-Archimate Punto de vista de cooperación de aplicación Este punto de vista visualiza y define las relaciones de los componentes a través del flujo de información de los servicios ofrecidos o usados por la organización. Permite visualizar la cooperación de los servicios que se unen para la ejecución de los procesos del negocio. Figura 5-16: Metamodelo punto de vista de cooperación de aplicación Figura 5-17: Punto de vista de cooperación de aplicación Punto de vista de estructura de aplicación Este punto de vista visualiza la estructura de las aplicaciones o de los componentes, permite modelar y diseñar estas estructuras de las aplicaciones o componentes y su información 5.3 Punto de vista de la aplicación 53 asociada. Figura 5-18: Metamodelo punto de vista de estructura de aplicación Figura 5-19: Punto de vista de estructura de aplicación Punto de vista de uso de aplicación Este punto de vista visualiza y define el uso de las aplicaciones para soportar los procesos del negocio, y como se deben utilizar por otras aplicaciones. Permite modelar y diseñar los servicios de los procesos de negocio y demás aplicaciones de la organización. 54 5 ADM-Archimate Figura 5-20: Metamodelo punto de vista de uso de aplicación Figura 5-21: Punto de vista de uso de aplicación 5.4. Punto de vista tecnológico Los puntos de vista tecnológicos visualizan y definen la infraestructura que soporta y permite la comunicación de la capa de aplicación, dispone de servicios de infraestructura hardware y software para el despliegue de las aplicaciones en la organización. Punto de vista de infraestructura Este punto de vista visualiza y define el software y hardware que soportan las aplicaciones, a través de dispositivos f́ısicos, redes o sistemas de software. 5.4 Punto de vista tecnológico 55 Figura 5-22: Metamodelo punto de vista de infraestructura Figura 5-23: Punto de vista de infraestructura Punto de vista de uso de infraestructura Este punto de vista visualiza y define como las aplicaciones son soportadas por la infraestruc- tura de software y hardware, los cuales permiten el análisis de rendimiento y escalabilidad, logrando obtener requerimientos de mejora y calidad en la infraestructura. 56 5 ADM-Archimate Figura 5-24: Metamodelo punto de vista de uso de infraestructura Figura 5-25: Punto de vista de uso de infraestructura Punto de vista de organización e implementación Este punto de vista visualiza y define como las aplicaciones son integradas en la infraestruc- tura, a través del mapeo de aplicaciones (lógicas) y componentes (f́ısicos). Permite el análisis de rendimiento y escalabilidad por medio de la relación que existe de las aplicaciones y la infraestructura. 5.4 Punto de vista tecnológico 57 Figura 5-26: Metamodelo punto de vista de organización e implementación Figura 5-27: Punto de vista de organización e implementación Punto de vista de estructura de información Este punto de vista visualiza y define la estructura de la información usada en la organización, proceso o aplicación en función de los tipos de datos o las estructuras de clases (orientado a objetos). 58 5 ADM-Archimate Figura 5-28: Metamodelo punto de vista de Estructura de Información Figura 5-29: Punto de vista de Estructura de Información Punto de vista de realización del servicio Este punto de vista visualiza y define como los servicios del negocio son ejecutados por procesos subyacentes, a través de un puente de comunicación entre los puntos de vista de negocio y los puntos de vista de procesos de negocio. Punto de vista de capas 5.4 Punto de vista tecnológico 59 Figura 5-30: Metamodelo punto de vista de Realización del Servicio Figura 5-31: Punto de vista de Realización del Servicio 60 5 ADM-Archimate Figura 5-32: Punto de vista de Capas 5.5 Punto de vista motivacional 61 5.5. Punto de vista motivacional Punto de vista de los skateholder Este punto de vista visualiza y define los stakeholders, los manejadores internos y externos de cambio, sus fortalezas, debilidades, oportunidades y amenazas (DOFA). Permite el proceso de ingenieŕıa de requerimientos, el refinamiento de objetivos, contribución y análisis de conflictos derivados de los objetivos. Figura 5-33: Metamodelo punto de vista de stakeholder Figura 5-34: Punto de vista de stakeholder Punto de vista de realización de objetivos Este punto de vista visualiza y define el proceso de mejorar los objetivos en objetivos más concretos que permitan generar requerimientos o restricciones que ayuden en el cumplimiento 62 5 ADM-Archimate de los objetivos planteados. Estas mejoras se modelan a través de la relación de realización. Figura 5-35: Metamodelo punto de vista de realización de objetivos Figura 5-36: Punto de vista de realización de objetivos Punto de Vista de Contribución El punto de vista de la contribución al objetivo permite a un diseñador o analista modelar las relaciones de influencia entre los objetivos y los requisitos. Las vistas resultantes se pueden utilizar para analizar el impacto que las metas tienen entre śı o para detectar conflictos entre las metas de las partes interesadas. 5.5 Punto de vista motivacional 63 Figura 5-37: Metamodelo punto de vista de contribución Figura 5-38: Metamodelo punto de vista de contribución Punto de vista de principios Este punto de vista visualiza y define los procesos más importantes para el diseño a mano y los objetivos que conllevan a estos principios. Además permite modelar las relaciones de los principios con sus obetivos. 64 5 ADM-Archimate Figura 5-39: Metamodelo punto de vista de principios Figura 5-40: Ejemplo punto de vista de principios Punto de vista de realización de requerimientos Este punto de vista visualiza y define la relación de requerimientos con los actores de negocio, los servicios, procesos y aplicaciones de negocio. Figura 5-41: Metamodelo punto de vista de realización de Requerimientos5.5 Punto de vista motivacional 65 Figura 5-42: Ejemplo punto de vista de realización de requerimientos Punto de vista de motivación Este punto de vista visualiza y define la revisión de los aspectos motivacionales relacionados con los stakeholders, sus principios primarios, aplicados y los requerimientos más relevantes de los servicios, procesos, aplicaciones y objetivos del negocio. Figura 5-43: Metamodelo punto de vista de motivación 66 5 ADM-Archimate Figura 5-44: Ejemplo punto de vista de realización de requerimientos 5.6. Punto de vista implementación y migración Punto de vista de proyecto Este punto de vista visualiza y define los cambios en la arquitectura del proceso de migración desde un estado actual de la arquitectura empresarial a un estado objetivo de la arquitectura empresarial, esta migración aporta de forma significativa en el proceso de crecimiento de la estrategia y las decisiones de los procesos de realización. Figura 5-45: Metamodelo punto de vista de proyecto 5.6 Punto de vista implementación y migración 67 Figura 5-46: Ejemplo punto de vista de proyecto Punto de vista de migración Este punto de vista visualiza y define las caracteŕısticas para la transición de una arquitec- tura existente a una arquitectura deseada. La platea es el estado de la arquitectura que tiene un un tiempo limitado. Figura 5-47: Metamodelo punto de vista de migración Punto de vista de migración e implementación Este punto de vista visualiza y define las relaciones entre los programas y proyectos con la arquitectura que ellas implementan. Permite modelar el alcance de los programas, proyec- tos y actividades en función de la platea o los artefactos de arquitectura afectada. Además 68 5 ADM-Archimate Figura 5-48: Ejemplo punto de vista de migración relaciona objetivos de negocio a través de los programas y proyectos de la arquitectura. Figura 5-49: Metamodelo punto de vista de migración e implementación 5.6 Punto de vista implementación y migración 69 Figura 5-50: Punto de Vista de Migración e Implementación Parte III Cierre de la investigación Caṕıtulo 6 Resultados y discusión Los resultados de este trabajo se hallaron con la ayuda de la aplicación Apache JMeter, en donde se realizó cuatro (4) series de env́ıo de peticiones a cada Api Gateway. Las series se estableció con las siguientes peticiones: 100, 500, 1.000 y 5.000 request. Apache JMeter La aplicación Apache JMeter es un software de cd́igo abierto, una aplicación Java 100 % pura diseñada para cargar el comportamiento funcional de la prueba y medir el rendimiento. Ori- ginalmente fue diseñado para probar aplicaciones web, pero desde entonces se ha expandido a otras funciones de prueba. Figura 6-1: Apache JMeter Apache JMeter se puede usar para probar el rendimiento tanto en recursos estáticos como dinámicos, aplicaciones dinámicas web. Se puede usar para simular una carga pesada en un servidor, grupo de servidores, red u objeto para probar su resistencia o para analizar el rendimiento general bajo diferentes tipos de carga. 72 6 Resultados y discusión Resultados con 100 Peticiones http En la figura 6-2 muestra el comportamiento de cada Api Gateway en relación al tiempo de contestación de 100 peticiones. Figura 6-2: Respuesta de cada Api Gateway Promedio Mı́nimo Máximo Gateway NodeJS 126 4 2161 Gateway Spring Cloud 10 5 110 Gateway Spring Boot 15 9 45 Cuadro 6-1: Resumen de transaccionalidad para 100 peticiones http En la obtención de resultados, se evidencia que el Api con mayor transaccionalidad en prome- dio para 100 peticiones realizadas es el Gateway desarrollado con Spring Cloud. (ver figura 6-3) En adición, el Api que contestó con mayor velocidad frente a los demás fue el Api Ga- teway con nodeJS. (ver figura 6-4) 73 Figura 6-3: Promedio tiempos de respuesta para 100 peticiones Figura 6-4: Tiempos Mı́nimo de respuesta para 100 peticiones También fue el mismo Api que presentó menor transaccionalidad para una petición. (ver figura 6-5) 74 6 Resultados y discusión Figura 6-5: Tiempos Máximo de respuesta para 100 peticiones Resultados con 500 Peticiones http La figura 6-6 detalla el comportamiento de 500 peticiones env́ıadas a cada uno de los Api Gateway. Promedio Mı́nimo Máximo Gateway NodeJS 256 22 1042 Gateway Spring Cloud 213 9 778 Gateway Spring Boot 185 18 850 Cuadro 6-2: Resumen de transaccionalidad para 500 peticiones http De la figura 6-7, se puede ver que la tendencia es que el API Gateway orientado a objetos con Spring Boot, es el que tiene mayor transaccionalidad. Por otro lado, el API Gateway que presentó la respuesta en el menor tiempo posible, fue el desarrollado con tecnoloǵıa Spring Cloud Gateway. (Ver figura 6-8) Finalmente para 500 peticiones, el API Gateway que que vuelve a presentar mayor tiempo en una de las respuestas el desarrollado con NodeJS, ver figura (6-9) 75 Figura 6-6: Respuesta de cada Api Gateway Figura 6-7: Promedio tiempos de respuesta para 500 peticiones 76 6 Resultados y discusión Figura 6-8: Tiempos Mı́nimo de respuesta para 500 peticiones Figura 6-9: Tiempos Máximo de respuesta para 500 peticiones 77 Resultados con 1.000 Peticiones http La figura 6-10 muestra los tiempos de respuesta para 1000 peticiones env́ıadas a cada uno de los Api Gateway. Figura 6-10: Respuesta de cada Api Gateway Promedio Mı́nimo Máximo Gateway NodeJS 1641 8 3044 Gateway Spring Cloud 1510 9 3373 Gateway Spring Boot 2124 46 3691 Cuadro 6-3: Resumen de transaccionalidad para 1.000 peticiones http De las métricas obtenidas están muy similares pero se puede determinar que el API Gateway empezó a tener tendencia lineal. Los API’s Gateways que representan al paradigma reactivo, son los que presentarón ma- yor transaccionalidad. (ver figura 6-11 - 6-13) 78 6 Resultados y discusión Figura 6-11: Promedio tiempos de respuesta para 1.000 peticiones Figura 6-12: Tiempos Mı́nimo de respuesta para 1.000 peticiones 79 Figura 6-13: Tiempos Máximo de respuesta para 1.000 peticiones 80 6 Resultados y discusión Resultados con 5.000 Peticiones http Según los datos arrojados, se muestra en la figura 6-14 los tiempos de respuesta para 5.000 peticiones env́ıadas a cada uno de los Api Gateway. Figura 6-14: Respuesta de cada Api Gateway Promedio Mı́nimo Máximo Gateway NodeJS 2972 35 6483 Gateway Spring Cloud 466 4 2401 Gateway Spring Boot 1474 5 6603 Cuadro 6-4: Resumen de transaccionalidad para 5.000 peticiones http Aunque en las figuras 6-15, 6-16, 6-17 el API Gateway desarrollado con NodeJS, presen- ta una baja transaccionalidad; en la figura 6-14 muestra la siguiente tendencia: a mayor número de peticiones empieza a decrecer los tiempos de respuesta, caso contrario pasa con el desarrollo de Spring Boot, el cual empieza a formar tendencia lineal a mayor número de peticiones. Finalmente el desarrollo con Spring Cloud Gateway, es el que tiene la mayor transaccio- nalidad, es decir que los tiempos de respuesta son menores ante un número elevado de peticiones. (ver figura 6-6) 81 Figura 6-15: Promedio tiempos de respuesta para 5.000 peticiones Figura 6-16: Tiempos Mı́nimo de respuesta para 5.000 peticiones 82 6 Resultados y discusión Figura 6-17: Tiempos Máximo de respuesta para 5.000 peticiones Caṕıtulo 7 Conclusiones 7.1. Verificación, contraste y evaluación de los objeti- vos A continuación se presentan algunas reflexiones que a partir del desarrollo del presente trabajo se generaron, se realiza un análisis de sus objetivos. Analizando la transaccionalidad de un Api Gateway desarrollado con el paradigma orientado a objetos frente al paradigma reactivo, se logra determinar que gracias a la arquitectura aśıncrona del paradigma, el API Gateway que tiene mayor transacciona- lidad concurrente es el desarrollado con programación reactiva. El paradigma orientado a objetos con Spring Boot, es una buena alternativa para hacer software en donde el dominio
Compartir