Open Events

by alvarillo89

GitHub Readme.md

License: GPL v3 Build Status codecov DevQAGRX

Proyecto de la asignatura Cloud Computing (Máster en Ingeniería Informática - UGR)

Puede consultar cómo se configuró Git y Github para el proyecto en este enlace.

OpenEvents

OpenEvent es una aplicación open source que permite a organizadores de cualquier tipo publicar información sobre sus eventos y vender entradas para los mismos mediante pagos electrónicos. Todo ello a través de la nube.

Arquitectura e Infraestructura

La aplicación se implementa siguiendo una arquitectura basada en microservicios. Puede consultar con mayor detalle la Arquitectura e Infraestructura del proyecto, y de cada microservicio, en el siguiente enlace.


Prerrequisitos y versiones

El proyecto está implementado en Python. Para su correcto funcionamiento deberá disponer de alguna de las versiones presentes en el siguiente rango:

  • Mínima versión compatible: 3.5
  • Máxima versión compatible: 3.8 (incluída la versión en desarrollo)

Adicionalmente, deberá disponer de la herramienta Makefile y tener instalado Ghostscript en su sistema, dependencia necesaria que deberá instalar manualmente para el correcto funcionamiento del módulo treepoem.

Nota: El microservicio Tickets solo es compatible con un sistema Linux. El módulo treepoem no reconoce correctamente ghostscript en Windows, por lo que no funciona apropiadamente. El microservicio Events funciona sin problemas en ambos sistemas operativos, aunque las versiones mencionadas anteriormente se han testeado en Linux. En Windows solo se ha comprobado hasta la versión 3.7, por lo que se desconoce el comportamiento para la versión 3.8.


Herramienta de construcción

buildtool: Makefile

Este proyecto utiliza Makefile como herramienta de construcción. Los objetivos configurados son los siguientes:

$ make install

Instala todos los requisitos (módulos de Python) necesarios para la aplicación. Alternativamente a esto puede ejecutar pip install -r requirements.txt. Si desea conocer qué módulos se instalan con esta órden, consulte el fichero requirements.txt.

$ make test

Ejecuta todos los tests presentes en directorio tests/ (tests unitarios, de integración y de cobertura).

Para los test unitarios y de integración se ha utilizado unittest, simplemente porque ya está incorporado en la propia ditribución de Python y no requiere de la instalación de un módulo externo. Para los test de cobertura se ha utilizado coverage.py. Dicho módulo generará el archivo .coverage que contiene el report de los test de cobertura. La herramienta que desee utilizar para la visualización del reporte queda a su elección. En los tests de integración contínua se ha utilizado Codecov.

$ make clean

Limpia el directorio del proyecto, eliminando los directorios __pycache__ y el archivo .coverage resultante de los test de cobertura.

$ make start

Arranca los servicios web de ambos microservicios utilizando Gunicorn. También arranca la cola de tareas de Celery. Previamente a la ejecución de esta orden, deberá configurar una serie de variables de entorno:

  • HOST_E y PORT_E conteniendo la dirección y el puerto del server socket para el microservicio Events.
  • HOST_T y PORT_T conteniendo la dirección y el puerto del server socket para el microservicio Tickets.
  • DB_URI continendo la uri de la base de datos de MongoDB.
  • CELERY_BROKER y CELERY_BACKEND contiendo las urls del broker y backend que utilizará Celery, respectivamente.

Para más información sobre los parámetros con los que gunicorn es arrancado consulte el fichero Makefile.

$ make stop

Finaliza la ejecución de los servicios web de ambos microservicios y todos sus workers. También para la ejecución de Celery.

make download

Descarga de Ansible Galaxy todos los roles que son necesarios para el provisionamiento de las máquinas virtuales (para instalar MongoDB y docker). Los roles descargados se situarán en el directorio /provision/roles/.

Para más detalles, consulte el fichero Makefile, el cual contiene comentarios explicativos.


Integración contínua

El proyecto utiliza dos sistemas de integración contínua diferentes: Travis-CI y GitHub Actions. Para obtener más información sobre las funciones que desempeñan cada uno de ellos, consulte el siguiente enlace.


Contenedor Docker del microservicio Events

Contenedor: https://hub.docker.com/r/alvarillo89/events

En el enlace superior puede acceder a la imagen del contenedor publicada en Docker Hub, que contiene el microservicio Events junto con todas las dependencias que necesita para ejecutarse. También se ha subido adicionalmente a Github Packages Registry.

Para más información sobre la construcción del contenedor, consulte el siguiente enlace.


Despliege en Heroku del microservicio Events

Deploy

La aplicación desplegada está disponible bajo la siguiente dirección:

https://openevents.herokuapp.com

Consulte el siguiente enlace para conocer más detalles sobre el proceso seguido para el despliegue.

Nota: la aplicación ya no se encuentra desplegada en Heroku. Si desea desplegarla usted mismo, pulse el botón de Heroku.


Almacén de Datos

Tal y como se describe en la sección Arquitectura e infrestructura, este proyecto utiliza MongoDB como almacén de datos.

Nota: Deberá configurar una variable de entorno llamada DB_URI que contenga la uri de la base de datos a la que se conectará el microservicio.

En el siguiente enlace se describe cómo se ha integrado este servicio en el microservicio Events.


Evaluación de prestaciones del microservicio Events

Prestaciones: performance_evaluation.yml

Las prestaciones del microservicio Events se han evaluado utilizando Taurus. Se pedía alcanzar un rendimiento estimado de 1000 peticiones/s con 10 usuarios concurrentes. El resultado que finalmente se ha obtenido en su rendimiento es de 2976 peticiones/s de media con 10 usuarios concurrentes.

En el siguiente enlace, se puede consultar el proceso de evaluación realizado junto con todas las modificaciones que se han efectuado para alcanzar el rendimiento deseado.


Implementación del microservicio Tickets

La implementación de este microservicio incluye los tres scripts siguientes:

Puede consultar con mayor detalle la documentación sobre como se ha implementado este microservicio y como se ha integrado con el resto del sistema en la descripción de la Arquitectura de la aplicación.


Provisionamiento de máquinas virtuales con Ansible

Para finalizar con este proyecto, se ha realizado el despliegue de ambos microservicios (Events y Tickets) en máquinas virtuales. Se ha llevado a cabo el despliegue tanto en una máquina virtual local, como en la plataforma de Microsoft Azure.

Para el provisionamiento y demás tareas de automatización, se ha utilizado Ansible.

Puede consultar con mayor detalle la documentación sobre este apartado en el siguiente enlace.