DisenoExperi1 - shiomar-salazar/MISW-PF-Grupo1-Backend GitHub Wiki
Diseño de Experimento #1: Disponibilidad
Titulo del Experimiento: Alta disponibilidad de los Servicios de Alerta/Notificaciones
Proposito del Experimento
Con este experimento se espera poder comprobar que las siguientes tácticas de aquitectura:
Táctica Priorización de Eventos como forma de aumentar la disponibilidad y asegurar que las notificaciones mas importantes (las de alertas) sean atendidas primero.
Táctica Procesamiento Asíncrono para el manejo de eventos y de esta forma evitar la saturacion del sistema en general esperando que las multiples notificaciones de baja prioridad se procesen.
Resultados Esperados:
Con el experimento se espera poder comprobar los siguientes comportamientos:
El establecimiento de parametros base necesarios para la configuracion de eventos priorizados en la cola de mensajes Pub/Sub del proveedor GCP, que nos permita hacer una diferenciacion entre notificaciones de alerta y notificaciones masivas generales.
Establecer los parametros de reintentos minimos necesarios para asegurar que se cumpla con los niveles de 99.99% de disponibilidad esperados por los usarios finales.
Confirmar que con el uso de Procesamiento Asincrono con el uso de GCP Pub/Sub, es posible alcanzar los niveles de 99.99% de disponibilidad esperados por los usarios finales.
Recursos Requeridos:
Como elementos de Software necesitaremos:
Google Gloud Platform.
Python
Docker
JMeter
Como elementos de Cloud Computing necesitamos:
Consola de comandos de GCP.
Servicio de Cola de Mensajes Pub/Sub ofrecida por GCP.
Elementos de Arquitectura Involucrados
Elementos de Arquitectura
Punto de Sensibilidad
Ingress Load Balancer
Garantizar que el sistema puede procesar las notificaciones enviadas de forma simulataneas de hasta 1000 usuarios, con una disponibilidad de 99.99% y dandole prioridad a las Notificaciones de Alerta.
Microservicio de Gestor de Notificaciones
Microservicio de Gestor de Servicios
Microservicio de Gestor de Entrenamientos
Configuracion de GCP Pub/Sub
Esfuerzo Estimado
Se estiman 20 horas de esfuerzo para la ejecucion de este experimento distrinbuidos en las siguientes actividades:
Creación de los microservicios Mockup para el Gestor de Notificaciones.
Creación de los microservicios Mockup para el Gestor de Entrenamientos.
Creación de los microservicios Mockup para el Gestor de Servicios.
Configuracion de Cola de Mensajes Pub/Sub en Cloud GCP.
Creacion de la Configuracion DockerFiles como pre-requisito de los Kubernetes.
Creacion de la Configuracion de Kubernetes para el despliegue del experimento.
Creacion de los parametros de Prueba en JMeter para la comprobacion de Hipotesis.
Hipotesis de Diseño
Punto de Sensibilidad
Historia de Arquitectura asociada
Nivel de Incentidumbre
Garantizar que el sistema pueda procesar al menos 99.99% de las peticiones de alerta y notificaciones que realizan las plataformas web y movil, de al menos 1000 usuarios de manera concurrente.
Como Usuario de SportApp, cuando haga uso de la funcionalidad de Alerta de Emergencia dado que el sistema opera normalmente, quiero que dicha alerta llegue por correo a mi contacto de emergencia previamente regsitrado para que yo pueda recibir asistencia de forma oportuna. Esto debe suceder el 99.99% de las veces.
Media
Estilos de Arquitectura asociados al experimento
Estilo de Arquitectura de Microservicios, esto con el fin de validar la decision de estilo de arquitectura y validar si la misma nos ayuda a cumplir con lo esperado en el proyecto.
Análisis del estilo seleccionado
Atributos de calidad favorecidos
Atributos de calidad desfavorecidos
Capacidad de procesamiento autónomo e independiente.
Complejidad en el desarrollo, pruebas y puesta en producción es más complicada.
Se pueden trabajar tecnologías heterogéneas para su desarrollo.
Consistencia eventual de los datos.
Facilidad al implementar escalamiento y reinicio de servicios fallidos.
Complejidad Operacional.
Tácticas de Arquitectura
Tácticas de Arquitectura asociadas al experimento
Descripción
Táctica Procesamiento Asíncrono
Cuando alguno de los clientes de la cola de mensajeria Pub/Sub (Microservicios de Gestor de Servicios o Entrenamientos) desee enviar una notificacion se pondra en la cola para que estos puedan seguir atendiendo otras peticiones de los usuarios, mientras el Gestor de Notificaciones puede tomar las peticiones de notificacion de la cola segun su capacidad y atenderlas sin bloquear a los clientes antes mencionados.
Táctica Publicación/Suscripción
Este patron se refiere a la forma de funcionar de la cola de Mensajes Pub/Sub, en donde los clientes de la cola (Microservicios de Gestor de Servicios o Entrenamientos) publican sus mensajes de notificacion a la cola, mientras que el consumidor de la cola (Microservicio de Gestor de Notificaciones) se subscribe para recibir
Táctica Priorización de Eventos
Con esta táctica se espera hacer una distincion entre las notificaciones de Alerta y Masivas, para que las primeras sean atendidas con alta prioridad (dada la importancia de las mismas) y asegurar que en caso de perdida o indisponibilidad las de mas alta prioridad siempre sean atendidas.
Listado de componentes (Microservicios) involucrados en el experimento
Microservicio
Propósito y comportamiento esperado
Tecnología Asociada
Microservicio de Gestor de Notificaciones
Este Microservicio se encargara de obtener las Notificaciones (ya sean de alertas o masivas) de la cola de mensajes priorizados y enviar el correo de notificacion correspondiente
Python / Flask / Docker
Microservicio de Gestor de Entrenamiento
Este microservicios tendra la responsabilidad de atender las peticiones de notificaciones de alerta de los usuarios y ponerlas en la cola de mensajes con la prioridad mas alta.
Python / Flask / Docker
Microservicio de Gestor de Servcios
Este microservicios tendra la responsabilidad de atender las peticiones de notificaciones masivas de los proveedores de servicios y eventos deportivos y ponerlas en la cola de mensajes con la prioridad normal.
Python / Flask / Docker
Ingress Load Balancer
Este componente se encarga de enrutar las peticiones desde el cliente de pruebas para que los microservicios antes descritos puedan cumplir sus funciones
Kuberentes
Configuraciones de Cola GCP Pub/Sub
En esta cola de mensaje se espera concentrar todas las notificaciones (ya sean de alertas o masivas) para que el Microservicio de Notificaciones pueda procesarlas de forma priorizada.
Consola de GCP
Listado de conectores involucrados en el experimento
Conector
Comportamiento deseado en el experimento
Tecnología Asociada
Enviar_notificacion
Este conector debe recibir las peticiones desde los clientes para que la cola de mensaje las pueda guardar y ponerlas a disposicion de los consumidores.
Rest-API
Enviar_email
Este es el conector de debe utilizar los consumidores de la cola, para obtener el evento encolado mas prioritario y mas antiguo para que se procese primero.
Rest-API
noti_alerta
Este conector sera el encargado de recibir las peticiones de los usarios para que el Microservicio de Gestor de Entrenamiento puedo enviar una notificacion de Alerta con los datos correspondientes a la cola de mensajes.
Rest-API
noti_masiva
Este conector sera el encargado de recibir las peticiones de los usarios para que el Microservicio de Gestor de Servicios puedo enviar una notificacion de Alerta con los datos correspondientes a la cola de mensajes.
Rest-API
Tecnología asociada con el experimento
Tecnología asociada con el experimento
Descripcion
Lenguajes de programación
Python
Plataforma de despliegue
Docker y Kubernetes
Bases de datos
SQLite
Herramientas para ejecución de pruebas
JMeter
Herramientas de análisis
Excel
Librerías
Nginx
Frameworks de desarrollo
Flask
Proveedor de Nube
Google Cloud Platform
Distribución de actividades por integrante
Integrante
Actividad
Esfuerzo Asociado
Shiomar
Creacion de Microservicio de Gestor de Servicios
2 horas
Jhon
Creacion de Microservicio de Gestor de Notificaciones
3 horas
Shiomar
Creacion de Microservicio de Gestor de Entrenamientos