View on GitHub

CC-proyecto

Repositorio del proyecto de Cloud Computing por Felipe Peiró Garrido

Documentacion del hito 4

En este hito se ha realizado las siguientes tareas:

Automatización con Azure CLI

Para realizar la automatización se ha definido el archivo acopio.sh. Este define la secuencia de comandos shell que se debe seguir para la creación y provisionamiento de las máquinas virtuales. El resto de archivos utilizados ansible.cfg y deploy.yml son los mismos a los utilizados en el hito anterior.

Para ejecutarlo antes tenemos que instalar antes Azure CLI ejecutando el siguiente comando:

$ curl -L https://aka.ms/InstallAzureCli | bash

Una vez instalado Azure CLI hay que iniciar sesión con el comando az login para de esta manera vincular las máquinas virtuales con la suscripción activa en el usuario. Este comando abrirá el navegador con la página web para tal efecto. El resultado del comando es el siguiente:

Inicio de sesión con Azure CLI

Selección del centro de datos a utilizar

Para la elección del centro de datos en el que crear las máquinas virtuales se ha hecho uso de la página web azurespeed.com con la cual se ha realizado una medición de la velocidad de estos desde mi dirección IP. También se podrían haber utilizado herramientas como httperf o ab, pero estas necesitan de máquinas virtuales creadas en cada uno de los centros de datos haciendo esta labor más costosa y lenta.

Tras varios minutos obteniendo datos de dicha página web se ha elaborado una tabla con los mejores resultados:

Prueba UK South West Europe UK West North Europe
Tiempo de respuesta (ms) 56.3 67.3 71.6 76.0
Velocidad de subida (Kb/s) 649.8 600.9 584.5 514.1
Velocidad de descarga (Mb/s) 4.3 4.0 4.3 3.9

Una vez obtenidos los datos de los resultados se concluye que el mejor centro de datos el UK South, por lo que será este el que se utilice para la creación de las máquinas virtuales.

Selección de la imagen a utilizar

Extracción de los sistemas operativo

Para la elección de la imagen con la cual crear las máquinas virtuales se ha tenido en cuenta las siguientes consideraciones:

Para ver las imágenes de máquinas virtuales disponibles podemos lanzar el comando az vm image list --all. El problema es que este te devuelve todas y cada una de las imágenes disponibles sin tener la capacidad de filtrar entre ellas. Es por ello que vamos a utilizar jq. jq es un software que permite el filtrado de datos en formato JSON posibilitando de esta manera elegir aquellas imágenes virtuales que contengan una secuencia dada.

Por ejemplo, para una búsqueda sobre máquinas virtuales Ubuntu se podría lanzar el siguiente comando:

$ sudo apt-get install jq
$ az vm image list --offer Ubuntu --all | jq '.[]'

La salida de este comando está disponible aquí

Comparación entre sistemas operativos

Se van a elegir los tres sistemas operativos más usados para realizar la comparación: Ubuntu, Debian y CentOS. Las imágenes a comparar son las imágenes oficiales debido a que son las más fiables:

Mediante la utilización de la herramienta ab (Apache Benchmark) se van a ejecutar un número determinado de peticiones y se recogerá el tiempo de respuesta, el número de peticiones aceptadas y el tiempo por cada petición. Para ello primero hay que instalar el paquete aby después ejecutar comando correspondiente:

$ sudo apt-get install apache2-utils
$ ab -n 2700 -c 90 -k -H "Accept-Encoding: gzip, deflate" $MV_IP

Este comando lanzará 2700 peticiones en formato gzip y dflate distribuidas en 90 hilos. Debido a esta gran cantidad de peticiones es posible obtener unos resultados de mayor confianza para conocer si nuestro servicio va a poder servir a muchos usuarios a la vez tal y como se explica en este enlace.

Una vez desplegado el servicio en cada una de las máquinas virtuales y lanzado el comando anterior obtenemos los siguientes resultados:

Prueba Ubuntu Debian CentOS
Tiempo de ejecución (s) 3.846 3.860 3.756
Peticiones por segundo (#/s) 702.04 699.53 718.87
Tiempo por hilo de peticiones (ms) 128.197 128.659 125.197
Tiempo por petición (s) 1.424 1.430 1.391

Se puede consultar en estos enlaces las pruebas en detalle: Ubuntu, Debian y CentOS.

El resultado entre los distintos sistemas operativos no difiere mucho pero aunque la máquina virtual de CentOS tiene mejores resultados el hecho de que esté basada en Red Hat nos limita en cierta manera los paquetes que podemos utilizar además del bajo conocimiento sobre este.

En cambio, el segundo mejor resultado, Ubuntu nos aporta las siguientes ventajas:

Es por ello que el servicio se desplegará en Ubuntu 18.04 LTS.

Elección del tamaño de la imagen

Ahora necesitamos conocer el tamaño de la imagen que usaremos con Ubuntu. Cuando hablamos de tamaño hablamos del número de CPUs virtuales y de la memoria RAM que se asignará a nuestra máquina virtual. Aunque es posible cambiar el tamaño de la máquina virtual una vez creada siempre es mejor utilizar un tamaño adecuado desde el principio.

Para conocer los tamaños de máquinas virtuales disponibles en un centro de datos basta con lanzar el comando az vm list-sizes --location $LOCATION. Algunos de los tamaños disponibles para las máquinas son los siguientes:

Lista de tamaños de mvs

Debido a que este servicio es un servicio en desarrollo, no comercial y con una tasa de peticiones muy baja el tamaño más básico (Standard_B1s) nos servirá. Este dispone de las siguientes características:

Lanzamiento del script de automatización

Una vez instalado Azure CLI y decidido tanto el centro de datos como la imagen a utilizar podemos lanzar el comando ./acopio.sh. El resultado que obtenemos es el siguiente:

Automatización con Azure CLI

Una vez realizado el despliegue el servicio estará listo en http://168.62.37.56/

Proyecto en Chrome

Funcionalidad

Se ha implementado en este hito las siguientes funcionalidades:

Para cada una de las direcciones URL y funciones implementadas se han desarrollao los tests para comprobar su correcto funcionamiento.

Estructura de los valores del sensor

Los valores de los sensores poseen los siguientes campos en la base de datos:

Direcciones implementadas

Se han implementado las siguientes direcciones para la realización de las funcionalidades: