Skip to main content
Version: 1,0

Manual de Arquitectura

Tipo de arquitectura de software​

Arquitectura elegida: Arquitectura multiserver


Desglose de arquitectura​

Escribir el desglose de los componentes de arquitectura.

La arquitectura se compone de capas principales:

  • Frontend: Flutter (Dart)
  • Backend: (Node-express)
  • Servicios AWS: (S3, EC2)
  • Base de datos: (MySQL)

Diagrama de Despliegue

alt text


Frontend​

Objetivo​

Desglose del componente Frontend de la arquitectura.

  • Interfaz de usuario para el registro, el tracking y el analisis de charolas (cajas) de Zuustento

Tecnologías​

Escribir todas las tecnologías que se usarán para el frontend (Frameworks de diseño, tecnologías para consumir APIs).

  • Framework principal: Flutter (Dart)
  • Consumo de APIs: HTTP package, Postman para manejo de endpoints

Características​

  • Panel de registro
    • Formulario de registro de charola
    • Eliminar charola
    • Modificar charola
    • Consultar datos de la charola
  • Inicio de sesion
  • Tracking de charolas
  • Analsiis de charolas
    • Graficos de historial de charolas

Despliegue de su frontend​

Donde se hosteará su frontend.

El frontend no estará hosteado.​

Backend​

Objetivo​

  • Realizar el manejo de peticiones y consumo de servicios para cada una de las funcionalidades del sistema de Zuustento.

Tecnologías​

Escribir las tecnologías que se usarán para crear el backend.

  • Node.JS + Express.JS para construir la API
  • NPM para el manejo de dependencias
  • JWT para manejar la autenticación
  • PM2 para administrar procesos en producción

Características​

Agregar las características del backend de su proyecto.

  • API REST
    • Se definen endpoints para el consumo de servicios
    • Uso de middlewares para proteger las rutas según el rol del usuario
  • Dependencias
    • Uso de NPM para manejar las paqueterias de Node
  • RBAC y autenticación
    • Uso de JWT para manejar las sesiones

Despliegue​

  • AWS EC2 para el despliegue del backend.

Endpoints Principales​

  • Usar Swagger UI para documentar endpoints.

Servicios de infraestructura​

Objetivo​

Proveer infraestructura escalable y segura para la aplicación.

Servicios​

Escribe tu servicio a utilizar, justificación técnica breve de la elección del servicio y alternativas consideradas.

  • S3 de Amazon
    • El socio ya contaba con servicios de AWS y nos dará acceso a los mismos.

Alternativas:

  • Azure (Se descartó)

Beneficios de la arquitectura seleccionada​

Redactar los beneficios de la arquitectura seleccionada.

  • Desarrollo más seguro
  • Resiliencia
  • Agilidad

Propuestas alternativas

Se evaluaron las siguientes opciones

Monolítica​

Definición​

Con esta arquitectura todas las partes del sistema se encuentran definidas en un único código base y se ejecutan en un solo proceso.

Características​

  • Interdependencia: Al estar todo definido dentro de un mismo código, todos los elementos del mismo son interdependientes.

Ventajas​

  • Simplicidad: Desarrollar y desplegar el proyecto es más sencillo gracias a que todo está contenido en un solo código.

Desventajas​

  • Dificultad para modificar: Tener un código altamente interdependiente significa que al hacer una modificación, hay una alta probabilidad de que la misma tenga efectos inesperados.
  • Errores complejos: Tener un error en el código podría afectar a más de una parte o incluso a toda la aplicación.

Arquitectura en capas​

Definición​

La arquitectura está dividida en varias capas con diferentes responsabilidades bien definidas. No se define la cantidad de capas que el proyecto debe tener.

Características​

  • Responsabilidades: Cada capa de la aplicación se encarga de una tarea diferente (por ejemplo: IU, lógica de negocio, datos).

Ventajas​

  • Código ordenado: Al solo tener código con ciertas funcionalidades en cada capa, este se vuelve más legible.
  • Fácil de mantener: Elimina interdependencias inesperadas en el código, por lo que el mantenimiento también es más fácil.

Desventajas​

  • Rigidez: Si un cambio en los requerimientos abarca más de una capa de la aplicación, el tiempo necesario para modificar el código puede volverse alto.

Microservicios​

Definición​

Es un enfoque de desarrollo de software donde una aplicación se construye como un conjunto de servicios pequeños e independientes que se comunican entre sí a través de APIs bien definidas.

Características​

  • Independencia: Cada microservicio opera en su propio proceso y puede ser desarrollado en diferentes lenguajes de programación o utilizar distintas tecnologías de almacenamiento de datos.
  • Escalabilidad: Cada servicio puede escalarse de forma autónoma según la demanda, optimizando el uso de recursos y mejorando la eficiencia.

Ventajas​

  • Agilidad en el desarrollo: Permite a los equipos implementar nuevas funciones y realizar cambios más rápidamente, sin necesidad de modificar grandes partes del código existente.
  • Resiliencia: La falla de un servicio no necesariamente afecta al resto de la aplicación, lo que aumenta la robustez y disponibilidad del sistema.

Desventajas​

  • Complejidad en la gestión: Coordinar múltiples servicios independientes puede ser complejo y requiere una gestión eficiente.
  • Comunicación entre servicios: Es fundamental diseñar mecanismos de comunicación efectivos y eficientes para garantizar la coherencia y el rendimiento del sistema.

Basada en eventos​

Definición​

Utiliza eventos para desencadenar y comunicarse entre servicios desacoplados. En este modelo, los sistemas detectan eventos (cambios significativos en el estado) y reaccionan a ellos, permitiendo una comunicación asíncrona y flexible entre componentes.

Características​

  • Desacoplamiento: Los productores y consumidores de eventos operan de manera independiente, lo que facilita la escalabilidad y el mantenimiento del sistema.
  • Asincronía: La comunicación se realiza de forma asíncrona, permitiendo que los componentes procesen eventos a su propio ritmo sin bloquearse mutuamente.

Ventajas​

  • Escalabilidad: Al estar desacoplados, los componentes pueden escalar de manera independiente según la demanda.
  • Flexibilidad: La incorporación de nuevas funcionalidades o servicios es más sencilla debido al bajo acoplamiento entre componentes.
  • Eficiencia: El procesamiento asíncrono permite una utilización más eficiente de los recursos, mejorando el rendimiento general del sistema.

Desventajas​

  • Complejidad en la gestión: La coordinación y el monitoreo de múltiples componentes independientes pueden ser desafiantes.
  • Dificultad en el seguimiento: La naturaleza asíncrona complica la trazabilidad de eventos y la depuración de errores.

Serverless​

Definición​

Con esta arquitectura el desarrollador no se preocupa por administrar su servidor y le deja esta tarea a un proveedor de servicios. El proveedor de servicios en la nube administra, escala y mantiene el servidor.

Características​

  • Sin servidores: Para el desarrollador, la experiencia es simplemente escribir el código y ejecutarlo.

Ventajas​

  • Sin gestión: Dejar el servidor en manos de alguien más nos quita la responsabilidad de gestión de encima.
  • Escalamiento automático: El proveedor de servicio detectará el tráfico y escalará el servidor automáticamente para atenderlo.

Desventajas​

  • Dependencia: Nos volvemos dependientes de los proveedores de servicio, lo que puede traer problemas.
  • Monitoreo: El monitoreo se vuelve más complejo que el de una aplicación normal.

Orientada a servicios (SOA)​

Definición​

Organiza las funcionalidades de una aplicación en servicios independientes y reutilizables, los cuales se comunican entre sí a través de interfaces bien definidas.

Características​

  • Interoperabilidad: Los servicios pueden interactuar entre sí independientemente de las plataformas o lenguajes de programación en los que fueron desarrollados, gracias al uso de estándares comunes.
  • Reutilización: Las funcionalidades se encapsulan en servicios que pueden ser reutilizados en diferentes aplicaciones o procesos de negocio, lo que reduce la duplicación de esfuerzos y mejora la eficiencia.
  • Desacoplamiento: Los servicios están diseñados para ser independientes, lo que facilita su mantenimiento, actualización y escalabilidad sin afectar a otros componentes del sistema.

Ventajas​

  • Mitigación de riesgos: Facilita la integración de sistemas y la reutilización de componentes, reduciendo los riesgos en el desarrollo.
  • Optimización de recursos: La reutilización de servicios y la reducción de redundancias conducen a una gestión más eficiente de los recursos.

Desventajas​

  • Complejidad en la implementación: La adopción de SOA puede ser costosa y requerir una gestión adecuada de los servicios.

Historial de cambios

Tipo de VersiónDescripciónFechaColaborador
1.0Documento inicial6/03/2025Emiliano Gomez Gonzalez
1.1Agrega Diagrama de Despliegue8/03/2025Emiliano Gomez Gonzalez