App engine

Preview:

Citation preview

CLOUD COMPUTING.DESARROLLO DE APLICACIONES Y

MINERÍA WEB

Miguel Fernández Fernández miguelff@innova.uniovi.es

Programa de extensión universitariaUniversidad de Oviedo

Google App Engine

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

Google App Engine

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

Una introducción a

¿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

¿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

¿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

¿Qué aporta Google App Engine?

Escalabilidad

Ahorro en el coste de propiedad

Amplio conjunto de APIs

Facilidad de desarrollo

Sencillez en el mantenimiento

¿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

SDK

ConsolaDeAdministración

Ciclo de desarrollo

Despliegue

Prueba

Construcción

Gestión

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

Desarrollo de aplicaciones GAEEl runtime Java

El SDK de Java

appengine-java-sdk-1.3.6*

API JARs

Servidor de pruebas

App Engine Uploader

Documentación

Ejemplos

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*

Hola App Engine! desde Java

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

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

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

Crear un ‘web application project’ desde eclipse

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

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

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...

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...

Anatomía de una App Java

Anatomía de una App Java

Anatomía de una App Java

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

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

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

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:

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

Users Service en la práctica

Users Service en la práctica

Autenticación usando el entorno local (stubs)

Users Service en la práctica

Autenticación en 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

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

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

¿Cuál usar?

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

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

Datastore en la práctica

Datastore en la práctica

Datastore en la práctica

Datastore en la práctica

Muestran el tablón y dirigen al usuario al login

Datastore en la práctica

Modela la entidad a persistir @PersistentCapable

Datastore en la práctica

Tramita la persistencia del mensaje publicado

Datastore en la práctica

Singleton para las operaciones de gestión de persistencia

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>

Mail Service en la práctica

Mail Service en la práctica

Mail Service en la práctica

Procesa el mensaje de correo

Mail Service en la práctica

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

Mail Service en la práctica

Declara que la app puede recibir mail

Mail Service en la práctica

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

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

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

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

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

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

XMPP (A.K.A. Jabber) Service

Varios aliases (JIDs) para la misma app

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

app-id@appspot.comanything@app-id.appspotchat.com

XMPP Service en la práctica

XMPP Service en la práctica

URL Fetch ServiceEnvuelve a java.net.URL

A bajo nivel: fetching (obtiene HTTPResponse)

Hay que parsearla

URL Fetch en la práctica

URL Fetch en la práctica

URL Fetch en la práctica

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

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;! }

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/

URL Fetch en la práctica

Otros servicios

Memcache

Tratamiento imágenes

Cron

La consola de administración

Google app engine y python

Bibliografía

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/

Gracias

CLOUD COMPUTING.DESARROLLO DE APLICACIONES Y

MINERÍA WEB

Miguel Fernández Fernández miguelff@innova.uniovi.es

Programa de extensión universitariaUniversidad de Oviedo

Recommended