Monitorización de líneas de producción

Proyecto para la asignatura de Cloud Computing en el Máster en Ingeniería Informática UGR.

License: GPL v3 Build Status codecov Open Source Love


Docker

Para desplegar los servidores de los microservicios para poder hacer pruebas de carga se ha decidido utilizar contenedores de Docker. Para hacer esta tarea más sencilla de ha usado la herramienta docker-compose que permite indicar de manera sencilla las imágenes, argumentos, redes, variables de entorno, etc. necesarias para el despliegue. Concretamente se han utilizado 4 contenedores para:

  1. El microservicio Notifier.
  2. La base de datos MongoDB que usa el microservico anterior.
  3. El microservicio Monitor.
  4. La base de datos PostgreSQL que usa el microservico anterior.

Microservicio Notifier

Contenedor: https://hub.docker.com/r/ibe16/notifier

Enlace al Dockerfile.

La imagen anterior se ha construido teniendo como base python:3.6-slim-stretch, una imagen del DockerHub oficial de Python que usa Debian 9 como sistema operativo y contiene python 3.6 instalado. Después se han instalado las dependencias necesarias para el funcionamiento del servicio, que son Flask y Gunicorn.

Se ha elegido la imagen python:3.6-slim-stretch siguiendo los siguientes criterios:

  1. Proviene del repositorio oficial del lenguaje que se está usando.
  2. Contiene la versión del lenguaje con la que se está desarrollando ya instalada.
  3. Es la que mejor rendimiento ofrece en relación al espacio que ocupa. Se pueden ver en la [documentación][docu_bench] correspondiente los benchmark que se han realizado para hacer esta elección.

A continuación, se muestra el resto de imágenes que se barajaron:

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
python                     3.6-slim-stretch    fa79f489b3bf        7 days ago          151MB
python                     3.6-slim-buster     add6920a081f        7 days ago          174MB
python                     latest              0a3a95c81a2b        7 days ago          932MB
python                     3.6-alpine          8880aaf979d2        2 weeks ago         94.7MB

Podemos comprobar como la versión con Alpinees la más ligera. La versión stretch está basada en Debian 9. La versión buster también está basada en Debian. Con la palabra slim quiere decir que es una versión reducida de estos sistemas.

Microservico Monitor

Contenedor: https://hub.docker.com/r/ibe16/monitor

Enlace al Dockerfile.

La imagen de este microservicio se ha construido a partir de la imagen python.3.6-slim porque es la única donde se ha podido instalar una dependencia necesaria para poder usar el paquete de Python que conecta con la base de datos. Se ha probado con todas las imágenes propuestas para el microservicio anterior, ya que estás eran las más rápidas que se encontrarón, sin embargo no permitían la instalación de dicho paquete.

Uso

Para poder usar el docker-compose es necesario instalarlo previamente. Se puede realizar fácilmente siguiendo su documentación. También es conveniente configurarlo para usarlo sin la necesidad de hacer sudo.

  1. Para construir la imagen a partir del docker-compose ejecutamos:
    $ docker-compose build 
    

    Contruye las imágenes necesarias en el directorio actual y construye la red para que se puedan comunicar. Por defecto la que se coloca en los microservicios es `latest`.

  2. Para descargar la imagen desde DockerHub:
    $ docker pull ibe16/notifier:latest
    
    $ docker pull ibe16/monitor:latest
    
  3. Para ejecutar la imagen en local:
    $ docker-compose up
    
  4. Para parar todo:
    $ docker-compose down
    

    Para ver que el contenedor se ejecuta correctamente se puede consultar la url http://0.0.0:<puerto_externo>/hello que devolverá un ‘Hello, World!’.

Para más información se puede consultar el docker-compose.

El repositorio de DockerHub se ha configurado para que se actualice la imagen cada vez que se haga un push al repositorio de Github. Para más información se puede consultar la documentación donde explica cómo realizarlo.