Documento de arquitectura ajustado S7 - TheCodeTeamUni/documentacion-proyecto GitHub Wiki
a) Vista Funcional
Detalles y Flujos de Control
Como se puede observar en la imagen de los detalles de los componentes, ABC Jobs ha sido diseñado siguiendo una arquitectura de microservicios que permite un alto grado de modularidad y escalabilidad. En esta arquitectura, existen diferentes tipos de comunicaciones entre los componentes que desempeñan un papel crucial en la funcionalidad del sistema.
La comunicación entre el sistema ABC Jobs y los servicios externos se realizará a través de APIs HTTP, lo que garantiza una interacción eficiente y estandarizada con otras aplicaciones y sistemas. Esto permite que ABC Jobs se integre fácilmente con diversas fuentes de datos y servicios externos.
Por otro lado, hemos decidido retirar la cola de mensajería en los componentes "Candidatos," "Empresas" y "Evaluaciones" y ahora se comunicarán de forma sincrónica con el integrador de servicios como lo hacen los componentes de "Administrativo", "Proyectos" y "Usuarios". Cada uno de estos componentes o microservicios tendrá su propia base de datos independiente para gestionar y almacenar datos relacionados con sus responsabilidades específicas. Esta arquitectura de bases de datos independientes contribuye a la escalabilidad y aislamiento de datos, lo que es esencial para garantizar la integridad de la información y la capacidad de escalar cada componente de manera independiente.
Es importante destacar que el componente de "Emparejamiento" no contará con una base de datos propia, por tanto este microservicio depende de la información almacenada en los demás componentes que recibe a través del Orquestador por medio de una cola de mensajes para realizar sus funciones de emparejamiento de candidatos con proyectos.
Esta arquitectura de comunicación y bases de datos permite a ABC Jobs funcionar de manera eficiente, escalable y segura, cumpliendo con los atributos de calidad priorizados, como la escalabilidad, la integridad de la información y la disponibilidad del sistema. Además, la comunicación asincrónica y síncrona se utiliza estratégicamente según las necesidades de cada componente para optimizar el rendimiento y la eficacia general del sistema.
Tanto el componente web como la aplicación móvil de ABC Jobs se comunicarán de manera eficiente a través de APIs con el orquestador, que actuará como el punto de entrada central al sistema. Esta arquitectura basada en APIs permitirá que los usuarios interactúen de manera efectiva con la plataforma desde múltiples dispositivos y plataformas.
Conectores con responsabilidades definidas
En la arquitectura para el sistema ABC Jobs, los conectores desempeñan un papel fundamental para permitir la comunicación y la interacción entre los diversos componentes y servicios del sistema, a continuación se describen las clase de conectores involucrados en la arquitectura propuesta:
- APIs de Microservicios: Cada microservicio (administrativo, proyectos, candidatos, empresas, evaluaciones, emparejamiento) debe exponer una API que permita a otros componentes interactuar con ellos. Estas APIs son esenciales para acceder a las funcionalidades y datos de cada microservicio.
- API de Integración de servicios: El microservicio de orquestación actúa como un punto de entrada principal para la interacción con otros microservicios. Utiliza APIs para comunicarse y coordinar las operaciones entre los microservicios individuales.
- APIs de Integración Externa: Para la comunicación con sistemas externos, como Capacitaciones, el sistema utiliza APIs para intercambiar datos y gestionar proyectos, perfiles de empleados, etc.
- Colas de Mensajes entre el Orquestador y Microservicios específicos : El microservicio de orquestación utiliza colas de mensajes para enviar solicitudes a los microservicios candidatos, empresas, evaluaciones, emparejamiento y recibir respuestas. Esto garantiza una comunicación confiable y permite el control de flujo entre los servicios.
- Balanceador de Carga para Microservicios: asegura la distribución adecuada de las solicitudes entre las instancias de microservicios en diferentes zonas de disponibilidad.
- Interfaz Web y móvil: tanto la interfaz web como móvil utilizan conectores internos para interactuar con la Api del servicio de orquestación o el balanceador de cargas. Los conectores en el código de Angular y de una app nativa Android facilitan la comunicación y presentación de datos desde los microservicios a través de la interfaz de usuario.
- Conectores de Bases de Datos: Los microservicios y otros componentes necesitan de conectores para acceder a las bases de datos que almacenan información sobre candidatos, proyectos, empresas y otras entidades relacionadas.
b) Vista de despliegue
En el diagrama de despliegue que se presenta a continuación, se exhibe la asignación estratégica de los diversos componentes del sistema a los nodos de ejecución correspondientes. Este diagrama proporciona una representación visual que permite entender cómo se distribuyen y ejecutan los diferentes elementos del sistema en su entorno operativo
Así mismo, el diagrama siguiente ilustra cómo se despliegan los componentes del sistema en un entorno de AWS (Amazon Web Services), empleando tecnologías que permiten adecuarse a las necesidades específicas del sistema. Este diagrama ofrece una visión de la infraestructura en la nube utilizada, destacando cómo se han configurado los recursos en AWS para optimizar la escalabilidad, la integración de la información y la disponibilidad.
También podemos observar cómo tanto la aplicación web como la aplicación móvil se conectan a través del balanceador de carga, que se encarga de distribuir la carga entre dos zonas de disponibilidad. Cada zona de disponibilidad replica los componentes de la aplicación para garantizar la disponibilidad y redundancia del sistema. Esta arquitectura proporciona una alta disponibilidad y escalabilidad al distribuir la carga de manera equitativa y permitir la replicación de componentes en múltiples zonas de disponibilidad. De esta manera, se asegura que el sistema sea resistente a fallos y capaz de manejar un alto volumen de tráfico de usuarios."
c) Vista de Información
Estrategia de Replicación
Con esta estrategia se busca los siguientes objetivos:
- Garantizar la alta disponibilidad, rendimiento y escalabilidad del sistema.
- Proporcionar redundancia de datos para mitigar posibles fallos.
- Distribuir de manera equitativa las solicitudes entrantes entre múltiples nodos del sistema.
Para el alcance de los objetivos anteriormente propuestos se consideraran los siguiente puntos dentro de la estrategia de replicación:
- Los datos que incluyen información personal, técnica y de evaluaciones, se replican en múltiples nodos geográficamente distribuidos.
- Se implementa una estrategia de replicación activa-activa para los datos, lo que permite que todos los nodos respondan tanto a solicitudes de lectura como de escritura.
- El balanceador de cargas se configura para distribuir de manera equitativa las solicitudes entrantes entre los nodos replicados, mejorando así el rendimiento y la disponibilidad de los datos.
- Se utiliza información de salud del nodo para tomar decisiones de enrutamiento inteligentes y garantizar una distribución equitativa de la carga de trabajo.
- Para reducir la latencia y mejorar el rendimiento, el balanceador de cargas utiliza el enrutamiento geográfico para dirigir a los usuarios a los nodos más cercanos a su ubicación geográfica. Esto garantiza que los usuarios tengan acceso a los datos y servicios de manera rápida y eficiente.
d) Patrones de diseño
Estilo de Arquitectura: Microservicios
- En la arquitectura de ABC Jobs, se ha adoptado el estilo de microservicios para dividir la aplicación en una colección de servicios pequeños e independientes en lugar de una única aplicación monolítica.
- Cada microservicio se enfoca en una tarea específica o un dominio del negocio, lo que permite una mayor modularidad y desacoplamiento.
Al momento de priorizar los Atributos de Calidad (ASRs) de Escalabilidad e Integridad de la Información, podemos identificar las siguientes ventajas al utilizar el estilo arquitectónico de microservicios:
Escalabilidad
- La arquitectura de microservicios de ABC Jobs permite la escalabilidad tanto horizontal como vertical. Los microservicios pueden escalarse de forma independiente según la demanda, lo que garantiza un uso eficiente de los recursos y un rendimiento óptimo.
- La distribución geográfica de los microservicios y la capacidad de agregar nodos de servicio de manera dinámica permiten manejar un crecimiento significativo en el número de usuarios y empresas afiliadas.
- El balanceador de cargas se utiliza para distribuir de manera equitativa las solicitudes entre los microservicios, lo que contribuye a la escalabilidad y evita la sobrecarga de un nodo específico.
Integridad de Datos
- La replicación de datos se utiliza para garantizar la integridad de la información crítica. Los datos de usuarios, candidatos, proyectos y empresas se replican en múltiples nodos, lo que proporciona redundancia y previene la pérdida de datos en caso de fallos.
- La estrategia de replicación para datos sensibles, como proyectos y empresas, garantiza que las operaciones de escritura se realicen en un nodo activo y autorizado, lo que contribuye a mantener la integridad de los datos.
- La comunicación asincrónica a través de colas de mensajes para gestionar evaluaciones y resultados de pruebas técnicas ayuda a preservar la coherencia de los datos y a asegurar que no se produzcan pérdidas de información crítica.
Disponibilidad
- La arquitectura de microservicios y la replicación de datos se combinan para proporcionar alta disponibilidad. Los microservicios se pueden escalar y desplegar independientemente, lo que reduce la posibilidad de tiempos de inactividad debido a actualizaciones o fallos en un servicio específico.
- En caso de falla de un nodo, el balanceador de cargas redirige las solicitudes a otros nodos disponibles, lo que garantiza la continuidad del servicio y la alta disponibilidad de datos.
- La distribución geográfica de los nodos y la replicación de datos también contribuyen a la disponibilidad global, permitiendo que los usuarios de todo el mundo accedan a datos y servicios sin interrupciones significativas.
Tácticas de Arquitectura para ABC Jobs
-
Replicación de Datos: La replicación de datos se utiliza para abordar la disponibilidad y la integridad de datos. Al replicar información crítica en múltiples nodos geográficamente distribuidos, se garantiza que los datos estén disponibles incluso en caso de fallos y se mejora la integridad de la información.
-
Balanceador de Cargas: El uso de un balanceador de cargas es una táctica que contribuye a la escalabilidad y la distribución equitativa de la carga de trabajo. El balanceador dirige las solicitudes entrantes a los nodos disponibles de manera uniforme, lo que mejora el rendimiento y la escalabilidad del sistema.
-
Comunicación Asincrónica con Colas de Mensajes: La comunicación asincrónica a través de colas de mensajes se utiliza para mejorar la tolerancia a fallos y la disponibilidad. Permite que los microservicios gestionen las solicitudes y los resultados de pruebas técnicas de manera eficiente, evitando bloqueos y reduciendo la latencia.
Patrones de Arquitectura para ABC Jobs
-
Distribución Geográfica: La distribución geográfica de los nodos y microservicios permite que los usuarios de todo el mundo accedan a los servicios de manera eficiente y mejora la disponibilidad y la latencia.
-
Modelo-Vista-Vista-Modelo (MVVM): Tanto las vistas web y móvil dentro de la arquitectura utilizan este patrón lo que permite separar la lógica de presentación de la lógica de negocio, además la estructura de MVVM facilita la mantenibilidad del sistema a medida que crece y evoluciona. Los componentes son independientes y se pueden agregar o modificar sin afectar otras partes de la aplicación.
-
Database per Service: este patrón en ABC Jobs contribuye significativamente a la escalabilidad, el aislamiento de datos y la integridad de los datos, abordando así los ASRs priorizados en el diseño del sistema. Cada servicio tiene su propia base de datos dedicada, lo que permite una gestión más eficiente, una escalabilidad independiente y un mayor control sobre la integridad de los datos.