Proyecto Entrega 4 - fredyalarcon/desarrollo-sw-nube-hfma GitHub Wiki

Arquitectura, conclusiones y consideraciones

Tecnologías utilizadas

Funcionalidad Nombre
Lenguajes  de programación Python
Bases de datos Mysql
Servicio de mensajería asincrono Cloud Pub/Sub
Frameworks de desarrollo Flask
Servicio de almacenamiento archivos Cloud Storage
Instancias Máquinas virtuales en GCP
Instancia Base de datos Google Cloud SQL
Balanceador de carga External Application Load Balancer GCP

Componentes

Listado de componentes  Propósito y comportamiento esperado Tecnología Asociada Instancia GCP
API Gestiona la creación de los usuarios, generación del token y las tareas de conversión de archivos. Python Flask, Mysql, VMs GCP, load balancer web-api
Worker Procesa la conversión del archivo. Python Flask, Mysql, VMs GCP worker
Mensajería asincrona Gestionar los mensajes de las tareas para que puedan ser procesadas Cloud Pub/Sub Cloud Pub/Sub
Almacenamiento archivos Recurso compartido para almacenamiento de archivos Cloud Storage Cloud Storage
HTTP Load Balancer Recurso de red que balancea la carga entre las instancias activas de la capa web Load Balancing Load Balancer

Vista de contexto

Modelo de contexto

image

Vista funcional

Modelo componente - conector

image

Vista información

Modelo de clases

image

Modelo de información

image

Vista de despliegue

Modelo de despliegue

image

Conclusiones y Consideraciones

  • A continuación, se muestran las reglas definidas de autoescalamiento.

Autoescalamiento Worker

Para el proceso de autoescalamiento del worker se implemento cloud Pub/Sub con estrategia pull donde múltiples instancias comparten el mismo subscription, los mensaje se entregan de un máximo de 5 por vez a una de las instancias, cada instancias procesa una tarea a la vez y cuando una instancia falla la cola tiene un tiempo de deadline definido en 60 segundos para volver a poner el mensaje disponible para que otra instancia le haga pull, una vez la instancia termina con sus 5 mensajes hara pull de otros 5 como máximo de los disponibles en la subscrition del topic.

El grupo de instancias tiene como máximo cinco maquinas y la señal de autoescalamiento será despues de 60% de uso de CPU una sola instancia.

image

Autoescalamiento API

imagen

  • La seña de autoescalamiento es 60% de usabilidad de la CPU, este valor fue resultado de las pruebas de la semana pasada donde se evidenció que por encima del 60% las peticiones fallaban en una sola instancia.

  • El número mínimo de instancias para las pruebas es uno y con máximo de 3.

  • Cuando el grupo de instancias crea una nueva máquina se configuró un tiempo de inicialización de 90 segundos, dado que este es el tiempo necesario para que se inicien todos los servicios en el sistema operativo y se estabilice el uso de recursos, si este valor fuera menor el balancer podría estar creando otra instancia de manera errónea por considerar que el uso de recursos supera la métrica del 60%.

  • El load balancer usa como frontend una ip estática reservada.

  • El load balancer usa como backend un instance group que contiene las instancias de la capa web.

  • También se implementó un nuevo endpoint para el health check.

imagen