Giter Club home page Giter Club logo

proyecto-cc's Introduction

Análisis de tendencias (geolocalizadas) en Twitter

Proyecto de la asignatura Cloud Computing para el curso 2018/2019 del Máster en Ingeniería Informática, realizado por Gema Correa Fernández. Pincha aquí para acceder al enlace de la documentación.

Tabla de Contenidos

Despliegue Vagrant: 20.188.32.253

Novedades

  • Pincha aquí para acceder a los avances realizados en el hito 5. En dicho documento explico el proceso seguido para la conexión entre máquinas y como creo la BD e inserto.
  • Pincha aquí para ver la orquestación de máquinas virtuales.
  • Pincha aquí para ver las comprobaciones realizadas en el hito 5.

Descripción del proyecto

Twitter junto con Instagram son dos de las plataformas sociales más usadas actualmente, por eso mismo, miles de usuarios comparten todo tipo de información en ellas. Este tipo de comportamientos benefician a las empresas dándoles potestad en la obtención de información muy valiosa, cómo por ejemplo ver qué tendencias o trending topics son los más comentados o qué ciudades son las más comentadas en la red. En este caso, yo me voy a centrar en la obtención de datos geolocalizados, es decir, en la extracción de trending topics o tendencias de los usuarios en Twitter para una región determinada. Para así, poder clasificar las tendencias y establecer la tendencia mayoritaria para una region determinada.

Descripción de arquitecturas software

Actualmente, las arquitecturas software modernas buscan la consistencia en la velocidad de respuesta al usuario. Sin embargo, en el mercado existen muchos tipos de arquitecturas, es por ello que a veces se hace difícil concretar qué arquitectura se va a utilizar [2]:

  • Arquitectura en capas.
  • Arquitectura dirigida por eventos.
  • Arquitectura microkernel.
  • Arquitectura basada en microservicios.
  • Arquitectura basada en espacios.

Pincha aquí para saber más acerca de las arquitecturas anteriores.

Arquitectura seleccionada

Entonces, resulta bastante claro que de todas las arquitecturas comentadas anteriormente vayamos a hacer uso de la arquitectura basada en microservicios, ya que es la que más actual y la que menos problemas presenta, además de que nos permite tener diferentes servicios trabajando de forma totalmente independiente unos de otros.

Descripción de los microservicios a desarrollar

Para realizar la arquitectura se va a hacer uso del lenguaje Python, y para el desarrollo de los microservicios se puede usar cualquier microframework web para Python, en este caso existe la posibilidad de usar Django (más complejo o pensado para un proyecto de grandes dimensiones o que crezca) o Flask (más sencillo). Es por ello, que tras haber buscado documentación, hablado con usuarios de ambos microframework y ser la primera vez que uso este tipo de tecnología/herramienta, me he decantado por Flask. Los microservicios previstos a desarrollar son los siguientes:

  1. Consultar API de Twitter: en este microservicio solo nos vamos a centrar en acceder, consultar y bajarnos información de la API, información obtenida en un JSON.
  2. Procesar información: en este microservicio vamos a quedarnos con los datos referentes a las tendencias según su localización, en un JSON: API.trends_place(id[, exclude]).
  3. Almacenar información: en este microservicio nos vamos a centrar en crear una estructura para los datos que hemos realizado, usando principalmente una BD como MYSQL.
  4. Mostrar información: en este microservicio solo nos interesa mostrar la información relevante de alguna manera específica.
  5. Además, necesitamos un sistema de centralización de logs, al cual todos deben comunicarse.

Bibliotecas de Python para la API de Twitter

Actualmente, la API de Twitter nos permite acceder a todo tipo de información de forma más simple que la de Instagram, es por eso que me he decantado por esta red social. A continuación, se muestran algunos datos a los que podemos acceder [1]:

  • Tweets: búsqueda, publicación, filtrado, etc.
  • Anuncios: gestión de campañas, análisis, etc.
  • Contenido multimedia: subir y acceder a fotos, vídeos, GIF animados, etc.
  • Tendencias: trending topics.
  • Geo: información sobre lugares conocidos, lugares cerca de una ubicación, etc.

Python cuenta muchas bibliotecas desarrolladas para la API de Twitter. Sin embargo, al no haber usado nunca ninguna me es dífil elegir que biblioteca es la mejor. Es por ello, que voy hacer uso de tweepy ya que he oído hablar de ella bastante bien y tiene bastante documetación en la web. De todas maneras, existen otras librerías cómo twython, python-twitter o TwitterAPI.

Pincha aquí, para más información acerca de la extracción de datos de Twitter realizada para el proyecto

Descipción de los tests en Python (código sin test código roto)

Para testear en Python [3], puedo usar algunas de las librerías que me permiten implementar pruebas unitarias en dicho lenguaje como unittest, doctest o pytest [4]. En este caso yo voy hacer uso de la biblioteca unittest, ya que nos ofrece toda la potencia del lenguaje para probar nuestros programas, lo que significa que ayuda a determinar rápidamente el impacto de cualquier modificación en el resto del código.

Para realizar la configuración de los tests correctamente, voy hacer uso de Travis CL, que es un sistema distribuido de generación e integración continua libre, que me permite conectar mi repositorio de Github y testear después de cada push que haga [5] [6].

Pincha aquí, para saber más información sobre los tests.

Descripción del despliegue

Despliegue en PaaS

Cuando se quiere desplegar una aplicación sobre una infraestructura ya definida y que no va a cambiar se necesita un Platform as a Service o PaaS. Entre los posibles servicios que hay Heroku o OpenShift, vamos a escoger Heroku, ya que es un servicio fiable, gratuito, ofrece muchas opciones a la hora de elegir el lenguaje y permite integrar Github con Travis.

Pincha aquí, para saber más información sobre el despliegue en PaaS.

Despliegue de la infraestructura en máquina virtual local

Para el despliegue de la aplicación en una máquina virtual local, se ha hecho uso de Ansible junto con Vagrant. Previamente a la realización de un clone a mi repositorio, se debe instalar Ansible, Vagrant y VirtualBox, herramientas necesarias para ejecutar la aplicación. Una vez realizados estos procesos, debemos dirigirnos al directorio provision > vagrant_ubuntu y ejecutar la sentencia vagrant up, la cual creará una máquina virtual en VirtualBox y ejecutará el playbook con lo indispensable para el despliegue.

Orquestación de máquinas virtuales

Se usa Vagrant para provisionar una o preferiblemente varias máquinas virtuales usando un proveedor de servicios cloud, en este caso se ha usado Azure. En el directorio orquestacion se encuentran los archivos necesarios para llevar a cabo la creación y provisión de las máquinas virtuales y la documentación se encuentra aquí. La documentación donde se explica el proceso para la creación y uso de la base de datos, se puede encontrar aquí.

Pasos para probarlo

  1. Clonar mi repositorio.
  2. Acceder a la carpeta orquestación (cd orquestacion/) y ejecutar vagrant up --no-parallel —provider=azure.
  3. Cuando se terminen de crear y provisiona ambas máquinas, abrir las dos con SSH:
# Para la máquina principal
$ ssh [email protected]

# Para la máquina con la base de datos
$ ssh [email protected]
  1. Dentro de la máquina principal, se accede a la carpeta proyecto (cd proyecto/) y se lanza la aplicación en el puerto 80 con (sudo gunicorn -b :80 main:app).

  2. Accedemos al navegador con la IP pública de la máquina principal (http://ip_publica_maquina_principal:80/status) y obtenemos el status ok (mirar IP en Azure).

  3. Accedemos al navegador con la IP pública de la máquina principal (http://ip_publica_maquina_principal:80/BD) y visualizamos la interfaz web, la cual esta conectada con la base de datos.

Comprobaciones del hito 5

Enlaces de Interés

Licencia

Proyecto bajo licencia GNU GLP V3.

Nota: Se debe tener en cuenta que la realización de un proceso de desarrollo conlleva modificaciones en el futuro, pudiendo modificar la documentación o añadiendo nuevas funcionalidades.


proyecto-cc's People

Contributors

gecofer avatar jmv74211 avatar luiisgallego avatar

Watchers

 avatar

proyecto-cc's Issues

Añadir más información sobre mi proyecto

Falta información sobre qué microservicios va a tener mi proyecto, sobre el aprovisionamiento o lenguajes a usar. Para ello, añadiré más información para que quede más claro la elección del mismo. Aunque, en futuras revisiones podrá haber modificaciones o adiciones.

Cambiar gh-pages a docs

Cambiar la información que hay en la rama gh-pages a una carpeta /docs en la rama master.

Revisar objetivos hito 0 e hito 1

Revisar de nuevo los objetivos obtenidos tanto para el hito 0 como para el hito 1, y en algunos casos referenciar con algún enlace o ejercicio realizado.

Añadir ficheros

Añadir ficheros para la realización del hito:

  • main.py
  • main_test.py
  • util.py
  • util_test.py

Modificar README

Introducir:

  • Despliegue
  • Heroku
  • Travis
  • Definición de PaaS
  • Definición de rutas
  • Tests

Creación del playbook

Creación de los posibles playbook, para el aprovisionamiento de las máquinas virtuales

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.