jueves, 3 de marzo de 2016

Tema 2: Alta disponibiliad y escalabilidad (SWAP2016)

Esta semana hemos comenzado el segundo tema de la teoría (no lo llegamos a terminar en la sesión de teoría del martes), en el que centraremos el estudio en los conceptos de disponibilidad y escalabilidad.

Para casi cualquier empresa resulta de suma importancia mantener su presencia en internet para ofrecer diversos servicios a los usuarios. Es por esto que nuestros servidores deben estar disponibles todo el tiempo que podamos (24/7).

Sin embargo, ningún sistema, por bien administrado que esté, está libre de sufrir caídas. Ese tiempo en que la máquina no dará servicio supone lo que se llama un problema de no-disponibilidad, que puede ser de dos tipos: tiempo de no-disponibilidad programado  o  tiempo de no-disponibilidad no programado.

Lo ideal es que sólo hubiera "tiempos de no-disponibilidad programados" y además, lo más cortos posibles, y siempre planificados y controlados por los administradores (actualizaciones del SO, de aplicaciones o de hardware). Sin embargo, el sistema tarde o temprano acaba sufriendo "tiempos de no-disponibilidad no-programados", debidos a ataques o fallos.

La forma de calcular la disponibilidad de un sistema se basa en la "escala punto nueve":
     100 – (tiempoCaido / periodoTiempo) * 100

Lo habitual es referirlo al periodo de un año, y actualmente los grandes sitios web se conforman con tener un 99.9% (8.76 horas de caída al año) ó 99.99% (52.56 minutos de caída al año).

Para ampliar esta parte, merece la pena leer con atención el artículo disponible en:
  http://www.edgeblog.net/2007/in-search-of-five-9s/

Existen estrategias y mejoras del sistema para mejorar la disponibilidad. Básicamente se trata de usar subsistemas redundantes y monitorizarlos todo el tiempo. Otra opción es configurar los servidores con redundancia mediante el software (p.ej. balancear servidores).


Por otro lado, la escalabilidad es un concepto que hace referencia a cómo el sistema maneja la carga, así como al esfuerzo para adaptarse a nuevos niveles de carga, que pueden deberse a:
 - Cambios en las aplicaciones
 - Fallos o caídas de algunas partes del sistema
 - Incremento del número de máquinas
 - Incremento repentino del número de usuarios del sitio

Para manejar adecuadamente esos diferentes niveles de carga se pueden añadir más recursos al sistema web (actualizar o mejorar el hardware, p.ej.). Sin embargo, si tras mejorar el hardware (puede suponer un coste alto) más adelante llegan cargas mayores, puede quedarse pequeño de nuevo, teniendo finalmente que reestructurar el sistema completo.

Existen dos tipos de escalado:
 - Ampliación vertical, que supone mejorar o incrementar alguna parte del hardware (RAM, CPU, disco de un servidor, etc).
 - Ampliación horizontal, que supone añadir máquinas a algún subsistema (servidores web, servidores de datos, etc).


Finalmente, en cualquier sistema resulta primordial analizar continuamente la carga para detectar a tiempo posibles sobrecargas. Así, si la CPU está cerca del 100% todo el rato y el resto de subsistemas no está sobrecargado, puede ser suficiente con sustituir la CPU antigua por una más potente. Si el uso de RAM es muy alto, veremos un uso alto de disco (por swapping), por lo que incrementando la cantidad de RAM mejorará el rendimiento. Además, un ancho de banda muy bajo puede afectar al rendimiento, y simplemente incrementándolo (contratando una mejor conexión) será suficiente para mejorar las prestaciones del sistema.

Como se comentó en el Tema 1, el escalado más adecuado de un sistema web que debe aceptar altas cargas pasa por configurar una granja web con balanceo de carga. Será un proceso complejo y habrá que preparar las aplicaciones, configurar la red para soportar un tráfico creciente, y configurar el balanceo de carga entre diversos servidores, pero será la forma en que nuestro sistema será escalable y tendrá alta disponibilidad.


En clase planteamos los siguientes ejercicios:
Ejercicio T2.1: Calcular la disponibilidad del sistema descrito en edgeblog.net si en cada subsistema tenemos en total 3 elementos.

Ejercicio T2.2: Buscar frameworks y librerías para diferentes lenguajes que permitan hacer aplicaciones altamente disponibles con relativa facilidad. Como ejemplo, examina PM2: https://github.com/Unitech/pm2 que sirve para administrar clústeres de NodeJS.

Ejercicio T2.3: ¿Cómo analizar el nivel de carga de cada uno de los subsistemas en el servidor? Buscar herramientas y aprender a usarlas.

Ejercicio T2.4: Buscar diferentes tipos de productos: (1) Buscar ejemplos de balanceadores software y hardware (productos comerciales). (2) Buscar productos comerciales para servidores de aplicaciones. (3) Buscar productos comerciales para servidores de almacenamiento.

La entrega de los ejercicios de clase se realizará en una carpeta llamada "trabajos_de_clase" que cada cual mantendréis en vuestro repositorio de la asignatura en github.com

martes, 23 de febrero de 2016

Tema 1: Introducción (SWAP2016)

Este primer tema, de introducción, lo hemos planteado como un caso en el que nos hubieran encargado montar un servidor web para una organización grande.

Aquí podemos optar por uno de dos caminos:
  • o comenzar a montar un servidor e instalar el software que creemos necesario, sin un trabajo previo (que puede ser largo y costoso) de planificación
  • o bien pararnos a analizar las necesidades reales de la organización, dimensionar el servidor adecuadamente, y solo entonces comenzar a trabajar en la configuración.
Si optamos por la primera opción, tras un trabajo inicial sencillo, luego con mucha seguridad acabaremos desarrollando un trabajo de mantenimiento muy grande... En el momento en que el tráfico crezca a cierto nivel, la máquina resultará insuficiente y no podrá servir a los usuarios como debe.

Si optamos por la segunda opción, tras un trabajo inicial (relativamente complejo), acabaremos configurando de un sistema completo, escalable y con alta disponibilidad que nos asegura dar el servicio que se espera.

Otra cuestión es disponer de una máquina en la que el equipo de desarrollo pruebe nuevos módulos, aplicaciones, etc, y sólo cuando estén bien probados se pasen al servidor de producción.

Así pues, la solución más adecuada cuando haya que hacer frente a un alto tráfico de red y dar servicio a millones de usuarios pasa por hacer una granja web. Puede suponer un trabajo y coste extra, pero tendremos un sistema escalable y con alta disponibilidad.

Finalmente, para terminar la clase, hemos comentado varios casos de desarrollo de sistemas web y los posibles problemas que pueden experimentar. De esos casos, algunos fueron sistemas mal planificados, y otros, aunque bien planificados, sufrieron algún grave problema inesperado (ver los siguientes artículos del Availability Digest:

martes, 16 de febrero de 2016

Presentación de la asignatura "Servidores Web de Altas Prestaciones" (SWAP). Curso 2015-2016

Esta tarde hemos hecho la presentación de la asignatura "Servidores Web de Altas Prestaciones".

Para la gestión de la asignatura usaré varios medios electrónicos, de forma que quien no pueda asistir a clase (bien regularmente o algún día aislado), pueda seguir la asignatura sin problemas:
  • Todos los días, tras cada clase, publicaré una entrada describiendo lo explicado en este mismo blog.
  • En Twitter usaré el hashtag #SWAP_UGR para publicar noticias, comunicados, avisos, etc. No es necesario seguirme en Twitter; a través del hashtag podéis acceder a todo lo que publique sobre la asignatura. En cualquier caso, mi cuenta en Twitter es @pacastillo
  • En Telegram he creado el grupo SWAP2016 para mantener el contacto con todos los alumnos que quieran unirse a dicho grupo (totalmente opcional, por supuesto).
  • La entrega de prácticas y el trabajo final de la asignatura la debéis hacer en un repositorio en vuestra cuenta de GitHub https://github.com/   Así pues, si aún no tienes cuenta en esta plataforma, ábrela cuanto antes.

martes, 9 de junio de 2015

Presentación de trabajos de los alumnos. Lunes 8 de junio

El lunes 8 de junio, en las sesiones de teoría y de prácticas, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"DMZ Doble"

El objetivo del trabajo es montar una configuración DMZ Doble (DMZ con Dual Firewall) para proteger los servidores de accesos indebidos a través de la red interna y externa. Se han configurado 6 máquinas virtuales, 2 clientes, 2 firewall (que además funcionarán como router) y 2 servidores. Cada máquina pertencerá a una subred distinta por lo que es necesario definir algunas reglas de enrutamiento para poder tener conectividad. Para finalizar, realizamos la configuración de los firewall a través de iptables que será lo que deniegue o permita el acceso de redes externas o internas a nuestra noza segura (red de servidores).

La memoria está en:
 https://github.com/Ariacus/DMZ-Dual-Firewall


"Instalación y configuración de un servidor NFS en Ubuntu Server"

El trabajo se presenta como una guía concisa explicando en qué consiste el protocolo NFS (Network File System) y cómo implementar su funcionamiento en tres máquinas. De esta forma se sincronizan directorios entre dos clientes y un servidor, sirviendo además de muestra en la compatibilidad de diferentes sistemas operativos funcionando bajo ésta tecnología.

La memoria está en:
 https://github.com/mpvillafranca/swap1415/tree/master/Teoria/Trabajo


"Creando una REST en Node.js"

Este trabajo versa sobre la filosofía REST, y  pretende arrojar un poco de luz sobre sus conceptos, además de dar un ejemplo práctico de una API REST simple hecha con NodeJS, express y mongoDB, que tendrá como funcionalidad gestionar las asignaturas cursadas en una carrera universitaria.

La memoria está en:
 https://github.com/NAEL1/SWAP2015/tree/master/trabajo_SWAP
 https://docs.google.com/presentation/d/1zg3bfa5bl6oVRVxyH3mMYdlThQXXNagAfObId2D1fBA/edit?usp=sharing



"Hardware y Software de Twitter"

En éste trabajo se presentan las herramientas hardware y software utilizadas en Twitter desde su inicio hasta la actualidad, así como los cambios que ha ido realizando para tener mejoras de tiempo (nuevos lenguajes de programación, nuevas bases de datos, software para otras funcionalidades).

La memoria está en:
 https://github.com/cesar2/swap1415/blob/master/Trabajo/Trabajo_Hardware_software_Twitter.md
La presentación está en:
 https://github.com/cesar2/swap1415/blob/master/Trabajo/Presentaci%C3%B3n%20Twitter.pptx


"Openshift"

En este trabajo se presenta OpenShift, explicando qué es, cual es el concepto de PaaS, comentando algunas ventajas, características y sus componentes principales. Además, se ofrece un ejemplo detallado de aplicación web en PHP con almacenamiento de datos en una BD en MySQL.

La memoria está en:
 https://github.com/JesGor/SWAP2015/tree/master/openshift
 

"Despliegue de aplicaciones web Django usando Nginx"

En este trabajo se explican brevemente algunos conceptos sobre Django, Nginx, Gunicorn (wsgi server), Filezilla, Pip. A continuación se detalla, paso a paso, una aplicación montada en local usando los diferentes servicios nombrados, de forma que cualquiera pueda ir montando sus aplicaciones web en un servidor VPS, crear varios virtualhosts, etc.

La memoria está en:
 https://github.com/jesusgn90/SWAP2015/blob/master/Teoria/TrabajoDespliegueVPS.pdf


"Balanceadores de Carga y Algoritmos de Balanceo "

Se han estudiado diferentes balanceadores de carga que están a disposición del usuario como software libre. En este caso se ha usado Nginx, ZenLoader y Octopus, realizándose pruebas con diferentes algoritmos en cada uno de ellos y evaluando el resultado obtenido. Además se comentan las diferencias que existen entre ellos.

La memoria está en:
 https://github.com/javiergarridomellado/SWAP2015/tree/master/TrabajoFinalSWAP
 https://github.com/mabarrbai/swap1415/tree/master/Trabajo%20final


"Conecta tu app iOS con tu servidor"

Este trabajo aborda las particularidades y características de la conexión un servidor con una aplicación para iPhone OS. Se exponen muestras de código y se explica el procedimiento de configuración del servidor para el correcto funcionamiento de la comunicación dispositivo-servidor, tanto en base de datos y código de lado servidor como de lado cliente. El ejemplo con el que se ha realizado el trabajo es una aplicación móvil que gestiona la información que trata otra aplicación móvil destinada al turismo. Contiene la funcionalidad de crear, modificar, editar y borrar los datos, que están ubicados en una base de datos en el servidor.

La memoria está en:
 https://github.com/nicovalero/SWAP


"Seguridad en Apache"

Este trabajo aborda el tema de la seguridad en Apache, tratando las directivas fundamentales tanto en funcionamiento como en demostración, y finalmente detallando cómo hacer uso de la encriptación en apache.

La memoria está en:
 https://github.com/lorenmanu/swap1415

lunes, 8 de junio de 2015

Presentación de trabajos de los alumnos. Lunes 1 y martes 2 de junio

El lunes 1 y el martes 2 de junio, en las sesiones de teoría y de prácticas, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"Configuración de nginx y haproxy"

El objetivo es configurar nginx y haproxy con distintos algoritmos de carga y comparar su rendimiento
utilizando herramientas como apache benchmark y siege.

La memoria está en:
 https://github.com/acasadoquijada/swap1415
 https://github.com/srmf9/SWAP/tree/master/TrabajoSWAP


"OpenShift: Plataforma abierta como servicio"

En este trabajo se detalla el proceso de creación y despliegue de una aplicación web completa en la plataforma OpenShift.

La memoria está en:
 https://github.com/makelele29/SWAP/tree/master/Trabajo
 https://github.com/cr13/SWAP2015/tree/master/Trabajo%20(OpenShift)
 https://github.com/insua1990/SWAP/tree/master/Openshift


"Montar un cluster con raspberry"

Este trabajo consiste en la creación de una granja web con tres raspberrys-pi-2. En él se trata el tema de la instalación del servidor web, el balanceador, la réplica de los archivos y las bases de datos, así como las pruebas de rendimiento. Finalmente se explica la configuración IP para su correcto acceso de forma local y externa, y una pequeña demostración real instalando un CMS donde se muestra el reparto de carga y la réplica de información tanto de ficheros como de las tuplas almacenadas en las bases de datos de cada servidor.

La memoria está en:
 https://github.com/jfranguerrero/SWAP/tree/master/TrabajoFinal


"Granja web en equipos reales"

Se ha configurado una granja web usando 15 equipos reales, de los cuales 12 hacen de servidores web con entorno LAMP + Joomla y los 3 restantes equipos hacen de balanceadores de carga. Uno de ellos es el principal con Nginx, el cual sirve las peticiones a otros 2 balanceadores con HAProxy y Nginx, en los que cada uno envía las peticiones a 6 servidores web finales. Hemos hecho tests de estrés tanto a los servidores web como a los balanceadores con Siege y Apache benchmark.

La memoria está en:
 https://github.com/antoniocordonie/SWAP2015/tree/master/TrabajoFinal
 https://github.com/alexrodriguezlop/swap2015/tree/master/TrabajoFinal


"Granjas Web en Windows"

El uso de granjas web para dar servicio web a los clientes es de vital importancia, por la escalabilidad, la redundancia y la alta disponibilidad que ofrecen. En este trabajo se presenta el desarrollo de parte de las tareas de las prácticas de la asignatura utilizando en este caso las tecnologías de Microsoft. Concretamente, en el trabajo se ha usado Windows Server con IIS en lugar de Apache.

La memoria está en:
 https://github.com/azpe/SWAP_practicas/tree/master/Trabajo%20Teor%C3%ADa%20(Granja%20Web%20en%20Windows)
 

"Windows Azure"

Windows Azure proporciona un entorno gestionado para la ejecución y despliegue de aplicaciones y servicios en la nube. En este trabajo tratamos los servicios que, a nuestro parecer, son los más interesantes para un usuario medio. Se realiza una pequeña introducción seguida de una demostración de la instalación a modo de tutorial de aplicaciones Web, máquinas virtuales (tanto desde la interfaz web que nos ofrece azure como desde nuestra propia máquina a través de la terminal), servicios móviles, servicios en la nube, bases de datos SQL, servicios de almacenamiento y, por último, servicios multimedia.

La memoria está en:
 https://github.com/mortega87/SWAP2015/tree/master/Trabajo_Final


"Configuración de una Base de datos Maestro-Maestro en MYSQL"

En este trabajo se han montado dos servidores de Base de Datos para hacer una configuración maestro-maestro con MySQL. De esta forma, cualquier cambio que realicemos en una de las BD, (ya sea inserción, borrado, actualización, creación de nuevas tablas...), se replicará automáticamente en la otra máquina. Por lo tanto, tendremos siempre todos los datos replicados en nuestros servidores, lo que proporciona alta disponibilidad.

La memoria está en:
 https://github.com/aserranogomez/SWAP14-15/tree/master/Trabajo%20Teoria
 https://github.com/manolotello7/SWAP14-15/tree/master/Trabajo


"Instalación en máquina virtual en Azure de servidor XMPP y muestra con clientes"

Son muchas las posibilidades de sacar rendimiento a un servidor en la nube, y una de las mejores plataformas para ello es Azure, desde la cuál podemos montar un servidor a nuestro gusto. Ua de las posibilidades para ese servidor es el poder instalar un servicio como Ejabber para interconectar clientes y poder tener nuestro propio servicio tipo "Skype". Así podemos ofrecer llamadas, videollamadas, chats, conferencias, etc.

La memoria está en:
 https://github.com/RaulSFuentes/SWAP2015/blob/master/trabajo/trabajo.md
 https://www.powtoon.com/show/g3f1Br8sZvF/swap/#/


"iptables y firewall"

Este trabajo presenta la herramienta iptables, el complemento de netfilter. Se han descrito la sintaxis y las órdenes básicas así como algunos ejemplos de bloqueos, de prerouting, y del mantenimiento de archivos log.

La memoria está en:
 https://github.com/migueib17/SWAP2015/tree/master/TRABAJO


"Qué es memcached y demo de cómo usarlo"

Este trabajo presenta la herramienta Memcached, que se emplea para el almacenamiento en cache de datos u objetos en la memoria RAM, reduciendo así las necesidades de acceso a un origen de datos externo. Funciona mediante una arquitectura cliente-servidor, tanto en un mismo ordenador como en varios, organizados por algoritmos hash que se encargan de la organización de memoria. Se incluye una demo detallando cómo usar la herramienta.

La memoria está en:
 https://github.com/reyic/SWAP1415/tree/master/Trabajo%20Memcached


"Replicación de máquinas virtuales usando la herramienta Amazon EC2"

En este trabajo se presenta el uso de la plataforma Amazon EC2 para la virtualización de servidores en la nube con el objetivo de crear y gestionar granjas web. También se explican las características de esta plataforma, se enseña cómo crear una cuenta y finalmente se presenta un caso práctico: crear una granja de servidores localizada en Irlanda sobre la que aplicamos algunos de los conocimientos adquiridos en las prácticas.

La memoria está en:
 https://docs.google.com/presentation/d/1XF0Nm-N7MLAiIFSDUFpJN_BTXyOo_hkbX6itO8uxtcU/edit?usp=sharing


"haproxy – heartbeat – nginx"

Este trabajo trata acerca de cómo montar una granja web con alta disponibilidad con balanceo de carga en Ubuntu Server 12.04 utilizando HAProxy, HeartBeat y Nginx. Para ello utilizaremos dos balanceadores con HAProxy en los que uno estará funcionando y el otro no. En el momento en que uno de los servidores falle, el otro lo detecta por medio del servicio Heartbeat y pasa a ser el que controle el balanceo.

La memoria está en:
 https://github.com/leocastillo/swap1415/tree/master/Trabajo_haproxy%20%E2%80%93%20heartbeat%20%E2%80%93%20nginx
 https://github.com/juaneml/SWAP2015/tree/master/TRABAJO


"Comparación del hardware para servidores web IBM, HP, Dell y Fujitsu"

En este trabajo se lleva a cabo una comparación del hardware para servidores web de altas prestaciones de las siguientes empresas: Fujitsu, DELL, IBM, HP. En el trabajo se realiza una comparativa de los principales productos de estos fabricantes y se analiza el hardware usado por diferentes empresas de hosting en España.

La memoria está en:
 https://github.com/MigueSantiago/Trabajo_Swap


"Asegurar Apache"

Este trabajo consiste en asegurar un servidor web con el software Apache, concretamente con la versión 2.2, usando las herramientas nos ofrece para hacerlo más seguro. Primero se estudian varios conceptos de la configuración del servidor (Usuarios, directorio raíz, módulos del servidor). Después se utilizan varias directivas de configuración que nos ofrece Apache para la implementación de seguridad. Se profundiza en los siguientes temas: Archivos de configuración, Ocultar información del servidor, Control de acceso, Autenticación. Por último, se introducen las directivas más importantes para la seguridad ante ataques DOS y se comenta cómo configurar las conexiones SSL en Apache.

La memoria está en:
 https://github.com/alvaro-gr/SWAP2015/tree/master/Trabajo_Clase/Trabajo


"Análisis y comparación de algoritmos de balanceo con Nginx y HAProxy"

En este trabajo se presenta un estudio comparativo de diversas estrategias de balanceo de carga con Nginx y HAProxy. A partir de un entorno simulado, compuesto por máquinas virtuales con servidores web Apache y diferentes características de hardware, se genera un volumen elevado de peticiones para analizar el efecto resultante de cada algoritmo de balanceo de carga en los tiempos de respuesta y otras métricas relevantes.

La memoria está en:
 https://github.com/paul21/swap2015/tree/master/presentacion

miércoles, 3 de junio de 2015

Presentación de trabajos de los alumnos. Viernes 29 de mayo

El viernes 29 de mayo, en la sesión de prácticas, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"Memcached y demo de cómo utilizarlo"

Memcached es un sistema de alto rendimiento para el almacenamiento de objetos en caché, pensado principalmente para acelerar aplicaciones web dinámicas, aliviando así la carga de las bases de datos. Utiliza la biblioteca libmemcached para proveer a la API que usemos de comunicación con servidores de memcached. Es una gran herramienta usada por varios de los sitios más activos y visitados de la red, lo que refleja su gran utilidad a pesar de su simpleza. Además de indagar en su funcionamiento y sus ventajas, así como en qué sitios web las usan, mostramos los pasos necesarios para la instalación y un ejemplo sencillo de uso.

La memoria está en:
 https://github.com/MariaOrgaz/swap1415/tree/master/trabajo
 https://github.com/CarmenArcos/swap1415/tree/master/trabajo


"node.js"

node.js representa a toda una nueva generación de tecnologías web que, basadas en el uso de JavaScript en el lado del servidor, están facilitando e impulsando la creación de nuevas herramientas de desarrollo. Este trabajo sirve como introducción a node.js, desarrollando algunos aspectos técnicos de su construcción pero sobre todo explicando su funcionamiento desde un punto de vista a más alto nivel, haciendo hincapié en sus ventajas y en las posibilidades de uso que proporciona. Se referencian varios benchmarks que lo comparan con otras tecnologías como Java EE o Apache+PHP y, finalmente, se presentan algunos ejemplos de código.

La memoria está en:
 https://github.com/agarciamontoro/swap1415/tree/master/Trabajo


"Microsoft Azure"

En este trabajo se lleva a cabo una introducción a la plataforma Microsoft Azure. Vemos sus principales características y los servicios más interesantes que ofrece. En un apartado más práctico realizamos la configuración y creación de una aplicación web con Visual Studio Express y posteriormente mostramos el mantenimiento de las aplicaciones creadas.

La memoria está en:
 https://github.com/Yujadeh/swap1415/tree/master/Trabajo


"Configurar un hosting Web"

En este trabajo se describe cómo instalar un host web casero, partiendo de un PC que ya tengamos y con costo prácticamente nulo (la electricidad que consuma) y a continuación se ofrecen unos consejos muy útiles para resolver una serie de problemas que se nos plantearán una vez tengamos el host en marcha.

La memoria está en:
 https://github.com/neon520/SWAP/tree/master/Trabajo
 https://github.com/asolisi/swap1415/tree/master/Trabajo
 

"Sistema de archivos Lustre"

Lustre es un sistema de ficheros paralelo, que es eficiente, escalable y transparente al cliente. Por ello, es ampliamente utilizado en supercomputadores y empresas con la necesidad de tener sistemas de archivos distribuidos (meteorología, finanzas, etc). En este trabajo se presentan las propiedades del sistema de archivos Lustre y se detalla cómo realizar la instalación.

La memoria está en:
 https://github.com/cparadela/swap1415/tree/master/TrabajoSWAP


Presentación de trabajos de los alumnos. Jueves 28 de mayo

El jueves 28 de mayo, en la sesión de teoría, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"High Availability, Load Balancing y Replication con PostgreSQL"

En este trabajo se muestra cómo realizar replicación de bases de datos entre un servidor maestro y otro servidor esclavo con PostgreSQL. Basándose en lo realizado en la práctica 5 con MySQL, se han creado y configurado dos máquinas virtuales conectadas entre sí por medio de una red interna. A continuación se ha creado una base de datos en la máquina maestro con una serie de datos para después replicarla en la máquina esclavo. De esta forma, cualquier cambio que se realice en el maestro se verá reflejado automáticamente en el esclavo.

La memoria está en:
 https://github.com/juanvelascogomez/swap1415/tree/master/Trabajo_Final
 https://github.com/msmaldonado/swap1415/tree/master/Trabajo_Final


"Computación Acelerada por GPU y OpenCL"

En este trabajo se presenta qué es la computación acelerada por GPU, cómo usarla, a qué está destinada y cuándo realmente es útil. Además, se ofrece un tutorial para aprender el funcionamiento de OpenCL mediante la programación del algoritmo daxpy aprovechando el potencial de cálculo de la GPU para la tarea, viendo así las ventajas de ésta para operaciones de cálculos pequeños pero exhaustivos.

La memoria está en:
 https://github.com/Darth-ATA/swap1415/tree/master/Trabajo


"Wireshark"

En este trabajo se proporciona al lector una primera aproximación a Wireshark, mostrando sus principales funcionalidades y uso básico, como una guía de iniciación a la herramienta. Para alcanzar este objetivo usaremos Wireshark para distintas tareas: robar una contraseña, detectar un ataque de denegación de servicio o ver los mensajes que se envían las máquinas virtuales para poner en funcionamiento las distintas tareas que hemos llevado a cabo en las prácticas de SWAP. Así se ven más claramente cómo funcionan aquellas conexiones, balanceadores o configuración maestro-esclavo que se han desarrollado en las prácticas de la asignatura.

La memoria está en:
 https://github.com/LuisSuall/swap1415/tree/master/Trabajo_Wireshark


"Software y Hardware de Google"

En este trabajo se presenta un estudio sobre el hardware y software de Google. En primer lugar se recorre en el tiempo la evolución del hardware que ha ido empleando la empresa. Se analizan las mejoras que se han ido incorporando y el porqué las realizan. También se muestra un catálogo de los distintos dispositivos que han desarrollado en Google. Finalmente, se presenta un estudio sobre el software, estudiando las características principales.

La memoria está en:
 https://github.com/cristinazuhe/swap1415/tree/master/trabajo