Upload
miguel-fernandez
View
1.000
Download
1
Embed Size (px)
Citation preview
CLOUD COMPUTING.DESARROLLO DE APLICACIONES Y
MINERÍA WEB
Miguel Fernández Fernández [email protected]
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
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
[email protected]@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 [email protected]
Programa de extensión universitariaUniversidad de Oviedo