Upload
tranthuy
View
218
Download
0
Embed Size (px)
Citation preview
Escu
ela
Po
lité
cn
ica
Su
pe
rio
r d
e L
ina
res
UNIVERSIDAD DE JAÉN Escuela Politécnica Superior de Linares
Trabajo Fin de Grado
______
INFRAESTRUCTURA CLOUD PARA APLICACIONES EN EL
ÁMBITO DE INTERNET DE LAS COSAS
Alumno: Jesús Bermejo Torrent Tutor: Prof. D. Sebastián García Galán
Prof. D. José E. Muñoz Expósito Depto.: Ingeniería de Telecomunicación
Enero 2016
Autor
D. Jesús Bermejo Torrent
VºBº Tutores
Prof. D. Sebastián García Galán Prof. D. José E. Muñoz Expósito
Agradecimientos
El Trabajo Fin de Grado es resultado del esfuerzo y dedicación por parte del autor. Sin
embargo, no hubiera sido posible sin la ayuda de aquellas personas que de una u otra manera
me han apoyado en este esfuerzo. A todas ellas dedico estas líneas de agradecimiento.
En particular, quisiera agradecer a los profesores D. Sebastián García Galán y D. José
Enrique Muñoz Expósito, tutores de este trabajo, su apoyo y dedicación. Sin duda, el interés
estimulado por D. Sebastián y D. José Enrique ha tenido una gran influencia en el desarrollo
del mismo.
Quisiera también agradecer a D. Carlos Fernández, responsable de sistemas en el
Centro de Supercomputación de Galicia (CESGA), su apoyo durante mi estancia en Santiago
de Compostela en el verano de 2014. Durante este período, con la puesta en marcha de mi
primera infraestructura de “Cloud Computing”, me inicié en las tecnologías que permitieron
definir las bases para este trabajo y posteriormente introducirme en tecnologías “Big Data”.
A mi familia, que me ha brindado toda la ayuda posible, me ha animado en todo
momento y han conseguido que pueda disponer del tiempo necesario.
Muchas gracias a todos.
Jesús Bermejo Torrent
Linares 2016
1
TABLA DE CONTENIDO
1 Resumen ...................................................................................................................... 3
2 Introducción.................................................................................................................. 4
3 Objetivos ...................................................................................................................... 7
3.1 Objetivo del Trabajo Fin de Grado ...................................................................... 7
3.2 Organización del Documento .............................................................................. 7
4 Materiales y Métodos ................................................................................................... 9
4.1 Fundamentos Previos y Alcance del Trabajo ...................................................... 9
4.1.1 Internet de las Cosas y la Infraestructura de Telecomunicaciones ............... 9
4.1.2 Cloud Computing ........................................................................................10
4.1.3 Big Data ......................................................................................................12
4.2 Plan del Proyecto ..............................................................................................16
4.2.1 Introducción al Plan del Proyecto ................................................................16
4.2.2 Organización ..............................................................................................16
4.2.3 Metodología de Gestión ..............................................................................16
4.2.4 Programa de Trabajo – Diagrama de Gantt ................................................17
4.2.5 Descripción de las Actividades del Plan......................................................19
4.2.6 Gestión de Riesgos ....................................................................................21
4.2.7 Otros Aspectos Relevantes del Proyecto ...................................................23
4.3 Análisis ..............................................................................................................24
4.3.1 Definición del Sistema ................................................................................24
4.3.2 Hardware del Demostrador .........................................................................26
4.3.3 Entorno Tecnológico de Desarrollo .............................................................30
4.3.4 Estándares y Normas .................................................................................31
4.3.5 Requisitos ...................................................................................................31
4.3.6 Identificación de Actores y Casos de Uso Representativos ........................36
4.3.7 Sensorización/Adquisición de Datos e Interacción con Actuadores/Control 37
4.3.8 Solicitud de Análisis de Datos Masivos .......................................................40
4.3.9 Análisis de la Interfaz de Usuario ................................................................42
4.3.10 Comunicación con Sistemas Externos ........................................................42
4.4 Diseño ...............................................................................................................43
4.4.1 Definición del Sistema – Subsistemas de Diseño .......................................43
4.4.2 Subsistema Infraestructura Cloud-IaaS Computación - OpenNebula ..........44
4.4.3 Subsistema Infraestructura Cloud-IaaS Almacenamiento – Cassandra ......45
2
4.4.4 Subsistema Input/Output – Raspberry Pi y Arduino ....................................51
4.4.5 Subsistema Cloud-IoT PaaS Middleware Computación – Apache Karaf.....52
4.4.6 Subsistema Cloud-IoT PaaS Middleware Analítica - Hadoop y Spark .........58
4.4.7 Subsistema Cloud-SaaS Aplicación – Aplicaciones de Demostración ........62
4.5 Construcción del Demostrador...........................................................................64
4.5.1 Subsistema Infraestructura Cloud-IaaS Computación .................................64
4.5.2 Subsistema Infraestructura Cloud-IaaS Almacenamiento ...........................66
4.5.3 Subsistema Input/Output ............................................................................68
4.5.4 Subsistema Cloud-IoT PaaS Middleware Computación ..............................68
4.5.5 Subsistema Cloud-IoT PaaS Middleware Analítica .....................................69
4.5.6 Subsistema Cloud-SaaS Aplicación ............................................................69
4.6 Pruebas .............................................................................................................72
4.6.1 Alcance y Entorno de Pruebas ...................................................................72
4.6.2 Niveles de Prueba ......................................................................................73
5 Resultados y Discusión ...............................................................................................74
5.1 Resultados del Demostrador Realizado .............................................................74
5.2 Discusión ...........................................................................................................75
6 Conclusiones ...............................................................................................................78
6.1 Posibles Mejoras ...............................................................................................79
7 Referencias Bibliográficas ...........................................................................................80
3
1 RESUMEN
El nuevo paradigma de Internet de las Cosas se encuentra actualmente en sus
comienzos. Sus implicaciones van probablemente más allá de lo que nos podemos
imaginar al considerar un futuro de trillones de dispositivos conectados y transmitiendo
información para gestionar el entorno que nos rodea; comunicaciones, energía,
transporte, fabricación e incluso monitorizando y actuando con nuestro organismo para
mejorar los sistemas actuales de salud.
El presente Trabajo Fin de Grado pretende profundizar experimentalmente en las
arquitecturas y soluciones tecnológicas para abordar este paradigma. En el mismo se
cubre un espectro muy amplio, que va desde la sensorización e interacción con el mundo
físico, al almacenamiento, cubriendo también propuestas de plataforma para el análisis
masivo de datos, frecuentemente denominado tecnologías “Big Data”. Para extraer
conclusiones relevantes se ha desarrollado un demostrador extremo a extremo
incorporando soluciones tecnológicas de última generación para el control y adquisición
de datos y su gestión.
El demostrador desarrollado combina una infraestructura OpenNebula, para dar
soporte a la gestión de máquinas virtuales, con la base de datos NoSQL Cassandra,
altamente escalable y tolerante a fallos. Sobre esta infraestructura se ha incorporado una
solución para analítica basada en Apache Hadoop que posteriormente ha sido migrada a
Apache Spark por su mejor adecuación a los escenarios de Internet de las Cosas.
Para la integración de “las cosas” en la infraestructura de computación y analítica
se introduce el concepto de “IoT Gateway” o “pasarela IoT”. Las pasarelas se basan en
un middleware modular y dinámico orientado a servicios desarrollado sobre OSGi (Open
Services Gateway initiative) implementando el protocolo REST para la interconexión de
servicios distribuidos.
Un escenario real de despliegue se simula con un centro de datos virtual para
procesamiento en tiempo real y otro analítico. Para evaluar el correcto funcionamiento de
la infraestructura propuesta se ha desplegado una pasarela IoT sobre una Raspberry Pi
accediendo a sensores de humedad y temperatura. Sobre la infraestructura de centros de
datos simulados se han desarrollado tres aplicaciones: visualización de valores actuales
de temperatura y humedad, evolución en tiempo real de la temperatura y cálculo de
valores promedio distribuyendo tareas entre distintos nodos analíticos.
Finalmente, se han extraído y discutido conclusiones, identificando áreas de
mejora y expansión del demostrador desarrollado.
4
2 INTRODUCCIÓN
La relación entre los seres humanos y los dispositivos electrónicos con capacidad
de computación ha evolucionado muy rápidamente durante los últimos años definiendo
diferentes eras tecnológicas. Durante los años 60, en la época de los “Mainframes”, se
difundieron en el campo empresarial. Se extendieron al entorno familiar en los años 80,
con el ordenador personal. Diez años más tarde, al aparecer el teléfono móvil, se
establece una relación personal "uno a uno" (Figura 1).
Actualmente, nos estamos moviendo rápidamente hacia una relación de "uno a
muchos". Reproductores Mp3, navegadores para ayuda a la conducción, relojes y
pulseras inteligentes, Smarts-TVs son solo algunos ejemplos del creciente número de
dispositivos con conectividad a Internet. Estos dispositivos interaccionan con
infraestructuras de computación con capacidades impresionantes de procesamiento; es
el comienzo de Internet de las Cosas (Figura 2).
Figura 1: Eras tecnológicas anteriores al Internet de las Cosas
5
Figura 2: Dispositivos con conexión a Internet por cada 100 habitantes (2)
Desde el punto de vista de las infraestructuras de comunicación también podrían
identificarse tres grandes periodos en la expansión de la infraestructura (Figura 3):
Conexión de lugares geográficos dispersos.
Conexión de las personas.
Conexión de las cosas.
6
Figura 3: Evolución hacia Internet de las Cosas – Ericsson (3)
Estamos ante un nuevo escenario que requiere el desarrollo de tecnologías
capaces de afrontar los nuevos retos; el “Cloud Computing” y las tecnologías de “Big
Data” son probablemente las más representativas. Por otra parte, y en paralelo, se está
reduciendo drásticamente el coste de sensores y actuadores, así como de los
procesadores capaces de interactuar con interfaces analógicas y digitales, o incluso de
procesar información localmente con una capacidad de computación creciente. Arduino
(4) y Raspberry Pi (5) son probablemente las iniciativas actuales más representativas en
este campo.
7
3 OBJETIVOS
3.1 Objetivo del Trabajo Fin de Grado
El Internet de la Cosas es un campo cada vez más relevante en contextos de
investigación (1) y a la vez está emergiendo en aplicaciones industriales. El objetivo del
Trabajo Fin de Grado “Infraestructura Cloud para Aplicaciones en el Ámbito de Internet de
las Cosas” es el desarrollo de un demostrador basado en infraestructura Cloud y
tecnologías Big Data que permita experimentar y extraer conclusiones sobre soluciones
tecnológicas adecuadas para aplicaciones en el dominio de Internet de las Cosas.
3.2 Organización del Documento
El presente documento, tras la parte introductoria, se estructura, siguiendo las
recomendaciones para trabajos fin de grado de naturaleza experimental incluyendo un
capítulo de materiales y métodos seguido de la exposición de resultados y su discusión.
Para finalizar se presentan las conclusiones y se incluyen referencias bibliográficas
externas.
El capítulo de materiales y métodos constituye una parte relevante de la memoria
que se descompone a su vez en:
Fundamentos Previos y Alcance del Trabajo. En esta sección se introducen áreas
particularmente relevantes para poner en contexto el trabajo desarrollado. En
particular, incluye información relativa a Internet de las Cosas y a la infraestructura
de Telecomunicaciones, al Cloud Computing y a las tecnologías Big Data.
También se posiciona el alcance del proyecto en relación a estas áreas.
Plan del Proyecto. Esta sección describe la metodología llevada a cabo durante
su desarrollo y el plan de trabajo, incluyendo descripción de las actividades
llevadas a cabo y su organización temporal, recursos, áreas de riesgos más
relevantes y estrategias para minimizar estos.
Análisis. En esta sección se recoge la identificación de necesidades en términos
de requisitos y Casos de Uso UML (6) de alto nivel para definir el alcance de
trabajo. Todo ello, en términos de un lenguaje independiente de las soluciones de
diseño, constituyendo la especificación del sistema a diseñar.
Diseño. Esta sección describe cómo se resuelven, desde el punto de vista de
soluciones software, las necesidades previamente definidas respondiendo a
criterios de calidad (ej. nivel adecuado de abstracción, modularidad,...) que
faciliten su construcción y mantenimiento, así como una posible extensión. En
este caso el lenguaje utilizado es mucho más orientado al dominio software.
8
Construcción. Esta sección resume los aspectos más relevantes relativos a la
codificación y al desarrollo del trabajo, configuraciones e instalaciones necesarias
para su funcionamiento.
Pruebas. En esta sección se describe la estrategia del plan de pruebas y su
alcance, así como los criterios que se utilizan para considerarlas satisfactorias.
En el capítulo de resultados y discusión se exponen los resultados del
demostrador discutiendo los aspectos más relevantes.
Posteriormente se describen las conclusiones del trabajo desarrollado incluyendo
aspectos como observaciones globales relevantes o posibles extensiones futuras.
Finalmente, en las Referencias Bibliográficas se incluyen las fuentes externas utilizadas
para llevar a cabo el trabajo.
9
4 MATERIALES Y MÉTODOS
4.1 Fundamentos Previos y Alcance del Trabajo
Para poner en contexto el desarrollo del presente trabajo e introducir las áreas
particularmente relevantes, a continuación exponemos de manera muy breve el impacto
del Internet de las Cosas en la infraestructura de telecomunicaciones, la computación
Cloud y las tecnologías de Big Data.
4.1.1 Internet de las Cosas y la Infraestructura de Telecomunicaciones
Aunque las implicaciones del Internet de las Cosas van más allá de las
tecnológicas, nos centraremos en estas últimas e inicialmente, al enmarcase este
proyecto en un trabajo fin de grado de ingeniería telemática, en el impacto sobre las
estructuras de telecomunicaciones.
Según la visión de Marcus Weldon, presidente de los laboratorios Bell (inventores
del láser, transistor y Unix entre otras cosas), el sistema de telefonía móvil tendrá que ser
rediseñando durante los próximos años para acomodar sensores, actuadores, cámaras y
las conexiones de control remoto necesarias. La tendencia actual es tan importante como
la Revolución Industrial o la aparición de Internet; es la instrumentalización de todo lo que
nos rodea.
En los próximos años se medirá todo a nuestro alrededor y será posible controlar
la mayoría de las máquinas. Sin embargo, las redes actuales no están preparadas para
gestionar la cantidad de objetos que enviará señales durante los próximos años.
Actualmente, una estación base celular puede gestionar señales de 1.200 dispositivos
aproximadamente, suficientes para los usuarios de telefonía móvil. Durante los próximos
años deberá ser capaz de gestionar 300.000.
La señalización, como muchas otras tareas de computación masiva, se está
moviendo a la nube. Sin embargo, por los requisitos de tiempo real, esta computación es
difícil que pueda realizarse en centros de datos lejanos de manera centralizada. Los
centros de computación deben estar más cercanos a las torres. En el caso de la quinta
generación de las redes móviles (5G), el consenso industrial es mantener latencias de 1
milisegundo para poder llevar a cabo tares de control casi en tiempo real. Por esta razón,
centros de datos podrían estar situados entre 10 y 100 kilómetros de las torres. Las
celdas también deberán estar más distribuidas y cercanas a los usuarios para poder
reutilizar las frecuencias. Celdas más pequeñas, que se han retrasado en el pasado, para
reducir los costes de instalación, podría ser necesarias, permitiendo utilizar frecuencias
10
muy altas. Esto está llevando a la discusión de abrir nuevas bandas con estas
características en algunos Gobiernos (7).
Resumiendo lo anterior, y como consecuencia del Internet de las Cosas, podemos
esperar, no solo mayores necesidades de computación, sino también modelos Cloud más
distribuidos y con requisitos de tiempo real más estrictos que los actuales para permitir la
gestión optima del espectro electromagnético disponible. La evolución de la
infraestructura de comunicaciones puede depender en gran medida de aspectos
legislativos, estandarización y de la relevancia de modelos económicos que justifiquen a
los operadores actuales invertir en nuevas infraestructuras. Aun considerando importante
lo expuesto en este apartado, y el hecho de que soluciones tecnológicas abordadas
pueden ser aplicables también a la infraestructura de red, el desarrollo del demostrador
parte del estado del arte en soluciones disponibles comercialmente.
4.1.2 Cloud Computing
El Cloud Computing o Computación en Nube es un nuevo paradigma de
computación cuya principal característica es la de estar diseñado para funcionar bajo
demanda, utilizando los recursos hardware disponibles según se necesiten, típicamente
de un centro de datos. En este sentido, frecuentemente se le ha asimilado a un servicio
como la electricidad, el agua o el gas. Servicios que una vez contratados permiten un
consumo variable y su facturación es dependiendo del uso. Esta característica es
particularmente importante al modificar radicalmente el modelo de negocio del “producto
software” convencional.
Sin embargo, existen diferencias fundamentales frente a la electricidad, el agua o
el gas, que han catalizado un desarrollo sorprendentemente rápido. En este nuevo
contexto un programador individual, o un grupo pequeño de estos, puede desarrollar una
aplicación y desplegarla a nivel mundial sin coste. Los costes de operación se
repercutirán por el proveedor de la infraestructura dependiendo de los recursos
(computación, almacenamiento y red) utilizados por los usuarios de la aplicación en las
distintas partes del mundo. Esta nueva aproximación, denominada frecuentemente “pay-
as-you-go”, pone al alcance de nuevas microempresas un gran potencial, siendo una de
las principales razones de su rápido desarrollo.
En el caso de las aplicaciones móviles, el Cloud Computing ha permitido el rápido
desarrollo de los “Markets” de aplicaciones móviles, plataformas donde las empresas
(frecuentemente nuevas microempresas) las despliegan a disposición de los usuarios.
Los modelos de negocio en este caso son generalmente el pago por la descarga de la
aplicación o la publicidad que llega al usuario a través de esta. Por el alcance mundial y
11
el gran número de usuarios potenciales ha surgido una nueva categoría de aplicaciones a
precios muy reducidos, originando un despliegue muy rápido del modelo de negocio.
Desde el punto de vista arquitectónico, la elasticidad, entendida como la
capacidad crecer o decrecer en utilización de recursos según la demanda es la
característica fundamental del Cloud. La estructura de las capas de software, sin
embargo, pueden asimilarse a las convencionales funcionando, cada una de ellas, como
un servicio elástico. La equivalencia a continuación facilita el entender como el producto
software tradicional se transforman en servicio bajo el nuevo paradigma así como el
desarrollo del demostrador objetivo del trabajo (Figura 4):
Sistema operativo (producto)-> Infraestructura (como Servicio)
Middleware (producto)-> Plataforma (como servicio)
Aplicación (producto) -> Software (como servicio)
Figura 4: Capas de computación Cloud: IaaS, PaaS, SaaS
Para la gestión por software de la batería de recursos en un centro de datos
(computación, almacenamiento, red) frecuentemente se virtualizan para poder
considerarlos como un “pool” único disponible a compartir por las distintas aplicaciones.
La gestión de las distintas capas Cloud se puede llevar a cabo manualmente, por una
consola de administración, o por software, a través de un API.
12
Bajo este esquema, el dominio del proyecto se define en la Figura 5. Por la
extensión del problema cubriremos las distintas capas desde el punto de vista de Internet
de las Cosas. No abordaremos aspectos de virtualización de red, campo en el que
actualmente hay gran actividad y que, por sí mismo, según hemos introducido, podría ser
objetivo de un amplio estudio independiente.
Figura 5: Alcance del proyecto en el contexto de las áreas introducidas
4.1.3 Big Data
El concepto de Big Data emerge con la aparición de grandes volúmenes de datos
muy difíciles de capturar, almacenar, gestionar, compartir, analizar y visualizar con las
herramientas de base de datos convencionales. Estos nuevos requisitos surgen de
escenarios relativamente recientes.
Consecuencia de la infraestructura y servicios en Internet es un aumento
exponencial de los datos durante los últimos años. El Internet de las Cosas constituye un
punto de inflexión, en una tendencia ya exponencial, que originará un volumen de datos
más allá de la extrapolación de la tendencia durante los últimos años (8).
800 Terabytes, 2000
160 Exabytes, 2006
13
500 Exabytes (Internet), 2009
2.7 Zettabytes, 2012
35 Zettabytes, 2020
En general los escenarios Big Data se caracterizan por un volumen, variedad y
velocidad de generación muy superiores a los gestionados convencionalmente.
Volumen:Gigabyte(109), Terabyte(1012), Petabyte(1015), Exabyte(1018),
Zettabytes(1021)
Variedad: Datos estructurados, semi-estructurados, sin estructura (texto,
imagen, audio, video)
Velocidad: Dinámica, a veces dependiendo del tiempo.
La instrumentación de lo que nos rodea en Internet de las Cosas requerirá
procesar una importante cantidad de información. Su gestión y la toma de decisiones
asociada requerirán la explotación al límite de las tecnologías de Big Data. En la Figura 6
se presenta el valor potencial del Big Data en distintos segmentos del mercado según un
análisis del Instituto Global de McKinsey.
Figura 6: Valor potencial del Big Data
Las tecnologías de Big Data no surgen solo como consecuencia de un gran
volumen de datos en el dominio de aplicación. La infraestructura de computación en sí
14
misma es un área que está originando actualmente un amplio abanico de herramientas
de análisis y gestión de infraestructuras de computación basadas en tecnologías de Big
Data. En el “Hype Cycle” del 2015 de Gartner de la Figura 7 observamos como la
analítica avanzada para el auto-despliegue se servicios se presenta en el vértice y la
plataforma para Internet de la Cosas (IoT Platform) a mitad de la pendiente inicial.
Figura 7: Hype Cycle de Gartner 2015
Como consecuencia de lo anterior, surge un amplio abanico de soluciones en el
entorno de Big Data que, desde el punto de vista tecnológico, se pueden clasificar en las
siguientes áreas:
Almacenamiento
Búsqueda
Procesado/Analítica
Visualización
Aprendizaje
Situando estas áreas en capas representamos el dominio del proyecto en la
Figura 8. Muchas tecnologías de visualización para facilitar la interpretación de grandes
volúmenes de datos están emergiendo actualmente. En general, la más adecuada
dependerá del tipo de problema. En nuestro caso, utilizaremos tecnologías de
15
visualización convencionales, por esta razón no se ha incluido esta capa dentro del
dominio del trabajo.
Figura 8: Capas Big Data y dominio del trabajo.
16
4.2 Plan del Proyecto
4.2.1 Introducción al Plan del Proyecto
En la presente sección se describen los apartados relevantes en relación a la
planificación del Trabajo Fin de Grado cuyos objetivos se han descrito en apartados
anteriores del presente documento.
4.2.2 Organización
En relación a la organización (Tabla 1) se identifican los interesados, principales
funciones y responsabilidades respondiendo a la organización habitual en los Trabajos
Fin de Grado.
Rol/Persona Funciones/ Responsabilidades
principales
Autor: Jesús Bermejo Torrent Desarrollo del trabajo
Tutores:
Prof. D. Sebastián García Galán
Prof. D. José E. Muñoz Expósito
Apoyo y supervisión
Tribunal de evaluación Evaluación del Trabajo Fin de Grado
Tabla 1: Principales actores involucrados en el trabajo fin de grado.
4.2.3 Metodología de Gestión
Una gestión del proyecto basada en metodologías tradicionales de gestión de
proyectos en cascada, o fases secuenciales, es de difícil aplicación debido al hecho de
que las tecnologías base (Cloud Computing y Big Data) constituyen áreas nuevas de
conocimiento para el autor.
Por esta razón se ha optado por un método de gestión próximo a las metodologías
agiles, que facilitan la respuesta de la gestión a la imprevisibilidad. Para el desarrollo del
trabajo se adopta un sistema de desarrollo incremental e iterativo en secuencias
(frecuentemente denominados sprints), muy popular en los desarrollos de Internet. Sin
responder exactamente a modelos de gestión como Scrum (8) u otros, (por estar estos
orientados al desarrollo en equipos) se han adoptado muchas de sus ideas.
Teniendo en cuenta que las metodologías agiles consideran ciclos muy pequeños
y con alto paralelismo entre fases de análisis, diseño, desarrollo y pruebas, en el
Diagrama Gantt (Figura 9) se presenta información a más alto nivel. Se representan
tareas distribuidas en periodos donde el esfuerzo dedicado a las mismas ha sido
representativo, aunque en muchos casos, por la metodología adoptada en el desarrollo,
17
se han llevado a cabo actividades asociadas fuera de los periodos presentados. El
impacto de otras actividades académicas y dificultades durante el desarrollo han llevado
a la revisión de la planificación en varias ocasiones.
Fuera del periodo representado también se han llevado a cabo actividades
relevantes. En particular, durante el verano de 2014, el autor llevó a cabo una estancia en
Santiago de Compostela en la que, apoyado por el Centro de Supercomputación de
Galicia, puso en marcha y configuró una primera versión de la plataforma de Cloud
Computing utilizada en el trabajo para cubrir los requisitos de computación en la capa
IaaS.
4.2.4 Programa de Trabajo – Diagrama de Gantt
A continuación se presenta la planificación del proyecto en un Diagrama de Gantt
(Figura 9) incluyendo las actividades llevadas a cabo. Tras el diagrama de Gantt se
describen las tareas representadas.
19
4.2.5 Descripción de las Actividades del Plan
Tarea Descripción/Objetivo Estimación
Esfuerzo (h)
Fundamentos
Previos
Actividades necesarias para complementar
la formación académica del Grado con los
aspectos teóricos necesarios para llevar a cabo el
trabajo.
50
Cloud Computing Formación en tecnologías de Cloud
Computing. Incluyendo estancia en Santiago de
Compostela apoyado por el Centro de
Supercomputación de Galicia (excluida de la
estimación del esfuerzo).
20
Big Data Formación en tecnologías de Big Data para
el procesado masivo de datos.
20
Middleware Formación en tecnologías de Middleware
idóneo para el desarrollo del demostrador
10
Análisis Identificación de las necesidades del
desarrollo en términos de requisitos y Casos de
Uso (UML) en un lenguaje apropiado para un
potencial cliente o usuario no experto en software,
constituyendo la especificación del sistema a
diseñar.
20
Requerimientos Determinar las expectativas del trabajo fin
de grado en términos de requisitos al sistema a
desarrollar.
5
Casos de Uso Identificación de los diferentes Casos de
Uso posibles del sistema con el objetivo de
determinar la funcionalidad requerida.
7
Selección
Tecnologías
Evaluación y selección de las tecnologías
de desarrollo del proyecto acotando, en la medida
de lo posible, riesgos de origen tecnológico. Más
concretamente, aborda la elección de la
plataforma Cloud IaaS, almacenamiento Big Data,
soporte para analítica, middleware, sistema de
8
20
desarrollo, lenguaje de programación, librerías
auxiliares y entorno de ejecución.
Diseño Descripción de cómo se resuelven desde
el punto de vista software las necesidades
previamente definidas respondiendo a criterios de
calidad (ej. Niveles adecuados de abstracción,
modularidad, ...) que faciliten su codificación y
mantenimiento, así como una posible extensión.
En este caso el lenguaje utilizado es mucho más
orientado al dominio software.
40
Subsistemas de
Diseño
Identificación de los subsistemas a diseñar
en el contexto del análisis llevado a cabo.
7
IaaS Cloud –
OpenNebula
Diseño de la utilización de la plataforma
IaaS Cloud seleccionada – OpenNebula.
4
Big Data –
Cassandra-
Hadoop-Spark
Diseño de la solución Big Data utilizada
incluyendo soporte a almacenamiento y analítica
basada en Cassandra y Spark, Desarrollo
intermedios llevados a cabo con Hadoop y Pig
18
Middleware – OSGi
Apache Karaf
Diseño del demostrador sobre la solución
middleware seleccionada OSGi-Apache Karaf
9
Integración
Sensores
Actuadores
Diseño de la integración de sensores y
actuadores en el demostrador
2
Construcción Construcción del sistema sobre la base del
diseño definido. Incluye las actividades de
codificación así como las configuraciones e
instalaciones necesarias para su funcionamiento.
80
Pruebas Actividades para proporcionar una
cobertura satisfactoria de las pruebas requeridas
durante el desarrollo. Incluye la definición de la
estrategia de pruebas, su alcance y ejecución así
como la definición de los criterios que se utilizan
para considerarlas satisfactorias en el contexto del
trabajo fin de grado.
20
Elaboración de la
Memoria y Entrega
Actividades necesarias para la elaboración
y entrega de la memoria.
75
21
Gestión del Proyecto
Actividades necesarias para la gestión del
proyecto fin de grado incluyendo el tiempo
necesario para la interacción con el tutor y
organización personal, gestionando los riesgos
periódicamente y reasignando prioridades a
tareas y actividades.
15
TOTAL Estimación tiempo total 300
Tabla 2: Descripción de las actividades del plan de trabajo
Los esfuerzos presentados en las tareas descritas en la Tabla 2 responden a una
estimación global de esfuerzo de 300 horas. At tratarse de un trabajo fin de grado
individual no aplica una definición de recursos y asignación de tareas a los mismos según
roles y responsabilidades. En todos los casos, las actividades de desarrollo descritas han
sido llevadas a cabo por el autor.
4.2.6 Gestión de Riesgos
Por el aspecto novedoso de muchas de los temas abordados se ha llevado a cabo
una gestión de riesgos que, sin ser rigurosa, ha servido para priorizar esfuerzos. Una vez
finalizado el proyecto, los riesgos identificados inicialmente son una referencia de interés
para conocer áreas críticas que han tenido que ser gestionadas.
Los riesgos identificados a priori en el Trabajo Fin de Grado se muestran a
continuación en la Tabla 3, evaluados y con las acciones propuestas/llevadas a cabo
para abordarlos. Los valores de probabilidad, impacto y prioridad corresponden al
comienzo del trabajo. Obviamente han ido evolucionando a lo largo del proyecto. Los
valores de prioridad son asignados para no tener más de tres acciones requeridas con
prioridad máxima simultáneamente. Se consideran distintos niveles para estos últimos
valores: Baja, Media-baja, Media, Media-alta, Alta.
Para clasificar los riesgos consideramos como posibles orígenes:
La tecnología del sistema objetivo (tecnológico)
El entorno de desarrollo (entorno de desarrollo)
El desarrollo del proyecto (gestión)
Origen externo a los anteriores (externo)
Origen Descripción Prob Impct Acciones
propuestas
Prio
R
01
Tecnológico
Conocimientos
previos en
Abordar inicialmente
tareas para
Alta
22
Cloud
Computing y
Big Data
insuficientes
Alta Alto desarrollar y
consolidar
fundamentos
tecnológicos.
R
02
Gestión
Estimación
de la
dimensión
del proyecto
inadecuada
Media
-Alta
Medio
-Alto
Adoptar metodología
de gestión que facilite
reacción a
imprevistos.
Aumentar el esfuerzo
inicialmente previsto.
Adaptar requisitos si
fuera necesario.
Media-
Alta
R
03
Externo
Dedicación a
otras
demandas
académicas
requerida
mayor de la
inicialmente
prevista
Media
Medio
-Alto
Modular esfuerzos
entre todas las
demandas
académicas para
gestionar
adecuadamente las
convocatorias
disponibles.
Media
R
04
Externo
Baja por
enfermedad
imprevista
Baja
Medio
-Alto
Intentar adelantarse a
la planificación inicial
en la medida de lo
posible.
Media
R
05
Tecnológico
/ Entorno de
desarrollo
Tecnología
nueva o no
probada
Media
-baja
Medio
-Alto
Elección de
infraestructura de
desarrollo de uso
extendido.
Realizar pruebas
iniciales que permita
identificar problemas
en una fase
temprana.
Cambio de
infraestructura si
fuera necesario.
Media
–Alta
23
R
06
Entorno de
Desarrollo
Pérdida de
información
por averías
en los
equipos de
desarrollo
Baja
Alto
Plan de Back-up
frecuente
Alta
Tabla 3: Riesgos identificados gestionados
4.2.7 Otros Aspectos Relevantes del Proyecto
Por la amplitud del dominio de aplicación y el tecnológico, dominio con una gran
actividad actual y en muy rápida evolución, se prevén a priori posibilidades de expansión.
Se registrarán los criterios de las decisiones tomadas y en las conclusiones de la
memoria se documentarán posibilidades de expansión futuras.
24
4.3 Análisis
En esta sección se recogen las necesidades del desarrollo. Todo ello en términos
de un lenguaje apropiado para un lector potencial no experto en software (usuario en un
caso general), constituyendo la especificación del sistema a diseñar.
Para llevar a cabo el análisis partimos del objetivo del proyecto, identificaremos
requisitos (ambos utilizado plantillas tipo) y definiremos Casos de Uso utilizando
metodología UML (Unified Modeling Language) para definir la funcionalidad requerida en
el sistema a desarrollar. Los casos de uso representarán visualmente un objetivo que un
potencial usuario quiere lograr con el sistema.
4.3.1 Definición del Sistema
El objetivo del Trabajo Fin de Grado “Infraestructura Cloud para Aplicaciones en el
Ámbito de Internet de las Cosas” es el punto de partida para la definición del sistema.
Según expuesto inicialmente se desarrollará un demostrador basado en infraestructura
Cloud que permita experimentar y extraer conclusiones sobre soluciones tecnológicas
adecuadas para aplicaciones en el dominio de Internet de las Cosas.
OBJ–001 Infraestructura Cloud para Aplicaciones en el Ámbito de
Internet de las Cosas
Versión 1.0
Autores Jesus Bermejo Torrent
Fuente Definición del Trabajo Fin de Grado
Descripción El Trabajo Fin de Grado desarrollará un demostrador basado en
infraestructura Cloud que permita experimentar y extraer conclusiones
sobre soluciones tecnológicas adecuadas para aplicaciones en el
dominio de Internet de las Cosas.
Importancia Alta, por constituir la definición del proyecto
Estado El objetivo se encuentra aprobado como consecuencia directa
del alcance del Trabajo Fin de Grado.
Comentarios No aplican comentarios adicionales
Tabla 4: Descripción formal del objetivo del desarrollo
Desde el punto de vista hardware consideramos tres grandes categorías:
Sensores y Actuadores. Dispositivos individuales o en red (ej. redes de
sensores) con capacidad de extraer información y/o actuar sobre las cosas
o el entorno físico.
25
Clientes Cloud o Internet Gateways. Dispositivos con capacidad de integrar
los sensores y actuadores e interaccionar con el Cloud.
Dentro de esta categoría consideraremos dos subcategorías atendiendo a su
capacidad de proceso y almacenamiento. Esta determina en gran medida los entornos
software que pueden procesar.
o Clientes Cloud Limitados
o Clientes Cloud Inteligentes
La barrera entre ambos es frecuentemente difusa. En general, los clientes Cloud
Inteligentes pueden procesar sistemas operativos y middleware de alto nivel, aunque con
limitaciones. En nuestro contexto denominaremos a ambos “IoT Gateways” o pasarelas
IoT.
Servidores. Ordenadores con capacidad de ejecución de infraestructura
Cloud.
Figura 10: Categorías de elementos hardware considerados
Para que el demostrador sea suficientemente representativo debería incluir
dispositivos de cada una de tres categorías mencionadas. Recogeremos este requisito en
una plantilla tipo que utilizaremos para este propósito.
26
RNF-01 Categorías de Elementos Hardware del Demostrador
Versión 1.0
Autores Jesús Bermejo Torrent
Fuentes Memoria del Trabajo Fin de Grado. Análisis.
Objetivos
asociados
OBJ-01: Infraestructura Cloud para Aplicaciones en el Ámbito de Internet de las Cosas
Descripción Para que el demostrador sea suficientemente representativo
debería incluir dispositivos de cada una de las siguientes categorías:
Sensores y Actuadores
IoT Gateways
Servidores
Actores
No aplicable
Comentarios El requisito refiere a la sección de Análisis de la memoria donde
se identifican categorías de componentes hardware en aplicaciones de
Internet de las Cosas.
Tabla 5: Requisito sobre categorías de elementos hardware del demostrador
4.3.2 Hardware del Demostrador
Desarrollando el requisito RNF-01 definimos continuación el hardware a utilizar en
el demostrador:
Sensores y Actuadores:
Sensor DHT11 de Temperatura y Humedad Relativa (Figura 11).
Proporciona información digital de temperatura y humedad del entorno con
las siguientes características:
o Rango de medida de humedad: 20%~90%RH
o Error en la medida de humedad: ±5%RH
o Rango de medida de temperatura: 0~60℃
o Error en la medida de temperatura: ±2℃
o Voltaje de trabajo: 5V
o Tamaño: 28x12x8mm
27
Figura 11: Sensor DHT11 de temperatura y humedad
Relé de dos canales de 5V con optoacoplador (Figura 12).
Cada uno de los canales necesita de 15-20 mA. Provisto de relés
AC250V 10A, DC30V 10A su interfaz estándar puede ser controlada
directamente por un micro-controlador (8051, AVR, PIC, DSP, ARM, MSP430)
Figura 12: Relé de dos canales
Clientes Cloud / Gateways IoT:
En esta categoría se han considerado dos dispositivos representativos de
clientes limitados e inteligentes; Arduino y Raspberry Pi respectivamente.
Arduino UNO R3 ATmega328P ATMEGA16U2 (Figura 13)
o 14 Entradas/salidas digitales
o 6 Utilizables como salidas PWM (Modulación por ancho de pulsos)
o 6 Entradas analógicas
o Alimentación externa 7-12V
o Voltaje de salida 3,3V y 5V
28
Figura 13: Placa Arduino UNO
Raspberry Pi 2 B (Figura 14)
El modelo B de Raspberry Pi 2 es la segunda generación de Raspberry Pi.
Sustituye al modelo original 1 B+ en Febrero de 2015, mejorando sus características con
una CPU ARM Cortex-A7 de cuatro núcleos a 900MHz y 1GB de RAM.
Figura 14: Placa Raspberry Pi 2 modelo B
Como el modelo anterior incluye:
o Puertos USB
o 40 pins GPIO
o 1 puerto HDMI
o 1 puerto Ethernet
o 1 audio y video compuesto de 3.5mm
o 1 interfaz de Cámara (CSI)
o 1 interfaz de Display (DSI)
o 1 slot para tarjeta Micro SD
o 1 núcleo para gráficos 3D VideoCore IV
29
Por su procesador ARMv7, puede ejecutar el rango completo de distribuciones
ARM GNU/Linux incluyendo Snappy Ubuntu Core y Microsoft Windows 10.
Servidor (Figura 15):
o Procesador: Intel(R) Core(TM) i5-3450 CPU 3.10GHz
o Memoria Ram: 8 GB
o Linux Debian 7 64bits
Figura 15: Servidor Intel(R) Core(TM) i5-3450 CPU 3.10GHz
A continuación, en la Figura 16, representamos cada uno de los elementos
seleccionados sobre las categorías identificadas anteriormente.
30
Figura 16: Categorías de elementos hardware y representantes de los mismos
4.3.3 Entorno Tecnológico de Desarrollo
Una característica muy atractiva de las aplicaciones escritas en Java es que son
portables a cualquier hardware siempre que exista una Máquina Virtual Java (JVM) para
ese sistema. Esto permite al desarrollador centrarse en la aplicación y no en las
peculiaridades de la gran variedad de hardware existente. En comparación con otros
lenguajes las ventajas de Java se derivan de los conceptos de alto nivel de programación
que maneja y la gran comunidad de desarrolladores, aumentando la productividad una
vez superada la curva de aprendizaje. En nuestro caso utilizaremos Java como lenguaje
de alto nivel siempre que sea posible. En el caso de considerar Arduino lo natural sería
desarrollar en su sistema de desarrollo habitual.
Una vez seleccionado el lenguaje, se reducen las posibilidades de los entornos de
desarrollo (IDE) más adecuados, que en este caso serían Eclipse o NetBeans. El primero
ha sido el elegido, fundamentalmente, por ser la opción considerada con mayor potencial
y expectativas de futuro.
UML (Unified Modelling Language) se utiliza como tecnología de modelado para el
análisis y el diseño. StarUML es la herramienta utilizada para el dibujo de los diagramas
correspondientes.
En relación el interfaz gráfico, actualmente existen muchos entornos utilizados en
Java para interfaces de usuario como AWT, Swing, SWT, SwingX, JGoodies, JavaFX,
31
Apache Pivot y Qt Jambi. En nuestro caso, por el tipo de visualizador que necesitamos,
utilizaremos las librerías Java JFreeChart (9).
Para los desarrollos en Arduino, existen distintos entornos como Arduino IDE,
Codebender, Eclipse (permitiendo desarrollar en C y C++) y Sublime Text 2. Arduino
IDE, es el entorno de desarrollo original y más difundido. El microcontrolador se programa
en el lenguaje de programación Arduino (basado en Wiring) y el entorno de desarrollo,
basado en Processing.
Resumiendo, el entorno tecnológico para el desarrollo estará compuesto por:
Sistema operativo del demostrador: Debian 7
Sistema operativo para ofimática de apoyo: Windows 7
Herramientas de análisis y diseño UML: StarUML 5.0
Entorno de desarrollo (IDE): Eclipse 4.4 (Luna)
Máquina Virtual: Java versión 1.8.0_20
Interfaz Gráfico: Librerías Java JFreeChart
Esta relación no incluye las distintas plataformas utilizadas para cubrir los distintos
subsistemas identificados en el diseño que se abordarán más adelante.
4.3.4 Estándares y Normas
Los siguientes estándares, normas y guías han sido utilizados como referencia
para el desarrollo del Trabajo Fin de Grado
Metodología de desarrollo: Metodología ágil (inspirada en Scrum)
Modelado Análisis y Diseño: Lenguaje de Modelado Unificado (UML)
Estilo de programación: Convenciones de codificación en Java de Sun
Microsystems
Normas específica para el Trabajo Fin de Grado (9):
Normativa sobre el trabajo fin de grado en la Universidad de Jaén
Normativa sobre trabajos fin de grado en la Escuela Politécnica Superior
de Linares
Normas de estilo y estructura de TFG
Modelo de portada para TFG
4.3.5 Requisitos
Para facilitar la lectura del documento, inicialmente recogemos requisitos con
referencia a secciones previas de la memoria. Estos constituyen el punto de partida para
los casos de uso que constituirán la técnica preferente para la identificación y el análisis
de requisitos. Por su naturaleza iterativa, incremental y evolutiva son adecuados para su
uso en metodologías de desarrollo ágil como la adoptada para el trabajo.
32
A continuación se recogen requisitos reflejados en secciones previas de la
memoria.
RNF-02 Entorno Tecnológico, Estándares y Guías
Versión 1.0
Autores Jesús Bermejo Torrent
Fuentes Memoria. Apartados previos. Ver descripción.
Objetivos
asociados
OBJ-01: Infraestructura Cloud para Aplicaciones en el Ámbito de Internet de las Cosas
Descripción El entono tecnológico y de desarrollo será según lo descrito en
los siguientes apartados:
Entorno Tecnológico
Estándares y Normas
Actores
No Aplica. Requisito Tecnológico de Desarrollo
Comentarios El requisito refiere a una sección previa de la memoria para
enlazar posteriormente con los Casos de Uso que cubren el requisito.
Tabla 6: Requisito sobre entorno tecnológico, estándares y guías
RNF-03 Infraestructura Cloud (IaaS)
Versión 1.0
Autores Jesús Bermejo Torrent
Fuentes Memoria. Fundamentos Previos Alcance del Trabajo.
Objetivos
asociados
OBJ-01: Infraestructura Cloud para Aplicaciones en el Ámbito de Internet de las Cosas
Descripción El demostrador incluirá una infraestructura software (IaaS) que
permita la utilización de recursos de computación bajo demanda, según
el modelo de computación Cloud.
Actores
No Aplica
33
Comentarios Aunque en el caso de nuestro demostrador podría requerirse
intervención manual, en un contexto real este requisito debería cubrirse
con por la infraestructura software, con un mínimo de intervención
humana.
Tabla 7: Requisito de infraestructura Cloud
RNF-04 Plataforma Cloud IoT (PaaS)
Versión 1.0
Autores Jesús Bermejo Torrent
Fuentes Memoria. Fundamentos Previos Alcance del Trabajo.
Objetivos
asociados
OBJ-01: Infraestructura Cloud para Aplicaciones en el Ámbito de Internet de las Cosas
Descripción El demostrador debe proponer una plataforma PaaS que, sobre
la funcionalidad proporcionada por la capa de infraestructura (IaaS),
facilite el desarrollo de aplicaciones IoT.
Actores
No Aplica
Comentarios Aunque en el caso de nuestro demostrador podría requerirse
intervención manual, en un contexto real este requisito debería cubrirse
con por la infraestructura software, con un mínimo de intervención
humana.
Tabla 8: Requisito de plataforma IoT – PaaS
RNF-05 Infraestructura Big-Data (Almacenamiento)
Versión 1.0
Autores Jesús Bermejo Torrent
Fuentes Memoria. Fundamentos Previos Alcance del Trabajo.
Objetivos
asociados
OBJ-01: Infraestructura Cloud para Aplicaciones en el Ámbito de Internet de las Cosas
Descripción El demostrador deberá considerar capacidad de almacenamiento
escalable para cubrir los requisitos de aplicaciones en Internet de las
Cosas.
34
Actores
No Aplica
Comentarios Aunque en el caso de nuestro demostrador podría requerirse
intervención manual, en un contexto real este requisito debería cubrirse
con por la infraestructura software, con un mínimo de intervención
humana.
Tabla 9: Requisito infraestructura Big Data de almacenamiento
RNF-06 Infraestructura Big-Data (Procesamiento/Análisis)
Versión 1.0
Autores Jesús Bermejo Torrent
Fuentes Memoria. Fundamentos Previos Alcance del Trabajo.
Objetivos
asociados
OBJ-01: Infraestructura Cloud para Aplicaciones en el Ámbito de Internet de las Cosas
Descripción El demostrador deberá considerar, en el contexto de las
soluciones tecnológicas elegidas, necesidades de procesamiento de
datos potencialmente muy elevadas.
Actores
No Aplica
Comentarios Aunque en el caso del demostrador desarrollado en el trabajo
esta funcionalidad es limitada, se tendrá en cuenta que en un contexto
real la necesidad de procesamiento podría ser muy elevada.
Tabla 10: Requisito de infraestructura Big Data para procesamiento y análisis
RNF-07 Sensorización/Adquisición de Datos
Versión 1.0
Autores Jesús Bermejo Torrent
Fuentes Memoria. Fundamentos Previos Alcance del Trabajo.
Objetivos
asociados
OBJ-01: Infraestructura Cloud para Aplicaciones en el Ámbito de Internet de las Cosas
Descripción El demostrador deberá contemplar la posibilidad de incorporar un
amplio número de sensores.
35
Actores
No Aplica
Comentarios Aunque en el caso del demostrador desarrollado en el trabajo
esta funcionalidad es limitada, se tendrá en cuenta que, en un contexto
real, podría requerirse integrar en el sistema un elevado número de
sensores.
Tabla 11: Requisito de sensorización/adquisición de datos
RNF-08 Interacción con Actuadores/Control
Versión 1.0
Autores Jesús Bermejo Torrent
Fuentes Memoria. Fundamentos Previos Alcance del Trabajo.
Objetivos
asociados
OBJ-01: Infraestructura Cloud para Aplicaciones en el Ámbito de Internet de las Cosas
Descripción El demostrador deberá contemplar la posibilidad de incorporar un
amplio número de actuadores.
Actores
Usuario
Comentarios Aunque en el caso del demostrador desarrollado en el trabajo
esta funcionalidad es limitada, se tendrá en cuenta que, en un contexto
real, podría requerirse integrar en el sistema un elevado número de
actuadores.
Tabla 12: Requisito de interacción con actuadores/control
RF-01 Interfaz Usuario/Visualización de Datos
Versión 1.0
Autores Jesús Bermejo Torrent
Fuentes Memoria. Fundamentos Previos Alcance del Trabajo.
Objetivos
asociados OBJ-01: Infraestructura Cloud para Aplicaciones en el Ámbito de
Internet de las Cosas
Descripción El demostrador incorporara funciones para visualizar información
de sensores para cubrir funcionalidad de extremo a extremo de manera
36
que permita extraer conclusiones.
Actores
Usuario
Comentarios Aunque el demostrador considerará la posibilidad de visualizar de
manera independiente un gran número de sensores y actuadores, no se
abordarán técnicas específicas de presentación visual de un gran
número de datos para su análisis visual/toma de decisiones, por
considerarse fuera del alcance del trabajo.
Tabla 13: Requisito de interfaz de usuario/visualización de datos
4.3.6 Identificación de Actores y Casos de Uso Representativos
Es relevante destacar que en teoría, y a largo plazo, se prevé que las aplicaciones
en el dominio de Internet de las Cosas serán en gran medida autónomas, no requiriendo
intervención humana explícita durante la ejecución. En nuestro caso consideraremos un
actor humano que tendrá la posibilidad de intervenir, según su voluntad,
independientemente de las leyes que definen la interacción de las cosas.
Consideraremos, por lo tanto, tres actores:
Sensores. Dispositivos que extraen información de las cosas y el medio
físico exterior.
Actuadores. Dispositivos con capacidad de intervenir en el espacio físico
exterior.
Usuario. Actor humano, con posibilidad de intervenir en los actuadores
independientemente de las leyes de comportamiento definidas. También
podrá solicitar el análisis de aspectos concretos para la toma de
decisiones. En particular, en nuestro caso, el usuario podrá visualizar la ela
humedad y la temperatura, la evolución de la temperatura y valores
promedio.
Los actores identificados interaccionan con el sistema en los siguientes Casos de
Uso representativos para el diseño del demostrador:
Sensorización/Adquisición de Datos e Interacción con Actuadores/Control
Solicitud de Análisis. Visualización de valores Históricos, actuaciones de Control
y presentación de valores promedios
Con los diagramas de ambos Casos de Uso pretendemos definir a muy alto nivel
la funcionalidad que implementa el demostrador de la infraestructura, si bien esta estará
diseñada para cubrir necesidades mucho más complejas.
37
4.3.7 Sensorización/Adquisición de Datos e Interacción con Actuadores/Control
El subsistema de adquisición de datos tendrá la capacidad de leer la información
de los sensores y registrar esta de forma masiva. La temperatura y humedad serán dos
ejemplos para demostrar esta funcionalidad (Figura 17).
Pueden definirse leyes de comportamiento que definirán las situaciones en las
que el sistema interviene en el espacio físico exterior a través de actuadores (control). En
nuestro caso se documentará en el diseño, a modo de ejemplo, como se incorporaría un
relé que se activa al superarse un umbral de temperatura.
La situación de los controladores existentes definirá el estado del sistema. En el
diagrama presentado a continuación asumimos que el estado del sistema viene definido
por la situación de los actuadores en un momento determinado. Para una aproximación
más general podrían considerarse estos también almacenado en la infraestructura Big
Data y el estado del sistema definido por el último valor proporcionado por los sensores y
la situación de los actuadores. El usuario podrá sobreponerse a las leyes establecidas
definiendo la situación de los actuadores en cualquier momento.
Figura 17: Caso de uso UML. Sensorización/Adquisición de Datos e Interacción
con Actuadores/Control
38
A continuación (Tabla 14, Tabla 15, Tabla 16, Tabla 17, Tabla 18) se describen los
casos de usos identificados en el diagrama:
CS01 Adquisición Datos
Descripción Adquiere datos del entorno físico exterior o de “las
cosas”
Actores Sensor
Precondición Pasarela (Gateway) inicializada y activado el muestreo
periódico de sensores
Postcondición Información de sensor leída y enviada para
almacenamiento
Flujo normal 1. Lectura de datos del sensor 2. Envío de datos leídos a la infraestructura Big Data para
almacenamiento
Flujo alternativo Si error en lectura de datos del sensor:
1. Informar a log de sistema
Observaciones Ninguna
Tabla 14: Caso de uso adquisición de datos
CS02 Almacenamiento Datos
Descripción Almacena datos de sensores leídos en infraestructura
Big Data
Actores Sensor
Precondición Infraestructura Big Data inicializada y operativa
Recibido dato de sensor externo
Postcondición Información recibida del sensor almacenada
Flujo normal 1. Almacenamiento de la información recibida del sensor con información de tiempo
Flujo alternativo Si error en almacenamiento
1. Informar a log de sistema
Observaciones Ninguna
Tabla 15: Caso de uso almacenamiento de datos
CS03 Leyes Comportamiento
Descripción Evalúa leyes de comportamiento según la información
de los sensores para actuar sobre el entorno exterior o “las
cosas”
Actores -
39
Precondición Lectura de sensor recibida
Postcondición Solicitud de acción sobre actuador realizada (si
relevante)
Flujo normal No hay variación respecto a la medida anterior:
1. Salir
Flujo alternativo Variación respecto a la medida anterior:
1. Evaluar leyes para determinar si debe actuarse sobre los actuadores externos
2. Solicitar acción sobre actuadores si fuera el caso
Observaciones Ninguna
Tabla 16: Caso de uso leyes de comportamiento
CS04 Control
Descripción Interacciona con los actuadores para el control del
entorno exterior o “las cosas”
Actores Usuario
Actuador
Precondición Solicitud de control recibida del sistema o del usuario
Postcondición Solicitud sobre el actuador realizada (si procede)
Solicitud de almacenamiento del nuevo estado del
sistema realizada
Flujo normal 1. Solicitud sobre el actuador
Flujo alternativo Si error:
1. Informar log del sistema
Observaciones Ninguna
Tabla 17: Casos de uso acción sobre dispositivo de control
CS05 Almacenamiento Estado
Descripción Registra el estado actual del sistema
Actores -
Precondición Cambio en actuadores del sistema
Postcondición Nuevo estado de actuadores almacenado
Flujo normal 1. Almacenar nuevo estado del actuador
Flujo alternativo -
Observaciones Ninguna
Tabla 18: Caso de uso almacenamiento de estado
40
4.3.8 Solicitud de Análisis de Datos Masivos
El sistema podrá llevar a cabo análisis masivo de datos a solicitud del usuario
(Figura 18). Para mostrar esta capacidad el demostrador incorpora un ejemplo sencillo, la
presentación, a solicitud del usuario, de valores promedio de temperatura en intervalos de
tiempo definibles por el usuario. La naturaleza masiva de la analística y de los datos se
ha considerado en el contexto de los requisitos no funcionales previos. Por lo que la
infraestructura tendrá la capacidad de análisis masivo, sobre un gran volumen de datos.
Figura 18: Caso de uso UML. Solicitud de análisis de datos masivos
A continuación (Tabla 19, Tabla 20, Tabla 21, Tabla 22) se describen los Casos
de Uso identificados en el diagrama:
CS06 Lectura Datos Relevantes
Descripción Lee de la infraestructura Big Data los datos relevantes
para el análisis solicitado
Actores Usuario
Precondición Datos requeridos por solicitud de análisis
Postcondición Datos relevantes leídos
Flujo normal 1. Lectura de datos relevantes para el análisis solicitado
41
Flujo alternativo Si error:
1. Informar al log del sistema
Observaciones Ninguna
Tabla 19: Caso de uso lectura de datos relevantes
CS07 Análisis
Descripción Realiza el análisis de los datos requeridos por el usuario
Actores Usuario
Precondición Solicitud de análisis requerida por el usuario
Postcondición Resultados de análisis disponibles
Flujo normal 1. Ejecutar algorítmica de análisis
Flujo alternativo Si error:
1. Informar al usuario
Observaciones Ninguna
Tabla 20: Caso de uso solicitud de análisis
CS08 Visualización
Descripción Representa los resultados del análisis llevado a cado
Actores Usuario
Precondición Resultados de análisis disponible
Postcondición Resultados de análisis visualizados
Flujo normal 1. Presentar en dispositivo de salida el resultado del análisis
Flujo alternativo -
Observaciones Ninguna
Tabla 21: Caso de uso visualización de resultados
CS09 Evolución en Periodo
Descripción Analiza la evolución de los sensores durante un periodo,
valor promedio, de tiempo en base a la información histórica
Actores Usuario
Precondición Solicitud de análisis de evolución en periodo requerida
por el usuario
Postcondición Resultado de análisis de evolución en periodo disponible
Flujo normal 1. Ejecutar algorítmica de análisis
Flujo alternativo Si error:
1. Informar al usuario
42
Observaciones Ninguna
Tabla 22: Caso de uso evaluación de evolución en período
4.3.9 Análisis de la Interfaz de Usuario
Al tratarse de un sistema demostrador de una infraestructura, los requisitos a la
interfaz de usuario no son particularmente exigentes. Se requiere que el demostrador
tenga soporte de interfaz de usuario suficiente para demostrar su potencial en:
Presentación de valores/datos asociados a “las cosas” en el momento
actual
Presentación en tiempo real de valores
Analítica sobre valores históricos, valor promedio
4.3.10 Comunicación con Sistemas Externos
El demostrador no considera comunicaciones con sistemas externos.
43
4.4 Diseño
Esta sección describe el cómo se resuelven desde el punto de vista software las
necesidades previamente definidas respondiendo a criterios de calidad (ej. niveles
adecuados de abstracción, modularidad,...) que faciliten su codificación y mantenimiento,
así como una posible extensión. En este caso el lenguaje utilizado en el documento es
orientado al dominio software.
4.4.1 Definición del Sistema – Subsistemas de Diseño
Del análisis realizado identificamos los siguientes sub-sistemas de diseño a
desarrollar (Figura 19):
1. Subsistema Infraestructura Cloud-IaaS Computación.
2. Subsistema Infraestructura Cloud-IaaS Almacenamiento.
3. Subsistema Input/Output
a. Subsistema Raspberry Pi – Sensores & Actuadores.
b. Subsistema Arduino - Sensores & Actuadores.
4. Subsistema Cloud-IoT PaaS Middleware Computación.
5. Subsistema Cloud-IoT PaaS Middleware Analítica.
6. Subsistema Cloud-SaaS Application
En la figura a continuación se presenta la arquitectura del sistema en términos de
los subsistemas identificados.
Figura 19: Arquitectura Software y Subsistemas de Diseño
44
4.4.2 Subsistema Infraestructura Cloud-IaaS Computación - OpenNebula
La infraestructura Cloud de Computación proporciona soporte para la optimización
de la capacidad de proceso en un centro de datos. Existen diversas soluciones, aunque
es un campo muy dinámico actualmente que evoluciona hacia un nuevo concepto de
sistema operativo nativo para aplicaciones cloud. En nuestro caso, utilizamos
OpenNebula (10) como infraestructura para la gestión de máquinas virtuales.
OpenNebula es un proyecto Open Source con una importante contribución española que
permite la gestión de una variedad de hipervisores (KVM, Xen, VMware) (Figura 20).
En nuestro caso utilizamos KVM (Kernel-based Virtual Machine). KVM es una
infraestructura de virtualización que convierte el kernel de Linux en un hipervisor,
permitiéndole la ejecución de máquinas virtuales. Se integró en la versión 2.6.20 del
mismo en Febrero de 2007. Para su ejecución requiere procesadores con extensiones
hardware para virtualización.
Figura 20: Funcionalidad de OpenNebula
4.1.1.1 Entorno OpenNebula del Demostrador IoT
En el demostrador IoT, OpenNebula nos permite configurar un entorno de
demostración con dos centros de datos virtuales cada uno con dos máquinas según el
esquema de la Figura 21. En general, el Frontend ejecuta los servicios OpenNebula
mientras los nodos ejecutarían máquinas virtuales. En nuestro caso, el Frontend de
OpenNebula se ejecuta en otra máquina virtual independiente a las cuatro que se
generarán en el demostrador. El sistema de ficheros NFS deberá configurarse tanto en la
45
máquina virtual del Frontend como en la máquina física donde está instalado para la
gestión adecuada de los ficheros de imágenes. Por otra parte, deben configurarse las
redes a utilizar por las máquinas virtuales.
Figura 21: Despliegue de OpenNebula en el demostrador IoT
4.4.3 Subsistema Infraestructura Cloud-IaaS Almacenamiento – Cassandra
En un escenario de IoT donde un gran número de sensores y actuadores que
adquieren información e interactúan sobre el entorno físico, la necesidad de escalabilidad
horizontal (utilización de un elevado número de nodos) es un requisito difícil de eludir. Por
otro lado, la infraestructura de almacenamiento debe estar disponible en todo momento.
Las bases de datos NoSQL aparecen para dar respuesta a estas necesidades. Al primar
la escalabilidad sobre otras características se diferencian del modelo relacional por tener
diferente aproximación a los esquemas, no permitir Joins y no intentar garantizar ACID
(Atomicidad, Coherencia, Aislamiento y Durabilidad). En general, están orientadas a
arquitectura distribuidas, proporcionando garantías de consistencia débil y soportando
estructuras de datos sencillas. Los tipos dependen de su implementación orientada a
diferentes tipos de aplicaciones:
• Almacenamiento Clave-valor (Precursor Dynamo de Amazon).
46
• Almacenes de Familias de columnas (Precursor Google BigTable,
e.j. Hbase, Cassandra ...).
• Almacenamiento de documentos (Inspiradas en Lotus Notes, e.j.
CouchDB, MongoDB).
• Grafos (Inspiradas en Euler y teoría de grafos).
Para cubrir los requisitos de almacenamiento en un escenario IoT altamente
distribuido y tolerante a perder la conectividad entre nodos debemos escoger entre
garantizar consistencia o la disponibilidad. La necesidad de elección es consecuencia del
teorema de CAP (Figura 22) que establece que en una base de datos no se pueden
garantizar de manera simultánea consistencia, disponibilidad y tolerancia a particiones.
Figura 22: Teorema de CAP
En nuestro caso consideramos necesaria la disponibilidad y la tolerancia a
particiones aunque no se garantice en todo momento la consistencia. En este caso,
distintos nodos de almacenamiento podrían no tener la misma información en el mismo
instante de tiempo, aspecto que se tendrá en cuenta en el diseño si fuera necesario.
La Tabla 1 compara las soluciones alternativas DynamoDB, Cassandra y
CouchDB. Cassandra (11) ha sido elegida como solución de almacenamiento Big Data en
el demostrador IoT tras analizar el tipo de información a registrar y teniendo en cuenta
que al ser open source podremos incorporarla en el demostrador.
47
Nombre DynamoDB Cassandra CouchDB
Descripción Proporcionada
como servicio de
almacenamiento
escalable en el
Cloud de Amazon
Almacenamiento
Clave-Valor con
nombre y formato
de columna
variable para cada
fila. Inspirada en
ideas de BigTable
y DynamoDB
Inspirada en
Lotus Notes
orientada a
almacenamiento
de documentos
Modelo de base
de datos
Almacenamiento
de documentos.
Clave-valor
Clave-valor.
Columnas con
nombre y formato
variable.
Almacenamiento
de documentos.
Sito Web aws.amazon.com/-
dynamodb
cassandra.apache.
org
couchdb.apache.
org
Documentación
Técnica
aws.amazon.com/-
documentation/-
dynamodb
www.datastax.com/
docs
wiki.apache.org/-
couchdb
Desarrollador Amazon Apache Software
Foundation
Apache Software
Foundation
Primera versión 2012 2008 2005
Licencia Comercial Open Source Open Source
Lenguaje de
implementación
Java Erlang
Sistemas
operativos
Disponible como
servicio
BSD
Linux
OSX
Windows
Android
BSD
Linux
OSX
Solaris
Windows
SQL No No No
APIs y métodos
de acceso
RESTful HTTP API Protocolo
propietario
RESTful
HTTP/JSON API
Lenguajes de .Net C# C
48
programación
soportados
ColdFusion
Erlang
Groovy
Java
JavaScript
Perl
PHP
Python
Ruby
C++
Clojure
Erlang
Go
Haskell
Java
JavaScript
Perl
PHP
Python
Ruby
Scala
C#
ColdFusion
Erlang
Haskell
Java
JavaScript
Lisp
Lua
Objective-C
OCaml
Perl
PHP
PL/SQL
Python
Ruby
Smalltalk
Triggers No Si Si
Métodos de
Partición
Sharding Sharding Sharding
Replicación Si Si.
Factores
seleccionables
Replicación
Maestro-Esclavo
MapReduce No Si Si
Concurrencia Si Si Si
Durabilidad Si Si Si
Derechos de
acceso
Derecho de acceso
para usuarios y
roles definibles por
servicios de
identidad y acceso
de Amazon
Derecho de acceso
para usuarios
definibles por
objeto
Derecho de
acceso para
usuarios
definibles por
base de datos
Tabla 23: Comparación bases de datos NoSQL
4.1.1.2 Cassandra
Cassandra (12) es una base de datos NoSQL con un modelo de datos en columna
originalmente desarrollada por uno de los autores de Dynamo, de Amazon, trabajando
49
posteriormente para Facebook. Es una base de datos distribuida y sin un «master» y que
utiliza el protocolo Gossip y con soporte para replicación entre centros de datos
distribuidos geográficamente (Figura 23). La consistencia es ajustable con distintos
métodos (ALL, QUORUM, LOCAL_QUORUM, ONE). DataStax (13) proporciona un driver
para Java que utiliza el leguaje CQL (Cassandra Query Language) para gestionar la
información.
Figura 23: Replicación de datos en Cassandra
4.1.1.3 Simulación de Centros de Datos
Para comprobar el correcto funcionamiento del sistema de replicación
simularemos dos centros de datos utilizando máquinas virtuales. Cada una de ellas
representará un nodo físico. En general, las funciones de analítica pueden requerir una
carga de computación elevada, así como el acceso a un gran número de datos. Para que
las necesidades de computación en funciones analíticas no degrade el comportamiento
del sistema de adquisición y control, que requiere respuesta en tiempo real, se
consideran dos centros de datos con distintas responsabilidades (Figura 24):
Centro de Datos de Adquisición y Control. Llevaría a cabo la adquisición
de datos de los múltiples sensores y las funciones de control.
Centro de Datos Analítico. Orientado a las funciones de análisis masivo de
datos.
50
Como en el demostrador pretendemos únicamente sacar conclusiones relativas a
la idoneidad de la infraestructura propuesta, se considera que la simulación de dos nodos
para cada uno de los centros de datos es suficiente.
Figura 24: Despliegue de centro de datos de adquisición y control y de analítica
4.1.1.4 Modelo de Datos
Cassandra proporciona unas prestaciones muy relevantes para problemas del tipo
de nuestro demostrador que se adapta muy bien al modelo “big table” siempre que las
tablas se diseñen de la manera adecuada. Es una base de datos óptima para almacenar
grades secuencias de datos independientemente de su tipo o tamaño. Las prestaciones
en lectura por clave de fila y rango en columnas son altamente eficientes ya que se
minimiza la búsqueda en disco.
A continuación describimos tres alternativas que pueden cubrir un amplio rango de
escenarios en Internet de las Cosas.
Dispositivo único por fila. El modelo más sencillo es crear filas de datos
para cada dispositivo con el valor del tiempo de cada medida como
nombre de la columna. Como las columnas son dinámicas la fila crecerá
según sea necesario para almacenar los datos.
Partición para limitar tamaño de la fila. Aunque en Cassandra una fila
puede almacenar 2 billones de columnas, en algunos escenarios puede no
ser suficiente. Para solucionar el problema se pueden crear filas
dinámicamente complementando el identificador del dispositivo con parte
de la información del tiempo de las medidas. Podríamos, por ejemplo,
crear filas para las medidas de un determinado sensor durante un mes.
Expiración de columnas. Cassandra soporta tiempo de expiración de
columnas. En aquellos casos en los que nos interese siempre un rango
51
previo a la fecha actual podemos utilizar la opción de que columnas
previas no relevantes vayan desapareciendo automáticamente.
En el demostrador desarrollado en nuestro caso utilizaremos un modelo de datos
de almacenamiento de dispositivo único por fila (Figura 25).
Figura 25: Tablas de datos registrados en Cassandra
4.4.4 Subsistema Input/Output – Raspberry Pi y Arduino
Consideramos el subsistema Input/Output la parte de software que cubre la
interfaz con los sensores y/o actuadores. En particular incluye los drivers y software de
acceso a los dispositivos no desarrollados en Java. En nuestro escenario consideramos
dos casos, representativos de cada una de las pasarelas consideradas; Raspberry Pi y
Arduino.
Subsistema Raspberry Pi – Sensores & Actuadores
El software de acceso al sensor DHT11 incluye las librerías Adafruit.
Desarrolladas en Python, utilizan C para la lectura a bajo nivel de las
entradas/salidas de propósito general en la Raspberry Pi (GPIO). Estas
librerías se instalan y se invocan posteriormente desde el bundle OSGi de
acceso a la información del sensor.
Subsistema Arduino - Sensores & Actuadores
En este caso también pueden utilizarse las librerías Adafruit para
acceso al DHT11 desde Arduino. El acceso a los datos del sensor se llevaría a
cabo desde un bundle Java en el servidor, accediendo a Arduino por un puerto
USB.
En la Figura 26 se representa el despliegue; un único contenedor OSGi
donde la pasarela, al estar en el servidor, sería virtual (sin un soporte físico) y
sin necesidad de soporte de OSGi distribuido (DOSGi). Únicamente se
requiere sustituir el bundle de captura de datos por el correspondiente de
52
Arduino. Con este ejemplo, observamos, también, las grandes ventajas de
reutilización que proporciona un soporte a la modularidad como el de OSGi.
Figura 26: Despliegue OSGi para Arduino
4.1.1.5 Integración de Actuadores
Para la integración de actuadores en el sistema pueden considerarse distintas
alternativas. En general, la solución más idónea dependerá del tiempo de respuesta
requerido y de la distribución del sistema.
La opción más sencilla para sistemas distribuidos con requisitos de tiempo no
elevados es la supervisión periódica de los sensores relevantes para las actuaciones
concretas. En función de la información proporcionada por los sensores se controlarían
los actuadores. Esta aproximación tiene la gran ventaja de estar altamente desacoplada
de la adquisición de información, siendo muy fácil la incorporación de actuadores sin
interferir en el sistema en funcionamiento.
Tiempos de respuesta mucho mejores pueden obtenerse si se evalúa la
necesidad de modificar un actuador en el mismo momento que cambia el valor
proporcionado por un sensor, como se sugería en el análisis. También podrían
incorporarse en el sistema buses distribuidos de altas prestaciones para permitir a los
actuadores suscribirse a la lectura de los sensores y actuar en consecuencia, con tiempo
de respuesta mucho mejores que si son integrados muestreando periódicamente el valor
de los sensores relevantes. Como mencionado anteriormente, en general, la mejor
solución dependerá del tipo de problema a resolver.
4.4.5 Subsistema Cloud-IoT PaaS Middleware Computación – Apache Karaf
Para soportar la capa PaaS (Platform as a Service) utilizaremos OSGi (14), un
sistema modular y dinámico que permite la descarga remota de componentes sin
53
necesitar reinicializar la máquina virtual Java (15). Incorpora un servicio de registro que
permite a los componentes (bundles) detectar nuevos servicios aquellos que
desaparecen para adaptarse dinámicamente, dependiendo de las circunstancias.
Los componentes desplegados tienen un ciclo de vida representado en el gráfico
de la Figura 27.
Figura 27: Ciclo de vida de los bundles OSGi
Utilizaremos un contenedor incluyendo un conjunto de servicios básicos Figura 28,
Apache Karaf (16) (17) (18):
Despliegue en caliente de bundles OSGi permitiendo actualización y borrado.
Soporta las aproximaciones Blueprint y Spring.
Configuración dinámica a través del servicio ConfigurationAdmin.
Sistema de Logging.
Aprovisionamiento de librerías o aplicaciones por distintos métodos.
Integración nativa como un servicio del sistema operativo.
Consola extensible.
Acceso remoto por SSH.
Framework de seguridad basado en JAAS.
Comandos para gestionar múltiples instancias de Karaf.
54
Figura 28: Servicios básicos en Apache Karaf
Este conjunto de servicios proponen una arquitectura básica para un nodo de
computación. Los servicios son únicamente accesibles desde el nodo donde se
despliegan.
4.1.1.6 Servicios distribuidos
En nuestro caso, con pasarelas con capacidad de computación avanzada (como
la Raspberry Pi), el middleware se distribuye entre servidores y pasarelas IoT (Figura 29).
Utilizando el soporte para OSGi distribuido se pueden definir servicios en un contenedor y
estos ser accesibles desde otro más allá de las fronteras físicas de una máquina. DOSGi
(19) es un subproyecto de Apache CXF (20), la implementación de referencia de la
especificación OSGi Remote Service Admin. DOSGi permitiría invocar desde un servicio
A en una pasarela IoT un servicio B disponible en el servidor (fig.29). A continuación
describiremos el funcionamiento del mismo.
55
Figura 29: OSGi Distribuido en el middleware de computación
La especificación de Remote Service Admin define una extensión del modelo de
servicio OSGi. Usando propiedades especiales al publicar un servicio OSGi se puede
transmitir a DOSGi que exporte el servicio para consumo remoto. DOSGi escucha todos
los servicios desplegados en el contenedor local pero solo procesa aquellos que tienen la
propiedad "osgi.remote.interfaces". Si se encuentra la propiedad es exportado con las
interfaces especificadas o con todas las que implementa. Como se lleva a cabo la
exportación puede ajustarse utilizando las opciones de configuración de CXF DOSGi.
Por defecto el servicio se exportará utilizando el transporte servlet de CXF. La
URL del servicio se deriva del nombre de la interfaz. El prefijo del servlet, nombre del host
y numero del puerto por defecto pueden definirse en las opciones de configuración. Por
defecto el servicio utiliza “CXF Simple Frontend” y “Aegis Databinding”. Si la interfaz del
servicio se anota con JAX-WS @WebService entonces el defecto es “JAX-WS frontend” y
“JAXB databinding”.
La información de los servicios se propaga por el soporte al descubrimiento de
DOSGi. En nuestro caso se ha utilizado la implementación Zookeeper (21), por lo que los
metadatos del servicio se escriben en un servidor Zookeeper.
El contenedor 2 monitoriza chequeará localmente los servicios necesarios y si
están disponibles en la implementación de descubrimiento (Zookeeper en nuestro caso).
Para cada servicio encontrado crea un proxy que actúa como servicio OSGi
56
implementando la interfaz. Las peticiones que lleguen se serializan enviándolas al
servicio Endpoint. De esta forma el middleware permite llamadas casi transparentes
configurables, pudiendo usarse exclusivamente el modelo de servicio OSGí para
comunicarse más allá de las fronteras de un contenedor OSGi (Figura 30).
Figura 30: OSGi distribuido
4.1.1.7 Adquisición y Almacenamiento de Datos
En un contexto de adquisición y registro de datos definimos un servicio en la
pasarela (IoTGateway) cuya función será orquestar los servicios de captura de datos
(Datacapture Service) y el de registro de los mismos situado en el servidor (Datacapture
Service). El servicio de captura de datos por su parte interactúa con el subsistema
Input/output mientras que el servicios de registro lo hace con el subsistema Cloud-IaaS
de Almacenamiento basado en Cassandra. Deberá tenerse en cuenta que al invocarse el
servicio de almacenamiento remotamente necesitaremos definir un bundle con el API
del mismo para instalarlo en ambos (Figura 31).
57
Figura 31: Despliegue middleware de computación
4.1.1.8 Interfaz de los Servicios
El servicio IoTgateway orquesta los servicios requeridos en la pasarela a través de
las interfaces definidas en los mismos. Estas se exportan desde bundles específicos,
independientes a los que proporcionan la funcionalidad del servicio.
Servicio Datacapture. Proporciona una interfaz que permite solicitar la
actualización del valor adquirido por una de las entradas de la Raspberry
sensor(String pin)
y obtener valores de humedad y temperatura
getHumedad(), (float)
float getTemperatura(), (float)
Servicio Datapersistence. Proporciona una interfaz para solicitar almacenamiento
de la dirección MAC de la pasarela origen de los datos, marca de tiempo,
humedad y temperatura.
mac (string)
fecha (string)
humedad (float)
temeperatura (float)
58
4.1.1.9 Servicio de Almacenamiento
El servicio de almacenamiento (Datapersistence) importa los paquetes del driver
Java para Cassandra de DataStax encapsulado en un bundle independiente. Utiliza el
protocolo binario CQL (Cassandra Query Language) de esta base de datos. El driver se
comunica con el clúster para registrar, devolver, manipular o borrar datos.
4.1.1.10 Diagrama de Interacción
En el diagrama de la Figura 32 se describe el comportamiento dinámico de los
servicios en el subsistema Middleware de Computación.
El servicio IoTgateway se inicializa una vez que el de persistencia y el de captura
están iniciados. Este lanza un Thread periódico para la captura y almacenamiento de
datos. En caso de error en el almacenamiento se solicita de nuevo conexión hasta que
esta se establezca de nuevo.
Figura 32: Diagrama de interacción. Middleware de computación
4.4.6 Subsistema Cloud-IoT PaaS Middleware Analítica - Hadoop y Spark
Durante los últimos años han aparecido y evolucionado una variedad de
plataformas para abordar una necesidad creciente de analítica derivada del aumento
59
masivo de datos actual. Sin duda alguna, Hadoop (22) ha sido la herramienta que más se
ha extendido conjuntamente con su ecosistema. Hadoop (23) cubre las áreas de
almacenamiento y la del soporte para analítica. En nuestro caso, ya que la base de datos
más idónea para nuestro problema es Cassandra, ha habido que integrar la parte de
analítica sobre Cassandra. Por otra parte, se ha combinado con Pig (24) para facilitar la
creación de programas MapReduce (25), usados en Hadoop. El lenguaje de esta
plataforma es llamado Pig Latin. Este abstrae la programación del MapReduce Java en
una notación que permite trabajar a más alto nivel, similar a SQL en las bases de datos
relacionales.
Sin embargo, la utilización de Hadoop por una amplia comunidad ha permitido
identificar ciertas limitaciones y actualmente existe un desplazamiento de muchos de los
proveedores de plataformas integrables con Hadoop hacia Spark (26) (27), siendo esta
una de las plataformas actuales Big Data con desarrollo software más activo. De hecho,
durante el proyecto, al cambiar la versión de Cassandra utilizada han parecido problemas
de compatibilidad.
La recomendación del proveedor principal de Cassandra en estos momentos es la
utilización de Spark. Por esta razón, nos hemos visto forzados a aumentar
sustancialmente el esfuerzo inicialmente requerido para la consideración de Spark como
solución en nuestro demostrador. A continuación relacionamos diferencias más
relevantes entre ambas soluciones.
Velocidad. Spark ejecuta trabajos de procesamiento por lotes de 10 a 100 veces
más rápido por reducción del número de lecturas y escrituras en el disco. MapReduce no
aprovecha la memoria del clúster Hadoop al máximo. En Spark el concepto de RDD
(conjunto de datos distribuidos en memoria) le permite guardar los datos en la memoria y
almacenarla en disco si y sólo si es necesario y así no tener ningún tipo de barreras de
sincronización que podría ralentizar el proceso. Al utilizar mucho mejor la memoria, el
motor de ejecución de Spark es mucho más rápido que Hadoop MapReduce.
Facilidad de Gestión. Con Spark es posible realizar streaming, procesamiento por
lotes y aprendizaje automático, todo en el mismo clúster. Es posible controlar diferentes
tipos de cargas de trabajo. Si hay una interacción entre diversas cargas de trabajo en el
mismo proceso es más fácil de administrar y asegurar dichas cargas de trabajo, lo que
actualmente es una limitación con MapReduce.
Gestión de flujo de datos en tiempo real. Con Spark es posible modificar los datos
en tiempo real a través de Streaming Spark. Esto se basa en un nuevo modelo de Big
Data para hacer cálculos con ventanas en los flujos de datos utilizando micro lotes.
Hadoop no soporta esta posibilidad.
60
El almacenamiento en caché. Spark tiene tiempos de latencia más bajos por
almacenamiento en caché de los resultados parciales a través de la memoria de los
trabajos distribuidos a diferencia de MapReduce que está orientado por completo al
almacenamiento en disco.
Recuperación. RDD (conjunto de datos distribuidos en memoria) es la abstracción
principal de Spark. Permite la recuperación de nodos fallidos por la re-cálculo y también
incorpora un estilo de recuperación más similar a Hadoop a través de puntos de control.
API. Hadoop MapReduce tiene una API muy estricta poco versátil. En Spark se
abstraen muchos de los detalles de bajo nivel, lo que permite una mayor productividad.
También mecanismos como la difusión broadcast de variables y acumuladores son
mucho más versátiles que los mecanismos existentes en Hadoop.
Scheduler. Como consecuencia de la computación en la memoria Spark incorpora
su propio planificador de flujo, mientras que con la aproximación estándar MapReduce
se necesita un planificador de tareas externo, como Azkaban (28) o Oozie (29), para
programar los flujos complejos.
Cálculos iterativos. Spark es mucho más eficiente siempre y cuando estamos
hablando de cálculos iterativos que deben pasar por encima de los mismos datos varias
veces. Pero cuando se trata de un único paso sobre grandes volúmenes de datos por
ejemplo, la transformación de datos o la integración de datos, entonces es más eficiente
MapReduce, al ser para lo que fue diseñado.
Coste. La memoria en el clúster Spark debe ser por lo menos tan grande como la
cantidad de datos que necesita procesar, ya que los datos tienen que encajar en la
memoria para un rendimiento óptimo. Por lo tanto, si se necesita procesar realmente Big
Data, Hadoop es la opción más barata ya que el coste del espacio en el disco duro crece
a un ritmo mucho menor que el espacio de memoria.
Teniendo en cuenta las prestaciones medidas Spark debería ser más rentable ya
que menos hardware puede realizar las mismas tareas mucho más rápido, especialmente
en la nube, donde se paga potencia informática por uso.
Seguridad. En Hadoop MapReduce tiene más funciones relativas a seguridad (30)
y proyectos como Sentry (31) ya que Spark es un proyecto más reciente.
4.1.1.11 Despliegue del Subsistema Cloud-IoT PaaS Middleware Analítica
La topología de un despliegue típico de Spark es muy similar a la de Hadoop.
Necesitarmos un nodo master Spark (sustituyendo al JobTracker de Hadoop), con el
NameNode y SecondaryNameNode. Los nodos TaskTracker de Hadoop interactuando
con Cassandra se sustituirán por Spark Slaves (Figura 33).
61
Figura 33: Despliegue de Centro de Datos Analítico Cassandra-Spark
En nuestro demostrador el centro de datos analítico esta simulado con dos
máquinas virtuales integrando Cassandra y Spark mientras que el nodo master será
ejecutándose directamente sobre el servidor host (Figura 34).
Spark proporciona acceso al API utilizándose en línea de comandos para analizar
datos interactivamente. Está disponible en Scala (que se ejecuta sobre la máquina virtual)
o en Python. La abstracción más importante en Spark son los elementos distribuidos
denominados RDD (Resilient Distributed Dataset) estos pueden crearse desde los
formatos de entrada Hadoop o transformando otros RDDs. Los RDDs soportan acciones,
devolviendo valores, y transformaciones, que devuelven punteros a nuevos RDDs.
Podemos encadenar acciones y transformaciones para obtener resultados complejos.
MapReduce es un patrón común, popularizado por Hadoop que puede ser implementado
fácilmente en Spark. Spark también soporta conjuntos de datos en memoria caché a nivel
de clúster, muy útil en el caso de acceder a datos de manera repetitiva. Las aplicaciones
utilizando el API Spark pueden llevarse a cabo utilizando Scala, Pyton y Java.
En nuestro caso, para demostrar el funcionamiento, calculamos el promedio de las
temperaturas con Sript en lenguaje Scala integrando las librerías de los drivers
62
correspondientes para acceder a Cassandra. Se crea un RDD con los datos de
temperatura y calculamos el valor promedio ejecutándose en paralelo.
Figura 34: Despliegue Spark demostrador IoT
4.4.7 Subsistema Cloud-SaaS Aplicación – Aplicaciones de Demostración
En el análisis del sistema se definió la funcionalidad a cubrir desde la capa de
aplicación para la visualización de la información de los sensores registrada y resultados
de la analítica. Consideramos tres aplicaciones de demostración: Visualización de datos
actuales, evolución en tiempo real y valores promedio sobre la plataforma de analítica
(Figura 35). Asumimos que los requisitos de tiempo para la presentación de valores
actuales son menos estrictos que los de la evolución en tiempo real de ahí que se
interactúa, en cada caso de demostración, con instancias de Cassandra en distintos
centros de datos.
64
4.5 Construcción del Demostrador
En este apartado se incluye una descripción de las actividades más relevantes
llevadas a cabo en la construcción del demostrador, incluyendo desarrollo software y la
configuración del sistema. Se desarrollan a continuación en el marco de cada uno de los
subsistemas de diseño.
Figura 36: Demostrador IoT
4.5.1 Subsistema Infraestructura Cloud-IaaS Computación
Para la puesta en marcha y configuración de la infraestructura Cloud se llevan a
cabo los siguientes pasos.
Instalación en el Frontend
o Añadir el repositorio de OpenNebula a los de Debian. en nuestro caso
al estar utilizando Debian 7.
# wget -q -O-
http://downloads.opennebula.org/repo/Debian/repo.key |
apt-key add -
# echo
65
"deb http://downloads.opennebula.org/repo/4.10/Debian/7
/ stable opennebula" \
> /etc/apt/sources.list.d/opennebula.list
o Instalar los paquetes requeridos. Se actualizan los repositorios e
instalan los paquetes opennebula, opennebula-sunstone y nfs-kernel-
server correspondientes a OpenNebula, la interfaz gráfica de usuario
(GUI) y el servidor NFS.
o Configurar y lanzar los servicios. Se Inician los servicios oned y se
modifica el archivo de configuración del sunstone /etc/one/sunstone-
server.conf, para acceder al servicio desde maquinas remotas. Se
cambia :host: 127.0.0.1 a :host: 0.0.0.0
o Configurar el NFS. Se exporta /var/lib/one del frontend a los
nodos, añadiendo en /etc/exports:
/var/lib/one/ *(rw,sync,no_subtree_check,root_squash)
o Configurar la clave pública del SSH sin contraseña hacia el nodo y a sí
mismo.
Instalación de los nodos
o Instalar el repositorio en los hosts y los paquetes requeridos, en éste
caso son opennebula-node, nfs-common y bridge-utils.
o Configurar la red. Se conecta la interfaz de red a un puente, editando el
archivo /etc/network/interfaces.
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.1.70
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
o Configurar el NFS. Se añade al fichero /nfs/tab:
192.168.1.69:/var/lib/one/ /var/lib/one/ nfs
66
soft,intr,rsize=8192,wsize=8192,noauto
y se monta a continuación :
# mount /var/lib/one/
o Configurar el emulador de procesadores Qemu de forma que el usuario
oneadmin sea capaz de utilizar libvirt como root
Lanzamiento de la infraestructura
o Se crean las redes virtuales que usarán cada máquina virtual:
- 192.168.1.71, 192.168.1.72 para el centro de datos de
adquisición y control.
- 192.168.1.73, 192.168.1.74 para el centro de datos analítico.
o Se preparan las imágenes que usan en cada máquina virtual, en
formato qcow2.
o Por último configuramos las plantillas de las máquinas virtuales, con los
recursos para cada máquina virtual:
-Cada VM del centro de datos de adquisición de control se le asigna 1
CPU y 1024 MB de memoria.
-Cada VM del centro de datos analítico se le asigna 1 CPU y 2048 MB
de memoria.
o Se ejecutan las máquinas virtuales.
4.5.2 Subsistema Infraestructura Cloud-IaaS Almacenamiento
Instalada la versión de Cassandra 2.1.2, sobre máquinas virtuales gestionadas por
OpenNebula es necesaria la configuración de dos archivos para adaptar la base de datos
distribuida a las necesidades del demostrador. En uno se definen los parámetros
generales de configuración y en el segundo la topología. Por otra parte, hemos de definir
los “keyspaces” que definirán la política de replicación utilizando el lenguaje específico de
Cassandra (CQL). NetworkTopologyStrategy define el número de réplicas de cada
centro de datos. En nuestro caso se replica en dos nodos, tanto en el centro de datos de
adquisición y control como en el analítico, para mantener el servicio en caso de
problemas en una de las máquinas. Para la creación del “keyspace” se accede al shell
CQL de uno de los nodos pertenecientes al clúster por cqlsh:
CREATE KEYSPACE sensor WITH REPLICATION = {'class' :
'NetworkTopologyStrategy', 'DC1' : 2, 'DC2' : 2};
También definiremos las tablas donde se almacenan los valores de los sensores:
CREATE TABLE temperatura ( mac text, fecha timestamp,
temperatura text, PRIMARY KEY (mac, fecha)) with clustering
order by (fecha desc);
67
CREATE TABLE humedad ( mac text, fecha timestamp, humedad
text, PRIMARY KEY (mac, fecha)) with clustering order by
(fecha desc);
A cada uno de los nodos Cassandra en un centro de datos (token ring) se le debe
asignar un rango de valores, que se usarán durante la configuración, ya que los datos se
distribuyen usando un token. Para ello se utiliza la siguiente fórmula proporcionada por
Datastax (15) en el caso de usar un tipo de partición Murmur3Partitioner:
python -c 'print [str(((2**64 / number_of_tokens) * i) -
2**63) for i in range(number_of_tokens)]'
Quedando la asignación de tokens en la siguiente forma:
Data Center 1:
Nodo 1: -9223372036854775808
Nodo 2: 0
Data Center 2:
Nodo 3:-9223372036854775807
Nodo 4:1
A continuación se revisa parte de la configuración de los dos archivos anteriormente
mencionados:
Archivo de parámetros de configuración. Se registran en el fichero
cassandra.yaml , Puede haber diferencias de unos nodos a otros, que en
nuestro caso se limitan a la IP y el valor de los tokens. Comentamos a
continuación las modificaciones y propiedades más relevantes:
o Se modifica en todos los nodos el nombre del clúster al que pertenece:
Cluster name: IoT
o Se configura la dirección IP para escuchar a los otros nodos Cassandra
Listen_address: dirección del nodo
o Para las consultas CQL se usa el puerto 9042:
Native_transport_port: 9042
o Para las consultas de clientes mantenemos el 9160:
-rpc_port: 9160
o Debido a que Cassandra usa una lista de semillas (seeds) para
encontrar otros nodos e identificar la topología del anillo, se define más
de un nodo para tener en cuenta la posibilidad de caídas.
-seeds: “192.168.1.72,192.168.1.71”
o El particionado elegido, Murmur3Partitioner, junto con la
estrategia de replicación, es el responsable de decidir qué datos serán
almacenados en qué nodo:
68
-partitioner:
org.apache.cassandra.dht.Murmur3Partitioner
o Los tokens se configuran según los calculados anteriormente. Se
asignan en la propiedad initial_token.
o Se indica la localización de los nodos, según lo definido en el archivo
cassandra-topology.properties:
-endpoint_snitch: PropertyFileSnitch
Archivo de definición de topología. En el fichero cassandra-
topology.properties se definen los centros de datos.
#Centro de datos de adquisición y control:
192.168.1.71=DC1:RAC1
192.168.1.72=DC1:RAC1
#Centro de datos analítico
192.168.1.73=DC2:RAC1
192.168.1.74=DC2:RAC1
4.5.3 Subsistema Input/Output
En el subsistema Input/Output se han integrado desarrollos llevados a cabo
durante prácticas académicas haciendo accesible los métodos disponibles en la
Raspberry Pi. Los valores de humedad y temperatura capturados de los sensores se
obtienen a través de métodos disponibles a tal efecto:
getHumedad(), (float)
float getTemperatura(), (float)
4.5.4 Subsistema Cloud-IoT PaaS Middleware Computación
Para la construcción de este subsistema instalamos el contenedor OSGi Apache
Karaf en el servidor y en la Raspberry Pi. Se instala también el servidor Zookeeper en el
host, un cliente en la Raspberry Pi y otro en el host para mantener los servicios de OSGi
distribuido sincronizados. OSGi distribuido se configura para comunicación con protocolo
REST.
Se han desarrollado los bundles OSGi siguientes para cubrir las necesidades
identificadas en el diseño y encapsulado los drivers de acceso a Cassadra en un bundle
especifico.
IoTgateway. Orquesta los servicios en la pasarela IoT solicitando servicios
de captura de datos y almacenamiento, según se requiera.
Datacapture. Solicita datos de los sensores
DatacaptureInterfaz. Interfaz de servicio de solicitud de datos a los
sensores
69
Datapersistence. Almacena los datos en la infraestructura de
almacenamiento
PersistenceAPI. Intefaz del bundle de persistencia
OSGI-CassandraDriver. Encapsula driver de Cassandra y todas sus
dependencias externas.
4.5.5 Subsistema Cloud-IoT PaaS Middleware Analítica
Por problemas de compatibilidad detectados durante la fase de construcción ha
sido necesario identificar versiones de Spark y Cassandra compatibles y reconstruir
desde el código fuente del driver la versión compatible con ambos. Una vez instalado se
configuraran los archivos que indican el nodo master y características de los esclavos y
un segundo archivo con la identificación de los esclavos por su IP. También debe
configurarse acceso SSH sin password del master a los esclavos. Aunque existen otros
ficheros que han sido adaptados, los mencionados son los principales.
Ficheros de configuración master-esclavo (spark-env.sh). Incluye la
configuración general del clúster Spark. Ésta configuración debe ser común en
todos los nodos, en ella se incluye la configuración general del clúster. Las
propiedades más importantes definidas son:
o -export SPARK_WORKER_INSTANCES=1
Especifica el número de “workers” en cada nodo
o -export SPARK_WORKER_CORES=1
A cada “worker” se le asigna un core
o -export SPARK_WORKER_MEMORY=1G
Asigna 1 core por “worker”
o -export SPARK_MASTER_IP= 192.168.1.70
Indica la dirección IP del master Spark
Fichero identificativos de los esclavos (slaves). Este fichero se interpreta
exclusivamente en el nodo master. Incluye la siguiente información:
# A Spark Worker will be started on each of the
machines listed below.
192.168.1.73
192.168.1.74
4.5.6 Subsistema Cloud-SaaS Aplicación
El potencial de la capa de aplicación lo demostramos en tres contextos:
o Valores actuales
o Evolución en tiempo real
70
o Analítica sobre valores históricos.
Cada uno de ellos lo desarrollamos de manera independiente
apoyándonos en la plataforma.
Visualización de valores actuales (Figura 37)
Para la visualización de los valores actuales se ha adaptado uno de los
ejemplos para presentar indicadores de la librería JFreeCharts. Lo encapsulamos
en OSGi y lo enlazamos con Casandra
utilizando el bundle OSGI previamente
desarrollado. Como se comentó en el diseño,
asumimos que estamos en un escenario
donde los requisitos de respuestas no son
altos (por ejemplo evolución de la
temperatura ambiental) por lo que esta
aplicación interacciona con una instancia de
Cassandra en el centro de datos destinado a
analítica, para no interferir en el sistema de
adquisición y control.
Visualización en tiempo real (Figura 38)
En el caso de visualización en tiempo-real suponemos que los requisitos
de tiempo, sin ser de tiempo real estricto, son más fuertes que los anteriores. En
este caso, enlazamos la aplicación a una instancia de Cassandra sobre el centro
de datos de adquisición y control. De manera similar al ejemplo anterior, utilizando
JFreeCharts, muestreamos periódicamente la base de datos y presentamos la
evolución de la temperatura de forma gráfica.
Figura 37: Valores actuales de humedad y temperatura
71
Figura 38: Evolución en tiempo real de temperatura
Analítica sobre valores históricos.
Para demostrar el funcionamiento del middleware de analítica Spark se ha
desarrollado un “script” en Scala para calcular valores promedio de los registros
de temperatura. El script carga inicialmente un RDD con los valores de Casandra
de temperatura. Se calcula el valor medio de las temperaturas registradas
paralelizando. Spark proporciona una consola Web desde donde se visualiza el
reparto de carga entre los distintos nodos al solicitar una analítica (Figura 39).
Figura 39: Consola Web Spark
72
4.6 Pruebas
4.6.1 Alcance y Entorno de Pruebas
El método de pruebas en V (32), frecuente en proyectos desarrollados en
cascada, está ampliamente aceptado para pruebas de sistemas software. El guión de
las pruebas está basado en documentos de requisitos que especifican cómo validar
una característica implementada. Sin embargo, este método no puede gestionarse en
proyectos desarrollados con metodologías ágiles y tampoco en el caso de nuestro
trabajo.
Una aproximación por pruebas exploratorias es más ligera, tiene menos
sobrecarga y si se hace correctamente puede tener una cobertura adecuada. Por otra
parte, no se necesita mucha preparación por adelantado para pruebas exploratorias
útiles. Las pruebas, en nuestro contexto, tienen que ser capaz de probar cualquier
cosa, en cualquier momento, con la mínima preparación por adelantado. También
hemos de tener en cuenta el contexto de un único desarrollador y el objetivo de un
trabajo fin de grado.
Teniendo en cuenta lo expuesto y alcance del trabajo se ha adoptado la
siguiente aproximación:
Pruebas exploratorias sobre las áreas novedosas o de riesgo.
Particularmente pruebas cuyo resultado pueda impactar en el diseño.
Pruebas exploratorias de los subsistemas de diseño identificados.
Pruebas de integración de subsistemas de diseño.
Pruebas globales del sistema cubriendo toda su funcionalidad.
En relación al entorno de pruebas, las pruebas son llevadas a cabo por el
desarrollador en su propio equipo, no siendo necesario ningún entorno adicional al
utilizado para el desarrollo. En este mismo entorno se desarrollarán pruebas a los
distintos niveles descritos.
El entorno de desarrollo permite reproducir el comportamiento del sistema con
un número variable de máquinas virtuales. En algunos casos se ha llegado a los
límites de memoria del sistema y los problemas de memoria han exigido reorientar la
aproximación utilizada. En particular, el cambio de Hadoop a Spark ha obligado a
adaptar la configuración de las pruebas debido al hecho de que Hadoop está muy
orientado a trabajar en disco mientras que Spark se basa fundamentalmente en la
utilización de memoria.
73
Obviamente, aunque el entorno de pruebas es útil para comprobar el
comportamiento del sistema desde el punto de vista funcional, no se reproduce el
aumento de prestaciones que se tendría en un entorno real de un centro de datos.
4.6.2 Niveles de Prueba
El esquema de pruebas previamente descrito se puede mapear sobre tres
niveles de pruebas:
Unitarias
o De módulos concretos. Vinculadas a las actividades de instalación,
configuración y desarrollo de módulos o bloques.
o De subsistemas de diseño. Para comprobar el correcto
funcionamiento de cada uno de los subsistemas identificados
Integración de los distintos subsistemas de diseño. Comprobación de la
correcta interoperabilidad entre subsistemas.
Globales. Incluyendo todos los subsistemas
Estos tres niveles de prueba se han llevado a cabo por el desarrollador, autor
de la memoria, tal como descrito en los apartados previos.
74
5 RESULTADOS Y DISCUSIÓN
5.1 Resultados del Demostrador Realizado
Durante el trabajo fin de grado se ha desarrollado un demostrador extremo a
extremo de una infraestructura para aplicaciones en el dominio de Internet de las
Cosas. La plataforma ha sido diseñada en base a requisitos que se presentan en este
tipo de escenarios; un elevadísimo número de dispositivos (sensores y actuadores)
que adquieren información del entorno físico y “las cosas” y la necesidad de actuar
sobre estas para conseguir el objetivo deseado.
En general, un entorno de operación típico de este tipo de plataformas se
implementaría sobre centros de datos distribuidos globalmente. En nuestro caso, se ha
simulado en una infraestructura virtualizada sobre una plataforma Cloud basada en
OpenNebula. Se simulan dos centros de datos; uno asumiendo funciones de
adquisición de datos y control en tiempo real y el otro las de analítica para extraer
conclusiones que determinen acciones futuras.
En el demostrador se ha incorporado una solución de almacenamiento masivo
basada en la base de datos NoSQL Cassandra. Aunque el demostrador se ejecuta en
un entorno limitado, en todas las soluciones adoptadas durante el diseño se ha
considerado que el escenario de un potencial despliegue real sería mucho mayor. De
hecho, existen despliegues basados en la solución de almacenamiento seleccionada
por encima de 75.000 nodos en el caso de Apple y por encima de 2.500 en el caso de
Netflix.
El demostrador considera la posibilidad de incorporar en la infraestructura un
número muy elevado de sensores y actuadores utilizando dispositivos intermedios
(gateways o pasarelas) de dos tipos; inteligentes y limitados. Las pasarelas acceden a
la infraestructura Cloud/Big Data a través de un middleware software basado en
Apache Karaf.
Sobre la infraestructura de almacenamiento se ha integrado otra de analítica
basada en Apache Hadoop que posteriormente fue sustituida por una basada en
Apache Spark de mejores prestaciones para analítica masiva de datos. Esta última
plataforma de analítica considera, incluso, la posibilidad de análisis de flujos de datos
en tiempo real.
Para demostrar el funcionamiento global del sistema extremo a extremo se ha
integrado en la infraestructura propuesta un sensor de temperatura y humedad DHT11
y se han desarrollado programas de visualización de los valores actuales de los
75
sensores, evolución en tiempo real y un ejemplo de analítica sobre datos históricos
utilizando la plataforma Apache Spark.
Los resultados del proyecto demuestran el funcionamiento extremo a extremo
de la plataforma propuesta utilizando soluciones de última generación que cubren un
rango muy amplio de tecnologías. Superados en importante reto que ha supuesto la
puesta en marcha de la infraestructura, su configuración y el desarrollo de módulos
para integrar las distintas áreas, se demuestra el correcto funcionamiento del conjunto,
su potencial para escalar y la facilidad para incorporar nuevos sensores/actuadores,
así como funciones de analítica sobre datos registrados.
5.2 Discusión
Lo primero que llama la atención tras fase de análisis de un trabajo de este tipo
es que todas las soluciones de las tecnologías de la información que se enfrentan a
los nuevos escenarios de Internet de las Cosas son muy recientes. La tecnología
existente previamente no permite abordar los problemas técnicos derivados de la
gestión de la escalabilidad que se presentan en estos escenarios.
Un segundo aspecto que ha sorprendido durante el diseño y construcción del
demostrador es la velocidad en la evolución de las tecnologías relevantes. La
explotación de estas, por parte de la industria de Internet, contribuye a identificar las
limitaciones existentes, abriendo paso a nuevas soluciones a una velocidad sin
precedente. Son muchos los ejemplos durante el desarrollo que podemos utilizar para
documentar lo anterior y que en algunos casos han supuesto retos adicionales a los ya
existentes en el trabajo.
En el campo del Cloud Computing, el tamaño, y como consecuencia la
necesidad de recursos de las máquinas virtuales, está llevando a un despegue muy
rápido de soluciones alternativas más eficientes basadas en contenedores Linux (35).
El rápido despegue de estas soluciones más eficientes está avalado por el hecho de
que en el uso de infraestructuras Cloud la facturación es por recursos consumidos. El
ejemplo más representativo de las tecnologías basadas en contenedores Linux es
Docker (35). Docker utiliza recursos del sistema operativo host, no siendo necesaria la
virtualización utilizada hasta el momento. La infraestructura Cloud OpenNebula está
actualmente evolucionando a gestionar ambas soluciones; máquinas virtuales y
contenedores Docker.
Por encima de los contenedores comienza a aparecer la necesidad de
orquestarlos y emergen recientemente proyectos como Kubernetes (37), liderado por
Google. En capas más bajas, a nivel de sistema operativo, la experiencia en
plataformas distribuidas, como la propuesta, está ayudando a identificar patrones que
76
se repiten en muchas soluciones Cloud Computing/Big Data. Estos se están
trasladando al sistema operativo en proyectos como Apache Mesos (36) .
Analizando la evolución actual, parece claro que las necesidades de las
infraestructuras Cloud está ayudando definir muy rápidamente los requisitos de un
nuevo concepto de sistema operativo. Un sistema operativo dinámicamente extensible
que permita adaptarse a situaciones variables de carga utilizando toda la
infraestructura hardware que se ponga a su alcance e incluso delegando sobre otros
disponibles y geográficamente dispersos.
El campo de analítica de datos no escapa a esta rápida evolución. El Trabajo
Fin de Grado comenzó considerando Apache Hadoop, estándar de facto hasta el
momento para analítica masiva, y ha finalizado con Apache Spark, que mejora el
anterior en muchos aspectos, tal como se describe en el documento.
La rápida evolución actual deriva en problemas de compatibilidad entre
distintas versiones de las plataformas seleccionadas. Durante el desarrollo del trabajo
se ha tenido que construir desde el código fuente algunas de ellas para reproducir
versiones previas y poder integrarlas satisfactoriamente.
Por otra parte, si bien se ha demostrado el correcto funcionamiento de la
solución extremo a extremo, la estabilidad de las plataformas es una incógnita ya que
su evaluación requeriría un funcionamiento de tiempo muy elevado y en condiciones
de carga alta.
Un aspecto importante a destacar es la amplitud tecnológica del campo del
proyecto. Algunas de las áreas cubiertas podrían constituir la base de nuevos
proyectos por sí solas. El trabajo ha estado centrado en la demostración de una
propuesta para satisfacer las necesidades globales de este tipo de problemas
demostrando el correcto funcionamiento en un escenario limitado. Sin embargo, el
diseño ha considerado que el número de servidores y dispositivos podría ser muy
elevado en un escenario de despliegue real.
En el campo del hardware; pasarelas, sensores y actuadores no es ajeno a la
rápida evolución. Nuevos competidores de Raspberry han aparecido durante el
proyecto así como versiones a precios drásticamente más bajos. La Raspberry Pi
Zero, anunciada a finales de 2015 cuesta sólo 5 dólares, siendo un 40% más rápida
que la primera Raspberry Pi. En paralelo se están desarrollando nuevas tecnologías
de bajo consumo por el gran interés de sensores y actuadores sin cables y con alto
nivel de autonomía.
Todo lo anterior avala el gran interés y la oportunidad del proyecto que ha
permitido demostrar la existencia de soluciones actuales para cubrir escenarios de
77
Internet de las Cosas, si bien son muchas las áreas a seguir para mantener los
desarrollos alineados con el estado del arte.
78
6 CONCLUSIONES
Las conclusiones del Trabajo Fin de Grado pueden plantearse desde distintas
perspectivas; como extensión a la formación académica, en el marco del objetivo del
trabajo y como base a posibles mejoras y ampliaciones.
Sin duda alguna, desde el punto de vista académico, el Trabajo Fin de Grado
ha constituido una oportunidad excelente para enlazar con el estado del arte en
tecnologías que actualmente están penetrando en muchos campos, incluso en una
nueva generación de la infraestructura de red. Para la ejecución del trabajo ha sido
necesario complementar la formación académica del Grado en Ingeniería Telemática
con fundamentos teóricos en un abanico amplio de nuevas tecnologías desconocidas
para el autor. Los retos asociados a resolver problemas nuevos han requerido de
evaluaciones y toma de decisiones gestionando riesgos, resultando en una
experiencia muy enriquecedora desde el punto de vista formativo.
En el contexto del trabajo en sí mismo, se han cubierto los objetivos
inicialmente definidos y se han extendido mucho más allá proponiendo una
infraestructura extremo a extremo simulado centros de datos distribuidos.
La descomposición de las capas IaaS, PaaS y SaaS, habituales en Cloud
Computing, en seis subsistemas para llevar a cabo el análisis, diseño y construcción
del demostrador, facilita el desarrollo por división de un problema muy complejo en
otros más elementales; infraestructura de computación, infraestructura de
almacenamiento, interacción con sensores y actuadores, plataforma middleware y
pasarelas, plataforma de analítica y capa de aplicaciones. Por otra parte, esta
descomposición permite soluciones parciales muy desacopladas.
El concepto de “Gateway IoT”, o pasarela, constituye una solución modular y
flexible para integrar las cosas que pueden representarse de manera general en
términos de sensores y actuadores. Un almacenamiento NoSQL con un modelo de
datos basado en tablas orientadas a dispositivo, extensibles y con columnas variables,
se identifica como una solución adecuada por su alta escalabilidad, tolerancia a fallos
y modularidad.
La explotación de escenarios IoT requiere la integración de tecnologías Cloud y
Big Data. La analítica masiva de datos constituye una pieza fundamental para la toma
de decisiones. Separando la infraestructura de tiempo real de la de analítica en
centros de datos independientes se optimiza globalmente el sistema. Durante el
trabajo se ha demostrado la posibilidad y el potencial de las plataformas de analítica
combinadas con nuevas bases de datos orientadas al registro masivo de información,
si bien es cierto que las soluciones actuales evolucionan cada vez más rápido.
79
6.1 Posibles Mejoras
La amplitud de los campos abordados en el trabajo abre un abanico muy
amplio de posibles mejoras o ampliaciones. Algunas han sido introducidas
previamente, otras las relacionaremos brevemente ya que las posibilidades son muy
extensas.
Desde el punto de vista de la tecnología Cloud Computing probablemente el
uso de contenedores Linux como Docker (33), frente a las máquinas virtuales
utilizadas, sería la primera opción a explorar. El papel de las nubes híbridas es
también un área de interés; cómo y a qué proveedor Cloud delegar automáticamente
la necesidad de recursos en picos de carga para evitar la necesidad de diseñar un
sistema para cargas máximas.
La integración de motores de reglas de comportamiento sería otro campo de
expansión. Estas podrían integrase para articular la orquestación de sensores y
actuadores, permitiendo la modificación del comportamiento del sistema sin
programación. El aprendizaje y el papel de la Inteligencia Artificial sobre la capa de
analítica son un paso natural posterior más allá del alcance de este trabajo. De hecho,
las librerías de inteligencia artificial SystemML (34), que evolucionan del conocido
motor de IBM, Watson (35), tiene un alto nivel de compatibilidad con Spark.
En el campo de los dispositivos, existen actualmente desarrollos orientados a
máquinas virtuales Java modulares para dar respuesta a escenarios de Internet de las
Cosas con dispositivos de recursos escasos. Estos podrían estar disponibles a lo largo
de 2016. También nuevas soluciones nativas son relevantes para una integración más
óptima de la infraestructura software en servidores y clientes.
El área de red, para complementar la virtualización de computación y el
almacenamiento, la tecnologías SND (Software Defined Network) (36) y NFV (Network
Function Virtualization) (42) son campos de gran actividad actualmente.
Por otra parte, el trabajo deja intuir que las implicaciones de este tipo de
plataformas van más allá de las tecnológicas. La instrumentalización de todo lo que
nos rodea implica un conocimiento exhaustivo de las acciones de los usuarios y, por
otra parte, actualmente no conocemos los límites de la inteligencia basada
computación. Cómo integrar los requisitos de privacidad y la relación con este tipo de
infraestructuras, sin limitar sus beneficios, son también campos de investigación
relevantes. Iniciativas como la de la IEEE “Smart World y Cybermatics” (38) intentan
profundizar en los nuevos espacios emergentes considerando el Internet de la Cosas
desde una perspectiva más amplia.
80
7 REFERENCIAS BIBLIOGRÁFICAS
1. OECD. OECD Digital Economy Outlook 2015. Paris : OECD Publishing, 2015. pág. 259.
2. Growing Digital an Telco 2.0. STL partners. [En línea]
http://www.telco2research.com/articles/IoT_Impact_On_M2M_New_Endgame.
3. Arduino site. [En línea] https://www.arduino.cc/.
4. Raspberry Pi site. [En línea] https://www.raspberrypi.org/.
5. The 5th International Conference on the Internet of Things (IoT 2015). [En línea]
http://www.iot-conference.org/.
6. Unified Modeling Language™ (UML®) Resource Page. *En línea+ http://www.uml.org/.
7. With IoT mobile networks will never be the same. Marcus Weldon (Bell Labs) perspective. [En
línea] http://technewsrss.com/with-iot-mobile-networks-will-never-be-the-same/.
8. Zhang, Jiawan. Large Scale Data Analytics. [En línea]
9. Scrum Professional Assessments and Training. [En línea] https://www.scrum.org/.
10. JFree home of JFreeChart library. [En línea] http://www.jfree.org/.
11. Normativas e Impresos relacionados con el Trabajo Fin de Grado (TFG). Escuela Politécnica
Superior de Linares. Universidad de Jaen. [En línea]
http://www10.ujaen.es/conocenos/centros/epsl/docencia/trabajofindegrado2.
12. OpenNebula Cloud Management Software. [En línea] http://opennebula.org/.
13. Apache Cassandra ™. *En línea+ http://cassandra.apache.org/.
14. Neeraj , Nishant. Mastering Apache Cassandra, 2nd Edition. Birmingham : Packt Publishing
Ltd, 2013.
15. Datastax Cassandra service company site. [En línea] http://www.datastax.com/.
16. OSGi™ Alliance. The Dynamic Module System for Java. *En línea+ https://www.osgi.org/.
17. McAffer , Jeff , VanderLei , Paul y Archer , Simon . OSGi and Equinox Creating Highly Modular
Java Systems. Crawfordsville, Indiana : Pearson Education, Inc, 2010.
18. Apache Karaf. [En línea] http://karaf.apache.org/.
19. Nierbeck , Achim , y otros, y otros. Apache Karaf Cookbook. Birmingham : Packt Publishing
Ltd, 2014.
20. Edstrom, Johan y Goodyear, Jamie . Learning Apache Karaf. Birmingham : Packt Publishing
Ltd, 2013.
81
21. DOSGi Single Bundle Distribution. Apache CXF. [En línea] https://cxf.apache.org/dosgi-single-
bundle-distribution.html.
22. Apache CXF. An Open-Source Services Framework. [En línea] https://cxf.apache.org/.
23. Apache Zookeper. Highly reliable distributed coordination server. [En línea]
https://zookeeper.apache.org/.
24. Apache Hadoop. [En línea] https://hadoop.apache.org/.
25. White, Tom . Hadoop: The Definitive Guide. Sebastopol : O’Reilly Media, Inc., 2012.
26. Apache Pig. Hadoop. [En línea] https://pig.apache.org/.
27. MapReduce Tutorial. Hadoop. [En línea]
https://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html.
28. Apache Spark™ fast and general engine for large-scale data processing. [En línea]
http://spark.apache.org/.
29. Karau, Holden , y otros, y otros. Learning Spark Lightning Fast Data Analysis. Sebastopol :
O’Reilly Media, Inc, 2015.
30. Open-source Workflow Manager for Hadoop. [En línea] https://azkaban.github.io/.
31. Apache Oozie Workflow Scheduler for Hadoop. [En línea] http://oozie.apache.org/.
32. Hadoop in Secure Mode. [En línea] https://hadoop.apache.org/docs/current/hadoop-project-
dist/hadoop-common/SecureMode.html.
33. Apache Sentry role based authorization for Hadoop. [En línea] http://sentry.apache.org/.
34. Using V Models for Testing. [En línea] https://insights.sei.cmu.edu/sei_blog/2013/11/using-v-
models-for-testing.htmlhttps://insights.sei.cmu.edu/sei_blog/2013/11/using-v-models-for-
testing.html.
35. Infrastructure for container projects. [En línea] https://linuxcontainers.org/.
36. Docker. An open platform for distributed applications for developers and sysadmins. [En línea]
https://www.docker.com/.
37. Kubernetes site. [En línea] http://kubernetes.io/.
38. Apache Mesos. [En línea] http://mesos.apache.org/.
39. Apache SystemML distributed and declarative machine learning platform. [En línea]
http://systemml.apache.org/.
40. Meet Watson the platform for cognitive business. IBM. [En línea]
http://www.ibm.com/smarterplanet/us/en/ibmwatson/.
82
41. Software-Defined Networking (SDN) Definition. [En línea]
https://www.opennetworking.org/sdn-resources/sdn-definition.
42. European Telecommunications Standards Institute (ETSI) NFV Portal. [En línea]
https://portal.etsi.org/tb.aspx?tbid=789&SubTB=789,795,796,801,800,798,799,797,802.
43. IEEE Smart World y Cybermatics. [En línea] http://www.cybermatics.org/.