Puede consultar cómo se configuró Git y Github para el proyecto en este enlace.
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.
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.
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ódulotreepoem
no reconoce correctamenteghostscript
en Windows, por lo que no funciona apropiadamente. El microservicioEvents
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.
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
yPORT_E
conteniendo la dirección y el puerto del server socket para el microservicioEvents
.HOST_T
yPORT_T
conteniendo la dirección y el puerto del server socket para el microservicioTickets
.DB_URI
continendo la uri de la base de datos de MongoDB.CELERY_BROKER
yCELERY_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.
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: 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.
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.
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
.
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.
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.
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.