124 lines
4.2 KiB
Org Mode
124 lines
4.2 KiB
Org Mode
|
#+TITLE: Arquitectura de graphPaname
|
||
|
#+SUBTITLE:
|
||
|
#+AUTHOR: Amin Kasrou Aouam, Alejandro Calle González-Valdés
|
||
|
#+DATE: 2020-04-11
|
||
|
#+PANDOC_OPTIONS: template:~/.pandoc/templates/eisvogel.latex
|
||
|
#+PANDOC_OPTIONS: listings:t
|
||
|
#+PANDOC_OPTIONS: toc:t
|
||
|
#+PANDOC_METADATA: titlepage:t
|
||
|
#+PANDOC_METADATA: listings-no-page-break:t
|
||
|
#+PANDOC_METADATA: toc-own-page:t
|
||
|
#+PANDOC_METADATA: table-use-row-colors:t
|
||
|
#+PANDOC_METADATA: logo:/home/coolneng/Photos/Logos/UGR.png
|
||
|
#+PANDOC_METADATA: lang:es-ES
|
||
|
* Introducción
|
||
|
|
||
|
El patrón arquitectónico es una solución general a un problema de ingeniería de software.
|
||
|
Es esencial elegir un diseño adecuado, dado que esto nos facilita la
|
||
|
implementación, además de evitar antipatrones de diseño.
|
||
|
|
||
|
* Descripción del sistema
|
||
|
|
||
|
El objetivo de este proyecto es crear un sistema de información que permite
|
||
|
visualizar datos de una Smart City. Nos centraremos en la ciudad de París, dado
|
||
|
que ofrece una gran cantidad de recursos públicos y actualizados.
|
||
|
|
||
|
Es un sistema de procesamiento de datos, que podría enmarcarse en la disciplina
|
||
|
de ciencia de datos. El funcionamiento de éste es lineal, a partir de una
|
||
|
entrada (fuentes de datos), pasamos por distintas etapas de procesamiento, hasta
|
||
|
llegar a la salida deseada.
|
||
|
|
||
|
#+CAPTION: Diseño del sistema
|
||
|
[[./diagrams/D1.png]]
|
||
|
|
||
|
* Requisistos del sistema
|
||
|
** Requisitos funcionales
|
||
|
|
||
|
1. *RF1*: Obtención de datos
|
||
|
|
||
|
El sistema debe recolectar los datos necesarios, para su posterior
|
||
|
procesamiento, desde fuentes externas de información.
|
||
|
|
||
|
2. *RF2*: Preprocesamiento de datos
|
||
|
|
||
|
El sistema debe adaptar la información procedente de distintas fuentes a su
|
||
|
representación interna de datos.
|
||
|
|
||
|
3. *RF3*: Procesamiento de datos
|
||
|
|
||
|
El sistema debe clasificar los datos, según los parámetros que decida el
|
||
|
usuario, para obtener información relevante.
|
||
|
|
||
|
4. *RF4*: Creación de gráficas
|
||
|
|
||
|
El sistema debe facilitar la información de forma visual, con distintos tipos
|
||
|
de gráficas.
|
||
|
|
||
|
** Requisitos no funcionales
|
||
|
|
||
|
1. *RNF1*: Seguridad
|
||
|
|
||
|
La página web de consulta será accesible únicamente mediante HTTPS
|
||
|
|
||
|
2. *RNF2*: Escalabilidad
|
||
|
|
||
|
Se podrá aumentar el rendimiento de sistema, con escalbilidad horizontal y/o vertical
|
||
|
|
||
|
3. *RNF3*: Disponibilidad
|
||
|
|
||
|
El sistema estará disponible 24/7, dado que usaremos un clúster de alta disponibilidad
|
||
|
|
||
|
4. *RNF4*: Tolerancia a fallos
|
||
|
|
||
|
Se usará un clúster para permitir que siempre funcione el sistema, aunque
|
||
|
falle una parte.
|
||
|
|
||
|
5. *RNF5*: Copias de seguridad
|
||
|
|
||
|
Se harán copias de seguridad diarias del sistema, además de enviarlas a otro
|
||
|
servidor en caso de que se pierdan los datos locales de backup
|
||
|
|
||
|
6. *RNF6*: Rotación de logs
|
||
|
|
||
|
Se eliminarán los logs del sistema antiguos, cada semana
|
||
|
* Elección del patrón arquitectónico
|
||
|
|
||
|
A partir de la descripción del sistema, y de los requisitos de éste, procedemos
|
||
|
a elegir (especificando las razones que nos llevan a nuestra decisión) el patrón
|
||
|
arquitectónico adecuado.
|
||
|
|
||
|
Como ya establecimos, nuestro sistema funciona de forma lineal, es decir que
|
||
|
tenemos distintos módulos agrupados, a partir de una entrada pasa por distintas
|
||
|
etapas hasta llegar a la salida deseada.
|
||
|
|
||
|
Nuestro primer instinto fue elegir un patrón de diseño por capas, dado que nos
|
||
|
permite separar la presentación de la lógica interna. Esta abstracción permite
|
||
|
desacoplar la parte de procesamiento con la parte gráfica, un paradigma muy
|
||
|
interesante que permite reemplazar un módulo sin reemplazar todo el sistema.
|
||
|
|
||
|
Tras analizar que cada salida de un módulo, era la entrada del módulo siguiente,
|
||
|
nos dimos cuenta que estábamos ante una /pipeline/, y decidimos adoptar el
|
||
|
patrón aquitectónico de *flujos de datos*.
|
||
|
|
||
|
#+CAPTION: Pipeline del sistema
|
||
|
[[./diagrams/D2.png]]
|
||
|
|
||
|
\clearpage
|
||
|
* Descripción de los módulos
|
||
|
|
||
|
Nuestro objetivo es establecer un diseño modular, no monolítico, con el fin de
|
||
|
poder reemplazar los componentes individuales, según las necesidades.
|
||
|
|
||
|
Para ello, dividimos nuestro sistema en 5 módulos:
|
||
|
|
||
|
1. Interfaz gráfica (GUI)
|
||
|
2. Controlador
|
||
|
3. Procesamiento de datos
|
||
|
4. Preprocesamiento
|
||
|
5. Fuentes de datos
|
||
|
|
||
|
Procedemos a desglosar las funcionalidades de cada uno de ellos en la siguiente figura.
|
||
|
|
||
|
#+CAPTION: Descripción de los componentes
|
||
|
[[./diagrams/D3.png]]
|