Algunos algoritmos de la Web 2.0 exigen una capacidad de cálculo que no todos los servidores pueden proporcionar.
¿Qué posibilidades hay ahora mismo para ejecutar algoritmos de manera distribuida? ¿Y para montar una infraestructura de ordenadores?
¿Podríamos instalar nuestras aplicaciones en plataformas web? ¿Podríamos llegar a más usuarios?
Estas transparencias están basadas en unas confeccionadas por mi para un curso sobre Cloud Computing.
4. Así que ahora…
Fotografía publicada bajo Creative Commons por el usuario santi_martin en flickr:
http://www.flickr.com/photos/santi_martin/2944882285/
6. Cuando no todo es CRUDo
Emergencia en la web 2.0
o Los datos puros no son lo único.
7. Cuando no todo es CRUDo
Emergencia en la web 2.0
o Las entradas del usuario pueden
generar cambios.
8. Cuando no todo es CRUDo
Emergencia en la web 2.0
o Los algoritmos suelen ser costosos
9. Cuando no todo es CRUDo
Emergencia en la web 2.0
o Normalmente se cachean los resultados
o Permite una mayor separación de capas
o Alivia la carga al ejecutarse una sola vez
o Presenta problemas de actualización
o Cacheando solo parte (Google, la Wikipedia
y otros RSS)
10. Los caminos de la escalada
Hardware
o Mayor potencia de cálculo
o Escalado de una máquina (límite tecnológico)
o Granjas de servidores (dificultades lógicas)
Software
o Necesidades especiales
o Aprovechamiento del multiprocesador
o Aprovechamiento de las redes
11. Los caminos de la escalada
Hardware
o Límites tecnológicos de crecimiento
o Complicado mantenimiento de instalaciones
o Dispositivos no triviales (SANs, gestión avanzada de
redes, equipos con características especiales…)
o Dificultades de administración
o Costes de almacenaje y acondicionamiento.
o Resistencia a fallos.
12. Los caminos de la escalada
Software
o Dificultad de programación a través de redes.
o Estrategia bottom-up:
• División del problema
• Composición de las soluciones
o Deformación del uniproceso.
o Dificultad de mantenimiento.
o Registro de errores
14. Cloud Computing
El nuevo paradigma de computación
distribuida
o Los recursos (CPU, Disco...) se comparten a
traves de Internet.
o Virtualización de dispositivos
o Desarrollo de estrategias de tolerancia a
fallos
o Independencia de plataforma
15. Cloud Computing
Computación distribuida a la Web 2.0
o Software as a Service
o Uso de tecnologías web (SOAP, Rest, Ajax...)
estándar
o Minimización de soluciones ad-hoc
o Mezcla de diversos servicios
o Trabajo en entornos heterogéneos
16. Cloud Computing
Ejecución remota
o Aplicaciones completas sin apenas recursos
Ideal para entornos RIA (Air, XUL...)
Widgets
El caso Spotify
o Ideal para dispositivos móviles (iPhone,
Android...)
o Actualizaciones instantáneas
o Independencia de localización
17. Cloud Computing
Ventajas
o Liberación de carga computacional
o Simplificación de infraestructura
o Ahorro de costes
o Persistencia de servicios (datos,
aplicaciones)
o Independencia de localización
o Facilidad de adopción de aplicaciones
18. Cloud Computing
Inconvenientes
o Dependencia de la red
o Dependencia de terceros (caso GMail)
o Falta de control (polémica Facebook)
o Riesgos de seguridad
21. Cloud Computing
¿Quien juega a esto?
o Google (Google Apps)
o Sun (Sun Grid, Sun Cloud)
o Amazon (Amazon Web Services: EC2, S3,
SimpleDB...)
o Microsoft (Azure)
o Apache (CouchDB, Hadoop)
o Yahoo! (Open Social, Pipes, Y!OS)
23. Amazon EC2
¿Qué es Amazon EC2?
o Infraestructura en la nube
o Instalación de máquinas virtuales para
ejecución de procesos
o Total control de administración sobre la
máquina virtual remota
o Amazon proporciona los servicios de
escalabilidad y fiabilidad del servicio
24. Amazon EC2
¿Cómo conectarse a Amazon EC2?
o http://aws.amazon.com/ec2/
o AWS Management Console: https://
console.aws.amazon.com/
o Versión Beta de una interfaz central de
administración para AWS
25. Amazon EC2
¿Cómo dar de alta una máquina en Amazon
EC2?
o Máquinas virtuales: Amazon Machine Image
o Lanzamos una nueva instancia
o Seleccionamos la imagen
o Plataforma.
o Número de instancias
o Capacidad de la máquina
o Keypair a usar
26. Amazon EC2
Personalización de las AMIs
o Se pueden crear AMIs personalizadas
o A partir de Máquinas Windows
o Facilidad para crear máquinas replicadas
27. Amazon EC2
Elastic Block Store
o Posibilidad de crear volúmenes compartidos
entre las instancias
o Se comportan como un disco normal
• Formatear
• Montar/Desmontar
• RAID
o Se pueden crear copias de seguridad
28. Amazon EC2
Elastic IPs
o Mecanismo para hacer el servicio
independiente de la instancia
o Enmascaran el acceso a una máquina
mediante una IP pública
o Facilidad para recuperación de errores y alta
disponibilidad
29. Amazon EC2
Seguridad
o Creación de KeyPairs para acceso por SSH
o Creación de grupos de seguridad
o Tipo de conexión
o Ancho de banda
30. Amazon EC2
API
o Como todo Amazon Web Service tiene API
o Permite acceder a los recursos vistos antes
o Permite crear aplicaciones de gestión
o ¿Ausencia de interfaz de administración?
32. Amazon S3
¿Qué es Amazon S3?
o Sistema de almacenamiento de ficheros en
la nube
o Creación de carpetas
o Subida de ficheros
o Análogo al FTP
33. Amazon S3
Conceptos
o Buckets
o Directorios
o Ficheros
o Permisos
34. Amazon S3
API
o Como todo Amazon Web Service tiene API
o Permite crear/listar/actualizar/eliminar
buckets, directorios, ficheros…
o ¿Ausencia de interfaz de administración?
Otros accesos
o HTTP
o Protocolo s3
36. Apache Hadoop
¿Qué es Apache Hadoop?
o Plataforma de computación distribuida
o Desarrollada sobre la plataforma Java
o “Implementación” open-source basada en:
• Google FileSystem
• Google MapReduce
37. Apache Hadoop
HDFS
o Hadoop's Distributed File System
o Diseñado para detección de fallos y
recuperación automática
o Acceso a modo streaming
o Soporte para grandes conjuntos de datos.
o Optimizado para lecturas
o Multiplataforma
38. Apache Hadoop
MapReduce
o Arquitectura de computación distribuida
o Mútiples implementaciones (Google,
Hadoop, CouchDB, Facebook Hive…)
o Basado en la estrategia dividir-vencer
39. Apache Hadoop
MapReduce
Realiza una primera Realiza una segunda
computación devolviendo computación sobre esos
resultados intermedios resultados intermedios
Map Resultados Reduce
intermedios
Input Output
Ficheros [K1, V1] [K2, V2] [K3, V3] Ficheros
40. Apache Hadoop
MapReduce
o No todos los problemas son aplicables a este modelo
o La entrada debe ser fácilmente divisible
o Los resultados deben poder ser agregados
CouchDB y MapReduce
o ¿Se reconoce la estructura?
o Map: Obtener los resultados
o Reduce: Realizar operaciones sobre los resultados
intermedios
42. Apache Hadoop
El Framework
o InputFormat y RecordReader
• Juntos se encargan de dividir los datos de entrada
• Devuelven registros
• Especifican los tipos de las claves y valores de
entrada al algoritmo Map
44. Apache Hadoop
El Framework
o Mapper
• Implementa la fase Map del algoritmo
• Se invoca el método “map” una vez por cada
registro (Record)
• Recibe pares clave/valor del tipo especificado por
el RecordReader
• Devuelve pares clave/valor de nuevos tipos
45. Apache Hadoop
El Framework
o Combiner
• Reagrupa los resultados intermedios
• Reduce el tamaño de los datos a enviar de una
fase a otra al ejecutar operaciones para agrupar
los resultados
• Dependiendo del problema no resulta viable
• Envía los resultados agregados a la fase Reduce
47. Apache Hadoop
El Framework
o Reducer
• Implementa la fase Reduce del Algoritmo
• Recibe pares clave/valor del tipo especificado por
la fase Map
• Devuelve pares clave/valor de nuevos tipos
49. Apache Hadoop
El Framework
o JobConf
• Configuración del trabajo distribuido
• Permite especificar Mappers, Reducers,
InputFormats…
• Permite especificar opciones ad-hoc
50. Apache Hadoop
El Framework
o Tool
• Crea las configuraciones de trabajos
• Permite crear más de un trabajo distribuido
51. Apache Hadoop
El Framework… ¿Y si no quiero Java?
o Modo Streaming
• Permite usar lenguajes “de script” (PHP, Python,
Ruby…)
• Especificamos un Mapper y un Reducer
• Los datos se pasan a los scripts, que se ejecutan
52. Apache Hadoop
Creando un cluster
1. Preparando todas las máquinas
o Instalar soporte para Hadoop
o Copiar algoritmos necesarios
o Modificar hadoop-env.sh: Indicar JAVA_HOME
53. Apache Hadoop
Creando un cluster
1. Configurando el cluster
o NameNode: Nodo encargado de gestionar el
sistema de ficheros distribuido de Apache
o JobTracker: Nodo encargado de gestionar los
trabajos pendientes
54. Apache Hadoop
Creando un cluster
1. Configurando el cluster
o Hadoop-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://{{IP del NameNode}}:{{Puerto del
NameNode}}</value>
<description>La URI del sistema de ficheros.
</description>
</property>
55. Apache Hadoop
Creando un cluster
1. Configurando el cluster
o Hadoop-site.xml
<property>
<name>mapred.job.tracker</name>
<value>{{IP del JobTracker}}:{{Puerto del
JobTracker}}</value>
<description>El host y el puerto donde correra el
jobTracker.
</description>
</property>
56. Apache Hadoop
Creando un cluster
1. Configurando el cluster
o masters / slaves: ficheros en que se indican
maestros y esclavos
57. Apache Hadoop
Creando un cluster
1. Iniciar el cluster
o bin/start-all.sh
61. Amazon Map/Reduce
Falta de acoplamiento
o Amazon EC2 incorpora la infraestructura
necesaria
o Apache Hadoop nos proporciona un
framework para desarrollar algoritmos para
procesar grandes conjuntos de datos
o Amazon S3 nos permite almacenar grandes
cantidades de ficheros asegurando la
disponibilidad
62. Amazon Map/Reduce
¿Qué es Amazon Map/Reduce?
o Servicio Web de Amazon para implementar
algoritmos Map/Reduce
o Nos permite crear trabajos de Apache
Hadoop que operen sobre datos de Amazon
S3, en instancias de Amazon EC2.
63. Amazon Map/Reduce
¿Cómo funciona Amazon Map/Reduce?
1. Configurando la entrada y la salida
o Cargamos los datos de entrada en Amazon S3
o Cargamos el algoritmo en Amazon S3
o Creamos el directorio de salida en Amazon S3
64. Amazon Map/Reduce
¿Cómo funciona Amazon Map/Reduce?
1. Cargando el algoritmo
o Hay que compilar nuestro algoritmo en un .jar
javac
-classpath ${HADOOP_HOME}/hadoop-${HADOOP_VERSION}-
core.jar
-d output_directory
WordCount.java
jar
-cvf output_file.jar
-C output_directory/ .
65. Amazon Map/Reduce
¿Cómo funciona Amazon Map/Reduce?
1. Creamos el trabajo
o En la AWS Console
o “Create new Job Flow ”
o Elegimos el tipo de algoritmo
o Elegimos la entrada y la salida
66. Amazon Map/Reduce
¿Cómo funciona Amazon Map/Reduce?
1. Creamos las instancias
o Elegimos número de instancias
o Elegimos tipo de instancias
67. Amazon Map/Reduce
¿Cómo funciona Amazon Map/Reduce?
1. Ejecutamos
o Ventana de Estado en la AWS Console
o Salida en directorios de Amazon S3
71. Widgets
¿Que perciben los usuarios?
o Las revoluciones
deben afectar a los
usuarios
o Percepción
indirecta (mejores
servicios)
o ¿Percepción
directa?
72. Widgets
Cloud Computing para los usuarios
o Mayor uso de servicios alojados en la web
o Mayor interconexión entre servicios
o Acceso ubicuo
o Difuminar el acceso a la siguiente capa:
• ¿Quién se conecta?
• ¿Cuando?
• ¿A donde?
75. Widgets
¿Qué es un Widget?
portable chunk of code that can be installed and executed within any
separate HTML-based web page by an end user without requiring
additional compilation. - Wikipedia
o Facilidad de instalacion
o Uso de Servicios Web y Ajax para interacción con el
widget
o Dependencia de la aplicación de terceros
o Nosotros somos la nube
76. Widgets
Plataformas de Widgets
o Aplicaciones web específicas para ejecución de Widgets
o API de desarrollo
o Funciones sociales para ordenación y filtrado de Widgets
o Ejemplos:
• DockBar
• Netvibes
• iGoogle
• Blogger
77. Google Gadgets
Google Gadget
o Plataforma de Widgets de Google
o Distribución por Orkut, Google Desktop o iGoogle
o Publicables en cualquier página web.
o Mllones de potenciales usuarios
o Desarrollo con HTML y Javascipt
o API:
http://code.google.com/intl/en/apis/gadgets/docs/dev_gui
de.html
78. Google Gadgets
Hello World!
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?>
<Module>
<ModulePrefs title=quot;hello world examplequot; />
<Content type=quot;htmlquot;>
<![CDATA[
Hello, world!
]]>
</Content>
</Module>
o ModulePrefs: Datos sobre el widget
o <![CDATA[ ----- contenido ------ ]]>
79. Google Gadgets
Content
o Sección central del widget
o Opción 1: Implementar vista y lógica con HTML y
Javascript (<content type=”html”>)
<Content type=quot;htmlquot;><![CDATA[ contenido ]]></Content>
o Opción 2: Implementar vista y lógica en una aplicación
web en un servidor y enlazar a ella (<content type=”url”
href=”...”>)
<Content type=“url“ href=“…” />
80. Google Gadgets
Obteniendo datos
gadgets.io.makeRequest(url, response, params);
o Realiza petición a una URL
o Se ejecuta un callback tras la petición donde se procesan
los resultados.
function response(obj)
o obj.data = Datos parseados
o obj.errors = Errores
o obj.text = Texto de la respuesta
81. Google Gadgets
Obteniendo datos
o Tipos de datos esperados
• Text: gadgets.io.ContentType.TEXT
• Dom: gadgets.io.ContentType.DOM
• Json: gadgets.io.ContentType.JSON
• Feed: gadgets.io.ContentType.FEED
o Influyen en el parseo de la respuesta
82. Google Gadgets
Obteniendo datos
o Tipos de datos esperados
• Text: gadgets.io.ContentType.TEXT
• Dom: gadgets.io.ContentType.DOM
• Json: gadgets.io.ContentType.JSON
• Feed: gadgets.io.ContentType.FEED
o Influyen en el parseo de la respuesta
83. Google Gadgets
Obteniendo datos
<script type=quot;text/javascriptquot;>
function consultarDBs(){
var params = {};
params[gadgets.io.RequestParameters.CONTENT_TYPE] =
gadgets.io.ContentType.JSON;
var url = quot;http://host/_all_dbsquot;;
gadgets.io.makeRequest(url, cargarDBs, params);
}
function cargarDBs(obj){
var html = quot;<ul>quot;;
for (var key in obj.data)
{
html += quot;<li>quot;+ obj.data[key] + quot;</li>quot;;
}
document.getElementById('dbs').innerHTML = html;
}
</script>
84. Google Gadgets
¡¡¡¡ gagdets.io is not defined !!!!
o Parte del nuevo API de Google Gadget
o Aún no soportado por iGoogle
• Soportado por otros: http://
wiki.opensocial.org/index.php?title=Cross-
container_Development#Containers
o Disponible en el sandbox de desarrollo: http://
www.google.com/ig/sandbox
85. Google Gadgets
Enviando información
o Método de petición como parámetro de la
Request
<script type=quot;text/javascriptquot;>
function sendData(data){
var params = {};
params[gadgets.io.RequestParameters.METHOD] =
gadgets.io.MethodType.POST;
params[gadgets.io.RequestParameters.POST_DATA] = data;
var url = quot;http://host/_all_dbsquot;;
gadgets.io.makeRequest(url, callback, params);
}
function callback(obj){...}
</script>
86. Google Gadgets
Enviando información
o Métodos de generación de JSON:
var data = {};
data['title'] = “sacando datos a JSON”;
gadgets.json.stringify(data)
{quot;titlequot;:“Sacando datos a JSONquot;}
87. Google Gadgets
Actualizando la información
o Google optimiza los gadgets a través de la
caché
o Para evitarlo podemos modificar la URL con
parámetros extra
o Problemas con algunos Servicios REST
(CouchDB, por ejemplo)
88. Google Gadgets
Vistas
o Los contenedores suelen tener distintas vistas
para los Gadgets
o iGoogle posee: “home” (pequeño) y “canvas”
(grande)
o Se pueden especificar contenidos para distintas
vistas.
89. Google Gadgets
Vistas
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?>
<Module>
<ModulePrefs title=quot;Multiple Views Demoquot;>
<Require feature=quot;opensocial-0.8quot; />
</ModulePrefs>
<Content type=quot;htmlquot; view=quot;homequot;>
<![CDATA[ Esto en pequeño ]]>
</Content>
<Content type=quot;htmlquot; view=quot;canvasquot;>
<![CDATA[ Esto en grande ]]>
</Content>
</Module>
90. Google Gadgets
Vistas
o Se puede cambiar de vista desde código
var vistas = gadgets.views.getSupportedViews();
gadgets.views.requestNavigateTo(vistas[vista_deseada]);
92. Conclusiones
Sobre el Cloud Computing
o ¿Compensa?
o ¿Mera reformulación de la computación
distribuida?
o ¿Uso empresarial de Gadgets?
o Problemas de Amazon EC2
o Problemas de Hadoop
o Problemas de Google Gadget
93. Conclusiones
Dudas y comentarios a
docencia@davidjbrenes.info
94. Conclusiones
Estas transparencias se publican bajo licencia
Creative Commons y se pueden redistribuir o
modificar bajo las siguientes condiciones:
1. Se dé reconocimiento al autor de estas
transparencias.
2. No se use con propósitos comerciales.
3. Se distribuya con la misma licencia.
Texto de la licencia:
http://creativecommons.org/licenses/by-nc-sa/3.0/