So Luci Ones
Transcript of So Luci Ones
14/10/12 11:34
DESPLIEGUE DE APLICACIONES WEB
SOLUCIONES
Despliegue de
aplicaciones web
Soluciones
Francisco Aldarias Raya
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
Dedicatoria.
Í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
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
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
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
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
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
?></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
</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
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
# 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
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
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
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