So Luci Ones

19
14/10/12 11:34 DESPLIEGUE DE APLICACIONES WEB SOLUCIONES

Transcript of So Luci Ones

Page 1: So Luci Ones

14/10/12 11:34

DESPLIEGUE DE APLICACIONES WEB

SOLUCIONES

Page 2: So Luci Ones
Page 3: So Luci Ones

Despliegue de

aplicaciones web

Soluciones

Francisco Aldarias Raya

Page 4: So Luci Ones

Despliegue de aplicaciones web© Francisco Aldarias Raya© De la edición Ra-Ma 2013

MARCAS COMERCIALES. Las designaciones utilizadas por las empresas para distinguir sus productos (hardware, software, sistemas operativos, etc.) suelen ser marcas registradas. RA-MA ha intentado a lo largo de este libro distinguir las marcas comerciales de los términos descriptivos, siguiendo el estilo que utiliza el fabricante, sin intención de infringir la marca y sólo en beneficio del propietario de la misma. Los datos de los ejemplos y pantallas son ficticios a no ser que se especifique lo contrario.

RA-MA es marca comercial registrada.

Se ha puesto el máximo empeño en ofrecer al lector una información completa y precisa. Sin embargo, RA-MA Editorial no asume ninguna responsabilidad derivada de su uso ni tampoco de cualquier violación de patentes ni otros derechos de terceras partes que pudieran ocurrir. Esta publicación tiene por objeto proporcionar unos conocimientos precisos y acreditados sobre el tema tratado. Su venta no supone para el editor ninguna forma de asistencia legal, administrativa o de ningún otro tipo. En caso de precisarse asesoría legal u otra forma de ayuda experta, deben buscarse los servicios de un profesional competente.

Reservados todos los derechos de publicación en cualquier idioma.

Según lo dispuesto en el Código Penal vigente ninguna parte de este libro puede ser reproducida, grabada en sistema de almacenamiento o transmitida en forma alguna ni por cualquier procedimiento, ya sea electrónico, mecánico, reprográfico, magnético o cualquier otro sin autorización previa y por escrito de RA-MA; su contenido está protegido por la Ley vigente que establece penas de prisión y/o multas a quienes, intencionadamente, reprodujeren o plagiaren, en todo o en parte, una obra literaria, artística o científica.

Editado por:RA-MA EditorialCalle Jarama, 3A, Polígono Industrial Igarsa28860 PARACUELLOS DE JARAMA, MadridTeléfono: 91 658 42 80Fax: 91 662 81 39Correo electrónico: [email protected]: www.ra-ma.es y www.ra-ma.comISBN: 978-84-7897-XXX-XDepósito Legal: M-XXXXX-20011Autoedición: AutoresDiseño Portada: Antonio García ToméImpresión: Closas-OrcoyenImpreso en España

Page 5: So Luci Ones
Page 6: So Luci Ones

Dedicatoria.

Page 7: So Luci Ones

ÍNDICE

1 ARQUITECTURAS WEB....................................................7

1.1 ACTIVIDADES............................................................................71.1.1 Diagrama de despliegue....................................................................71.1.2 Puertos..............................................................................................8

1.2 EJERCICIOS PROPUESTOS...........................................................81.2.1 Arquitectura web...............................................................................81.2.2 Modelo-Vista-Controlador.................................................................111.2.3 Servicio de alta disponibilidad.........................................................151.2.4 Balanceador de carga......................................................................18

1.3 TEST DE CONOCIMIENTOS........................................................18

1 ARQUITECTURAS WEB

1.1 ACTIVIDADES

1.1.1 Diagrama de despliegueCrear un diagrama de despliegue en donde exista un balanceador de carga

sobre dos servidores linux.

7

Page 8: So Luci Ones

1.1.2 PuertosRellena los siguientes puertos:

DESCRIPCIÓN PUERTO

Servidor HTTP 80

Servidor HTTPS 443

Servidor FTP 21

1.2 EJERCICIOS PROPUESTOS

1.2.1 Arquitectura web1.1.1.1 FLICKR

Flickr es un sitio web que permite almacenar, ordenar, buscar, vender y compartir fotografías y videos en línea.

La popularidad de Flickr se debe fundamentalmente a su capacidad para administrar imágenes mediante herramientas que permiten al autor etiquetar sus fotografías y explorar y comentar las imágenes de otros usuarios.

La arquitectura de Flickr se puede destacar el desglose de la plataforma utilizada en el sitio de intercambio de fotografías: PHP, MySQL, Shards, Memcached, Squid en reverse-proxy para html e imágenes, Linux (RedHat), Smarty, Perl, PEAR para XML y Email, ImageMagick para el procesamiento de imágenes, Java para el servicio del nódulo, Apache, SystemImager para el despliegue, Ganglia, Subcon stores, y Cvsup para distribuir y actualizar colecciones de archivos a través de la Red.

1. Buscar documentación sobre la instalación de un balanceador de carga.2. Buscar información para el montaje de clusters.

8

Page 9: So Luci Ones

De esta arquitectura cabe resaltar los siguientes aspectos:

3. Pair of ServerIron's: funciona como balanceador de carga en el cual incluyen redundancia de datos.

4. Squid Caches: provee la primera capa de cacheo, la cual se encarga de cachear el contenido estático tal como imágenes y HTML, así evitando a PHP App Servers se sobrecargue por el volumen de consultas.

5. PHP App Servers: clúster de servidores de aplicativo los cuales tienen la funcionalidad de la página.

6. Storage Manager: es el encargado de organizar la información.

7. Master-master shards: estas son los nodos de lectura y escritura de los usuarios luego este es replicado a Dual Tree Central Database

9

Figura 1: Arquitectura Web Flickr

Page 10: So Luci Ones

8. Dual Tree Central Database: guarda la información del usuario

9. Memcached Cluster: usado por PHP App Servers para tener la cache de la parte del aplicativo

10. Big Search Engine: es utilizada para llevar registro de la porción de datos que quieren servir.

La arquitectura de Flickr está diseñada de manera que pueda soportar incrementos en el tráfico y así evitar conflictos en el uso de recursos por parte de los servicios soportados, pues el servidor web y el servidor de base de datos se encuentran en servidores separados. Adicionalmente se contempla no sólo un servidor sino un clúster.

Se contemplan balanceadores de cargas y replicación para atender las peticiones.

No se dispone de un solo servidor dedicado exclusivamente a los archivos estáticos.

Para acelerar la respuesta de los servicios se utilizan memorias cache. Los cuales revisan si la solicitud del cliente ha sido servida ya en algún momento y se encuentra en su memoria la respuesta, para lo cual sirve al cliente esta información, evitando así el paso hasta el servidor web y que este realice las consultas o procesos junto con el servidor de base de datos.

1.1.1.2 MAAS

Metales como servicio MAAS (Metal as a Service)

Ubuntu Server dispone permite crear nodos para el montaje de clusters utilizando la instalación que llama MAAS.

Metales como servicio - MAAS - trae el lenguaje de la nube de servidores físicos. Hace que sea fácil de configurar el hardware en el que implementar cualquier servicio que necesita para escalado horizontal de forma dinámica, una nube es sólo un ejemplo.

10

Page 11: So Luci Ones

Te permite disponer de sus servidores de forma dinámica, al igual que los casos nube - sólo en este caso, son enteros nodos físicos. "Agregar un nodo al clúster Hadoop, y asegúrese de que tiene al menos 16 GB de RAM" es tan fácil como pedirlo.

Con una simple interfaz web, puede agregar, comisión, actualizar y reciclar sus servidores a voluntad. A medida que cambian sus necesidades, usted puede responder rápidamente, mediante la adición de nuevos nodos de forma dinámica y volver a implementarlos entre servicios. Cuando llegue el momento, los nodos pueden ser retirados para su uso fuera de los MAAS.

https://wiki.ubuntu.com/ServerTeam/MAAS

1.2.2 Modelo-Vista-Controlador.

Vamos a transformar un listados de artículos que no aplica el modelo-vista-controlador(MVC), en un listado con MVC:

La base de datos se llamará daw, y la carga de datos se realizará mediante el fichero articulos.sql, sobre mysql.

articulos.sql

CREATE TABLE IF NOT EXISTS `articulos` ( `codigo` int(2) NOT NULL AUTO_INCREMENT, `descripcion` varchar(30) NOT NULL, PRIMARY KEY (`codigo`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;---INSERT INTO `articulos` (`codigo`, `descripcion`) VALUES(1, 'libro1'),(2, 'libro2'),(3, 'libro3');

11

Page 12: So Luci Ones

vistacontrolador.php

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"><html><head><title>MVC NO</title></head><body><h1>Listado de articulos</h1><h1>No es MVC</h1><?php$conexion = mysql_connect('localhost','paco','');mysql_select_db('daw', $conexion);$resultado = mysql_query('SELECT * FROM articulos', $conexion);?><table border="1"><tr><td>Fecha</td><td>Texto</td></tr><?php while($fila= mysql_fetch_array($resultado, MYSQL_ASSOC)){

echo "<tr>";echo "<td> ".$fila['codigo']." </td>";echo "<td> ".$fila['descripcion']." </td>";echo "</tr>";}

?></table><?phpmysql_close($conexion);

12

Figura 2: Listado de artículos que no es MVC

Page 13: So Luci Ones

?></body></html>

Creación de capas.

Utilizando el fichero anterior. Deberemos separar en tres archivos, que llamaremos modelo, vista, contralador.

modelo.php

<?phpfunction getArticulos(){$conexion = mysql_connect('localhost','paco','');mysql_select_db('daw', $conexion);$resultado = mysql_query('SELECT * FROM articulos', $conexion);$articulos = array();while( $articulo = mysql_fetch_assoc($resultado)){$articulos[] = $articulo;}mysql_close();return $articulos;}?>

vista.php

<html><head><title>MVC</title></head><body><h1>Listado de articulos</h1><h1>MVC</h1><table border="1"><tr><td>Codigo</td><td>Descripcion</td></tr><?php foreach($articulos as $articulo){ ?><tr><td><?php echo $articulo['codigo'];?></td><td><?php echo $articulo['descripcion'];?></td></tr><?php } ?></table></body>

13

Page 14: So Luci Ones

</html>

controlador.php

<?phprequire('modelo.php');$articulos = getArticulos();require('vista.php');?>

De este modo tenemos separado en el controlador.php casi todo el código php con la lógica de negocio, mientras que en vista.php solo recorremos un array con datos. Además el controlador se podría utilizar para otras vistas.

Después de esta separación el controlador quedaría tan solo como un agente para pasar datos del modelo hacia la vista, pero en aplicaciones mas complejas el controlador es quien realiza las tareas de autenticación de usuarios, manejo de sesiones, filtrar y validar entradas de datos por GET o POST.

Deberemos abrir el controlador.php, para ver el resultado:

Fuente: http://tednologia.com/mvc-en-php/

1.2.3 Servicio de alta disponibilidad.Vamos a ver como se instala un cluster de alta disponibilidad con Apache2

y Heartbeat con Linux

14

Figura 3: MVC con PHP

Page 15: So Luci Ones

Partimos de la misma configuración, tenemos dos servidores, cluster01 y cluster02 con las IPs 192.168.2.98 y 192.168.2.99 y una IP flotante 192.168.2.100

Configuradas ambas máquinas, instalamos los paquetes necesarios:

# apt-get install apache2

En nuestro caso, para la configuración de Apache editamos

/etc/apache2/ports.conf y añadimos la IP flotante a la línea de NameVirtualHost

así:

NameVirtualHost 192.168.2.100:80

Para que Apache no se levante al inicio ya que queremos que el que se encargue

de esto es Heartbeat escribimos:

# update-rc.d apache2 remove

Y detenemos el servicio:

# /etc/init.d/apache2 stop

A continuación instalamos Heartbeat.

15

Figura 4: Cluster alta disponibilidad

Page 16: So Luci Ones

# apt-get install heartbeat

Y configuramos, estos ficheros de configuración se encuentran todos

en /etc/ha.d/ y disponemos de plantillas para configurarlos en

/usr/share/doc/heartbeat/. Podemos tomar ejemplo para configuraciones más

específica.

Para el archivo ha.cf usamos la misma:

logfile /var/log/cluster.loglogfacility local0warntime 5deadtime 30initdead 120keepalive 2bcast eth0udpport 694auto_failback onnode cluster01node cluster02

La explicación

logfile y logfacility: Fichero de log y nivel.

warntime: Heartbeat avisará cuando un nodo falle tras 5 segundos.

deadtime: Hearbeat confirmará que un nodo ha caído, 30 segundos.

initdead: Tiempo máximo que Heartbeat esperará a que un nodo

arranque, 60 segundos.

keepalive: Especifica cada cuanto tiempo Heartbeat enviará paquetes

para comprobar la disponibilidad de los nodos, 2 segundos.

Las dos últimas líneas son las listas de nodos que conforman el cluster.

Para el fichero authkeys que es donde configuramos la comunicación entre los

nodos del clúster, también para Debian podemos usar la original:

auth 22 sha1

Le asignamos los permisos para que sólo root tenga acceso.

# chmod 600 /etc/ha.d/authkeys

16

Page 17: So Luci Ones

El último fichero es el haresources que queda con este aspecto:

cluster01 IPaddr2::192.168.2.100/24/eth0 apache2

Cambia la forma de escribir la IP flotante que está de una forma más completa y

el script de inicio de Apache que en Debian es apache2.

Seguimos la entrada y la propagación se hace ejecutando el siguiente comando:

# /usr/share/heartbeat/ha_propagate

Levantamos el servicio.

/etc/init.d/heartbeat start

Ya está todo configurado, podemos probar a desactivar la interface de cluster01

y ver como al poco tiempo (el que hemos configurado) se levanta cluster02 para

seguir sirviendo páginas.

Fuentes:

1. Alta Disponibilidad con Apache2 y Heartbeat en Debian Squeeze. http://www.muspells.net/blog/2011/04/alta-disponibilidad-con-apache2-y-heartbeat-en-debian-squeeze/

2. Cluster HTTP en alta disponibilidad con centos + heartbeat.

http://rm-rf.es/cluster-http-en-alta-disponibilidad-con-centos-heartbeat/

3. Cluster, alta disponiblidad en linux.

http://www.linux-party.com/index.php/7384-cluster-alta-disponibilidad-en-linux

1.2.4 Balanceador de carga.http://www.linux-party.com/index.php/522

1.3 TEST DE CONOCIMIENTOSMarcado en negrita la solución.

1. ¿En la arquitectura MVC la presentación de los datos es tarea de?a. Modelo

17

Page 18: So Luci Ones

b. Vistac. Controladord. Todos los anteriores

2. ¿En la arquitectura MVC el acceso a los datos se encuentra en?a. Modelob. Vistac. Controladord. Todos los anteriores

3. ¿En la arquitectura MVC la lógica de la empresa se encuentra en?a. Modelob. Vistac. Controladord. Todos los anteriores

4. Queremos conseguir mayor rendimiento en la aplicación web. Disponemos de más máquinas. Que escalabilidad utilizaremos?a. Verticalb. Horizontalc. Ambasd. Ninguna

5. Queremos conseguir mayor rendimiento en la aplicación web. No queremos modificar el software. Que escalabilidad utilizaremos?a. Verticalb. Horizontalc. Ambasd. Ninguna

6. Queremos conseguir mayor rendimiento en la aplicación web. No queremos modificar el software. Disponemos de más máquinas, pero no de más dinero. Que escalabilidad utilizaremos?a. Verticalb. Horizontalc. Ambasd. Ninguna

7. Qué es incorrecto en los clusters?a. Disminuye la disponibilidadb. Aumentar el rendimientoc. Balanceo de cargad. Escalabilidad

8. Que es falso en los patrones en el diseño de aplicaciones.a. Aceleran el desarrollado del softwareb. Mejoran el mantenimientoc. Mejoran la comunicación entre analista y programador.d. Mejoran el rendimiento de la aplicación

9. En un cluster de alta disponibilidad de un servicio web, todos los nodos siempre están trabajando?.

18

Page 19: So Luci Ones

a. Sib. No

10. En un cluster de balanceo de carga de un servicio web, todos los nodos siempre están trabajando?.a. Sib. No

19