75
CLOUD COMPUTING. DESARROLLO DE APLICACIONES Y MINERÍA WEB Miguel Fernández Fernández [email protected] Programa de extensión universitaria Universidad de Oviedo

App engine

Embed Size (px)

Citation preview

Page 1: App engine

CLOUD COMPUTING.DESARROLLO DE APLICACIONES Y

MINERÍA WEB

Miguel Fernández Fernández [email protected]

Programa de extensión universitariaUniversidad de Oviedo

Page 2: App engine

Google App Engine

http://code.google.com/intl/en/appengine/

Page 3: App engine

Google App Engine

http://code.google.com/intl/en/appengine/

Una introducción a

Page 4: App engine

¿Qué es Google App Engine?

La solución PaaS de Google

Webapps Python y Java

Altamente escalable

Pago por uso

SDK completo

Administración sencilla

Page 5: App engine

¿Qué es Google App Engine?

y Javascript (Rhino), JRuby, Scala...

La solución PaaS de Google

Webapps Python y Java

Altamente escalable

Pago por uso

SDK completo

Administración sencilla

Page 6: App engine

¿Qué es Google App Engine?

y Javascript (Rhino), JRuby, Scala...

La solución PaaS de Google

Webapps Python y Java

Altamente escalable

Pago por uso

SDK completo

Administración sencilla

Inicio gratuito< 5M visitas/mes

Page 7: App engine

¿Qué aporta Google App Engine?

Escalabilidad

Ahorro en el coste de propiedad

Amplio conjunto de APIs

Facilidad de desarrollo

Sencillez en el mantenimiento

Page 8: App engine

¿Qué ofrece GAE a nivel funcional?

Memcache, manipulación imágenes, extracción URLs...

Sistema automático de escalado y balanceo de carga

Integración con cuentas de GoogleTM

Almacén de datos transaccional

Planificación de tareas programadas

À-la Unix CronAutenticación y

envío de mail

Page 9: App engine

SDK

ConsolaDeAdministración

Ciclo de desarrollo

Despliegue

Prueba

Construcción

Gestión

Page 10: App engine

Arquitectura física

Bala

ncea

dor

de c

arga

Nav

egad

or

RPC

de

Goo

gle

Nodo1

Nodo 2Nodo N

Datastore Cluster 1

Nodo1

Nodo 2Nodo N

Cluster 1

Nodo1

Nodo 2Nodo N

Cluster N

Nodo1

Nodo 2Nodo N

Datastore Cluster M

request

response

HTTP(S)

Servidor FCGI / Motor ServletsPersistencia

Data Nucleus sobre Big TableTM

Page 11: App engine

Desarrollo de aplicaciones GAEEl runtime Java

Page 12: App engine

El SDK de Java

appengine-java-sdk-1.3.6*

API JARs

Servidor de pruebas

App Engine Uploader

Documentación

Ejemplos

Page 14: App engine

Google Plugin for eclipse

GWT 2.0.4

El SDK de Java

appengine-java-sdk-1.3.6*

API JARs

Servidor de pruebas

App Engine Uploader

Documentación

Ejemplos

eclipse/plugins/com.google.appengine.eclipse.sdkbundle.1.3.6_1.3.6.v201006301254*

Page 15: App engine

Hola App Engine! desde Java

Page 16: App engine

Hola App Engine! desde JavaAcceder a appengine.google.com y crear la app

Page 17: App engine

Hola App Engine! desde JavaAcceder a appengine.google.com y crear la app

Page 18: App engine

Hola App Engine! desde JavaAcceder a appengine.google.com y crear la app

Crear un ‘web application project’ desde eclipse

Page 19: App engine

Hola App Engine! desde JavaAcceder a appengine.google.com y crear la app

Crear un ‘web application project’ desde eclipse

Configurar applicationId y versión del proyecto

Page 20: App engine

Hola App Engine! desde JavaAcceder a appengine.google.com y crear la app

Crear un ‘web application project’ desde eclipse

Configurar applicationId y versión del proyecto

Probar en el servidor de pruebas

Page 21: App engine

Hola App Engine! desde JavaAcceder a appengine.google.com y crear la app

Crear un ‘web application project’ desde eclipse

Configurar applicationId y versión del proyecto

Desplegar sobre App Engine

Probar en el servidor de pruebas

http://code.google.com/appengine/docs/java/tools/uploadinganapp.htmlAlternativamente...

Page 22: App engine

Hola App Engine! desde JavaAcceder a appengine.google.com y crear la app

Crear un ‘web application project’ desde eclipse

Configurar applicationId y versión del proyecto

Desplegar sobre App Engine

Acceder a http://applicationId.appspot.com

Probar en el servidor de pruebas

http://code.google.com/appengine/docs/java/tools/uploadinganapp.htmlAlternativamente...

Page 23: App engine

Anatomía de una App Java

Page 24: App engine

Anatomía de una App Java

Page 25: App engine

Anatomía de una App Java

Page 26: App engine

Limitaciones: El SandboxNo se pueden escribir ficheros

No se pueden crear sockets

Las aplicaciones no pueden crear hilos ni procesos

Procesos que duran más de 10’’ son finalizados

Llamadas al sistema están deshabilitadas

JNI y extensiones nativas de Python deshabilitadas

Page 27: App engine

Limitaciones: El SandboxNo se pueden escribir ficheros

No se pueden crear sockets

Las aplicaciones no pueden crear hilos ni procesos

Procesos que duran más de 10’’ son finalizados

Llamadas al sistema están deshabilitadas

JNI y extensiones nativas de Python deshabilitadas

el datastoreAlmacenamiento en

Page 28: App engine

Limitaciones: El SandboxNo se pueden escribir ficheros

No se pueden crear sockets

Las aplicaciones no pueden crear hilos ni procesos

Procesos que duran más de 10’’ son finalizados

Llamadas al sistema están deshabilitadas

JNI y extensiones nativas de Python deshabilitadas

el datastoreAlmacenamiento en

batch? (Crawling, etc.)Y si necesitamos

Page 29: App engine

Limitaciones: El SandboxNo se pueden escribir ficheros

No se pueden crear sockets

Las aplicaciones no pueden crear hilos ni procesos

Procesos que duran más de 10’’ son finalizados

Llamadas al sistema están deshabilitadas

JNI y extensiones nativas de Python deshabilitadas

el datastoreAlmacenamiento en

batch? (Crawling, etc.)Y si necesitamos

http://bit.ly/k5jiUcrawlers y GAE @ stackoverflow:

Page 30: App engine

Users Service

Cuentas de google apps

Open Id

3 tipos de autenticación

Usuario en sesión?

Usuario es administrador?

Redirección a login

Servicios para

Redirección a sign-up

Users Service API package summary: http://bit.ly/9xDdCK

Page 31: App engine

Users Service en la práctica

Page 32: App engine

Users Service en la práctica

Autenticación usando el entorno local (stubs)

Page 33: App engine

Users Service en la práctica

Autenticación en App Engine

Page 34: App engine

Datastore (el almacén de datos)

Persistencia de entidades

Distribuido, replicado y balanceado

Big Table y GFS

http://code.google.com/appengine/docs/java/datastore/

No relacionalNo hay esquema(à-la Sorted Set)Transaccional

Page 35: App engine

Datastore standard APIs: JPA y JDOGarantizan portabilidad A diferencia del A P Ide bajo nivel(à-la SQL) JPQL y JDOQL

Page 36: App engine

Datastore standard APIs: JPA y JDOGarantizan portabilidad A diferencia del A P Ide bajo nivel(à-la SQL) JPQL y JDOQL

¿Cuál usar?

Page 37: App engine

Datastore standard APIs: JPA y JDOGarantizan portabilidad A diferencia del A P Ide bajo nivel(à-la SQL) JPQL y JDOQL

¿Cuál usar?

http://db.apache.org/jdo/jdo_v_jpa.html

Page 38: App engine

Datastore standard APIs: JPA y JDOGarantizan portabilidad A diferencia del A P Ide bajo nivel(à-la SQL) JPQL y JDOQL

¿Cuál usar?

http://db.apache.org/jdo/jdo_v_jpa.html

Data Nucleus Class enhancement

Page 39: App engine

Datastore en la práctica

Page 40: App engine

Datastore en la práctica

Page 41: App engine

Datastore en la práctica

Page 42: App engine

Datastore en la práctica

Muestran el tablón y dirigen al usuario al login

Page 43: App engine

Datastore en la práctica

Modela la entidad a persistir @PersistentCapable

Page 44: App engine

Datastore en la práctica

Tramita la persistencia del mensaje publicado

Page 45: App engine

Datastore en la práctica

Singleton para las operaciones de gestión de persistencia

Page 46: App engine

Mail Service

Mail Service API: http://bit.ly/aig7Sf

Basado en JSR919 (javax.mail)

Recepción mapeada a HTTP/POST

http://appid.appspot.com/_ah/mail/<address>

Page 47: App engine

Mail Service en la práctica

Page 48: App engine

Mail Service en la práctica

Page 49: App engine

Mail Service en la práctica

Procesa el mensaje de correo

Page 50: App engine

Mail Service en la práctica

Mapea el servlet en la url /_ah/mail/*

Page 51: App engine

Mail Service en la práctica

Declara que la app puede recibir mail

Page 52: App engine

Mail Service en la práctica

Page 53: App engine

XMPP (A.K.A. Jabber) Service

Mensajería instantánea

http://www.ietf.org/rfc/rfc3921.txt*XMPP IM standard (pp 4 y 5)XMPP Service API http://bit.ly/clIjJ8

Page 54: App engine

XMPP (A.K.A. Jabber) Service

Mensajería instantáneaChat botsNotificacionesInterfacesa servicios

http://www.ietf.org/rfc/rfc3921.txt*XMPP IM standard (pp 4 y 5)XMPP Service API http://bit.ly/clIjJ8

Page 55: App engine

XMPP (A.K.A. Jabber) Service

Mensajería instantánea

Serv

idor

Envío y recepción de mensajes*

http://www.ietf.org/rfc/rfc3921.txt*XMPP IM standard (pp 4 y 5)XMPP Service API http://bit.ly/clIjJ8

Page 56: App engine

XMPP (A.K.A. Jabber) Service

Mensajería instantánea

Serv

idor

Envío y recepción de mensajes*

Consulta de estado cliente (disponible...)

http://www.ietf.org/rfc/rfc3921.txt*XMPP IM standard (pp 4 y 5)XMPP Service API http://bit.ly/clIjJ8

Page 57: App engine

XMPP (A.K.A. Jabber) Service

Mensajería instantánea

Serv

idor

Envío y recepción de mensajes*

Consulta de estado cliente (disponible...)

http://www.ietf.org/rfc/rfc3921.txt*XMPP IM standard (pp 4 y 5)XMPP Service API http://bit.ly/clIjJ8

Recepción mapeada a HTTP/POST

http://appid.appspot.com/_ah/xmpp/message/chat

Page 58: App engine

XMPP (A.K.A. Jabber) Service

Mensajería instantánea

Serv

idor

Envío y recepción de mensajes*

Consulta de estado cliente (disponible...)

http://www.ietf.org/rfc/rfc3921.txt*XMPP IM standard (pp 4 y 5)XMPP Service API http://bit.ly/clIjJ8

Recepción mapeada a HTTP/POST

Page 59: App engine

XMPP (A.K.A. Jabber) Service

Varios aliases (JIDs) para la misma app

XMPP Service API http://bit.ly/clIjJ8

[email protected]@app-id.appspotchat.com

Page 60: App engine

XMPP Service en la práctica

Page 61: App engine

XMPP Service en la práctica

Page 62: App engine

URL Fetch ServiceEnvuelve a java.net.URL

A bajo nivel: fetching (obtiene HTTPResponse)

Hay que parsearla

Page 63: App engine

URL Fetch en la práctica

Page 64: App engine

URL Fetch en la práctica

Page 65: App engine

URL Fetch en la práctica

http://code.google.com/intl/en/apis/ajaxlanguage/documentation/

Page 66: App engine

URL Fetch en la práctica

http://code.google.com/intl/en/apis/ajaxlanguage/documentation/

public String translate(String message){! ! String translatedContent=null;! ! try {! ! ! //..composición de la url! ! ! URL googleTranslate=new URL(parametrizedURL);! ! ! BufferedReader reader=new BufferedReader(new InputStreamReader

(googleTranslate.openStream()));! ! ! StringBuilder sb=new StringBuilder();! ! ! while(reader.ready()){! ! ! ! sb.append(reader.readLine());! ! ! }! ! translatedContent=sb.toString();! ! //parseado de la respuesta (JSON)! ! } catch (Throwable e) {! ! ! //...! ! }! ! return translatedContent;! }

Page 67: App engine

URL Fetch en la práctica

http://code.google.com/intl/en/apis/ajaxlanguage/documentation/

public String translate(String message){! ! String translatedContent=null;! ! try {! ! ! //..composición de la url! ! ! URL googleTranslate=new URL(parametrizedURL);! ! ! BufferedReader reader=new BufferedReader(new InputStreamReader

(googleTranslate.openStream()));! ! ! StringBuilder sb=new StringBuilder();! ! ! while(reader.ready()){! ! ! ! sb.append(reader.readLine());! ! ! }! ! translatedContent=sb.toString();! ! //parseado de la respuesta (JSON)! ! } catch (Throwable e) {! ! ! //...! ! }! ! return translatedContent;! }

http://code.google.com/p/json-simple/

Page 68: App engine

URL Fetch en la práctica

Page 69: App engine

Otros servicios

Memcache

Tratamiento imágenes

Cron

Page 70: App engine

La consola de administración

Page 71: App engine

Google app engine y python

Page 72: App engine

Bibliografía

Page 73: App engine

Otros recursos

• Using Django with App Enginehttp://www.42topics.com/dumps/django/docs.html

• Google app engine Cookbookhttp://appengine-cookbook.appspot.com/

• AppScale: Despliegue de la infraestructura AppEngine sobre Amazon EC2, Eucalyptus, Xen ...http://code.google.com/p/appscale/

• JRuby on Rails en GAE*http://olabini.com/blog/2009/04/jruby-on-rails-on-google-app-engine/

Page 74: App engine

Gracias

Page 75: App engine

CLOUD COMPUTING.DESARROLLO DE APLICACIONES Y

MINERÍA WEB

Miguel Fernández Fernández [email protected]

Programa de extensión universitariaUniversidad de Oviedo