graphPaname/docs/Architecture.org

124 lines
4.2 KiB
Org Mode
Raw Permalink Normal View History

2020-04-11 21:53:45 +02:00
#+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]]