Skip to content

Repositorio para el desarrollo del proyecto y ejercicios pertenecientes a la asignatura de Cloud Comuting (CC-UGR).

License

Notifications You must be signed in to change notification settings

yoskitar/Cloud-Computing-CC

Repository files navigation

License: LGPL v3 Build Status CircleCI codecov DevQAGRX

Cloud-Computing-CC

Repositorio para el desarrollo del proyecto y ejercicios pertenecientes a la asignatura de Cloud Comuting (CC-UGR).

Tabla de contenidos

  1. REFOOD
    1.1. Descripción
    1.2. Arquitectura
    1.3. Herramientas
    1.4. Micro-servicios
    1.5. Prestaciones
    1.6. Contenedores
    1.7. Provisionamiento
  2. Justificaciones
  3. Licencia

REFOOD

Descripción

El proyecto que realizaremos ha sido denominado ReFood de acorde al objetivo principal del servicio, que es evitar desechar alimentos, poniéndolos a la venta a un menor precio, de manera que se incite a los consumidores a llevárselos antes de que perezcan.

En el siguiente enlace, puede consultar más detalles relacionados con la descripción completa del servicio.

Arquitectura

Para el desarrollo del servicio descrito se empleará una arquitectura basada en microservicios, sobre la que desarrollaremos 3 micro-servicios. Aprovecharemos una de las ventajas que nos ofrece esta arquitectura para desarrollar los micro-servicios en el lenguaje que mejor nos permita realizar cada una de las funciones de éstos.

Puede obtener más información en el siguiente enlace, donde se encuentra toda la documentación de la arquitectura.

Herramientas

Construcción

Como herramienta de construcción para el servicio completo, hemos reemplazado el package.json por tasks.py, aunque mantenemos el uso de las acciones definidas en éste.

Puede consultar el archivo package.json si aún no lo ha hecho para una mejor comprensión.

buildtool: tasks.py

Algunas de las tareas definidas son las siguientes:

Build

invoke install

Al invocar esta tarea, se instalaran las dependencias especificadas para cada uno de los respectivos micro-servicios; en el caso de python, localizadas en el requirements.txt, y en el package.json para NodeJs.

Start

invoke start

NOs permitirá iniciar el servicio completo, empleando pm2 como gestor de procesos para el servicio NodeJs, gunicorn para el Api desarrollado con Falcon, y con Python iniciaremos una instancia del listener de la cola de mensajes desarrollado.

Stop

invoke stop

Nos permitirá detener los procesos del servicio ejecutados, empleando el comando pkill seguido del nombre del proceso, para el caso de Python, y la orden stop definida en el package.json para NodeJs, que detiene el proceso a través de pm2.

Tests

invoke test

Puede consultar la información completa sobre los test que se han desarrollado. Tras ejecutar esta orden, se realizarán los test y se enviarán los reportes del test de cobertura adicional a la plataforma de codecov.io.

Puede consultar más información sobre las herramientas de construcción empleadas.

Integración continua

  • Se ha empleado el sistema de integración continua TravisCI, que hemos configurado empleando el archivo .travis.yml con el objetivo de que se ejecuten los test diseñados automáticamente tras realizar un push al repositorio.

  • Adicionalmente se ha empleado como segundo sistema de integración continua GitHub Actions, con el que hemos testeado sobre la versión mínima para la que hemos ejecutado nuestros tests (8.16.2 Carbon).

  • Como tercer sistema de integración continua empleado para el testeo del micro-servicio de gestión de análisis hemos empleado CircleCI.

Si lo desea, puede obtener toda la información relativa a la documentación de integración continua.

Micro-servicios

Se han desarrollado 2 micro-servicios, empleando los lenguajes NodeJs y Python, junto a tecnologías como GraphQL y Falcon.

Puede obtener la información completa sobre el desarrollo y definición de arquitectura, respetando el SSOT (Single Source of Truth) para cada uno de los dos micro-servicios desarrolados.

Prestaciones

Se han llevado a cabo varios tests con el objetivo de analizar las prestaciones para cada uno de los micro-servicios desarrollados, empleando la herramienta Taurus, con la que ejecutar los tests definidos en ficheros como el siguiente:

Prestaciones: gestion_de_productos_test_prestaciones.yml

En estos ficheros definimos la configuración del test a realizar. Se realizaron una serie de experimentos con la finalidad de obtener el mínimo de prestaciones establecido en 1000 hists/s para 10 usuarios simultáneos, superado con resultados de casi 4000 hists/s para 10 usuarios simultáneos para cada uno de los micro-servicios desarrollados.

Puede obtener toda la información relativa a los tests de prestaciones realizados si desea conocer más.

Contenedores

Publicación del contenedor docker

Una vez tenemos creada la imagen del contenedor y hemos comprobado que funciona adecuadamente, podemos publicarla en un repositorio de modo que otros usuarios puedan descargarse nuestra imagen y usarla. Para ello, podemos hacer uso de diversas plataformas que nos brindan dicha posibilidad.

En nuestro caso, hemos seleccionado cuatro, dockerhub y github packages, ambas bastante sencillas de utilizar, como explicaremos a continuación. La tercera ha sido publicada en Google Cloud para posteriormente poder realizar el despliegue del contenedor en esta misma plataforma. Como cuarta opción encontramos heroku, donde construiremos y desplegaremos el contenedor asociado al análisis de recetas.

DockerHub

En la siguiente dirección encontramos publicado el contenedor del micro-servicio de gestión de productos:

Contenedor: https://hub.docker.com/r/yoskitar/cc-refood-gestiondeproductos

Adicionalmente, además de en heroku, se ha desplegado el segundo micro-servicio con la finalidad de en un futuro poder realizar el provisionamiento de las máquinas virtuales de manera sencilla empleando los contenedore docker publicados en dockerhub.

Contenedor ms análisis: https://hub.docker.com/r/yoskitar/cc-refood-analisisderecetas
Heroku

En la siguiente dirección encontramos desplegado el contenedor del micro-servicio de análisis de recetas:

Despliegue: https://cc-refood-analisis.herokuapp.com/

Algunas de las rutas disponibles para el recurso son:

Puede obtener la documentación completa referente a la construcción de Dockerfiles y la automatización de la construcción y despliegue de los contenedores si desea obtener más información.

Provisionamiento

Se ha llevado a cabo la configuración de una máquina virtual empleando virtualbox, empleando la herramienta Vagrant, junto con Ansible para llevar a cabo el provisionamiento de la VM y despliegue en ésta del servicio. Además se ha vuelto a realizar un análisis de prestaciones para poder compararlas con las experimentaciones anteriores realizadas y poder obtener conclusiones de cara a mejorar su rendimiento.

Puede consultar toda la información relativa a la configuración y provisionamiento de máquinas virtuales si desea conocer más.

Justificaciones

Justificaciones adicionales de la asignatura.

Licencia

Para el desarrollo de este proyecto se ha seleccionado la licencia GNU General Public License v3.0, que es una de las menos restrictivas, permitiendo y garantizando el objetivo de software libre, al evitar la distribución de versiones de código cerrado.

About

Repositorio para el desarrollo del proyecto y ejercicios pertenecientes a la asignatura de Cloud Comuting (CC-UGR).

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages