2. Neodoo Microsystems S.L. 2
Cloud Computing
● La computación en la nube (Cloud computing) es un paradigma que permite ofrecer servicios
de computación a través de Internet.
Autor: Oliver Widder
www.geekandpoke.com
Licencia Creative Commons
3. Cloud Computing (I)
● Capas de la nube:
● IaaS (infrastructure as a service):
– Infraestructura de computación y
almacenamiento.
– Orientado al desarrollador.
● PaaS (Platform as a service):
– Entorno de desarrollo y ejecución
de la aplicación.
– Orientado al desarrollador.
● SaaS (Software as a service):
– Aplicaciones en entorno web.
– Orientado al cliente final.
5. GAE: ¿Por qué?
● Comienzo fácil
● Escalabilidad automática
● Fiabilidad, rendimiento y seguridad de la
infraestructura de Google
● Alojamiento gratuito hasta cierto nivel
6. GAE: Comienzo fácil
• App Engine es una completa pila de desarrollo que
emplea tecnologías habituales para crear y alojar
aplicaciones web.
• En App Engine, puedes crear el código de tu aplicación,
probar la aplicación en tu equipo local y subirla a Google
únicamente haciendo clic en un botón o introduciendo una
secuencia en la línea de comandos.
9. GAE: Escalabilidad automática
• Por primera vez, tus aplicaciones pueden aprovechar las
mismas tecnologías escalables sobre las que están creadas las
aplicaciones de Google como, por ejemplo, BigTable y GFS.
• App Engine dispone de una función de escalabilidad
automática, así que lo único que tienes que hacer es crear el
código de tu aplicación y nosotros nos encargamos del resto.
• App Engine puede satisfacer tus necesidades
independientemente del número de usuarios de que dispongas
y de la cantidad de datos que almacene tu aplicación.
10. GAE: Fiabilidad, rendimiento,...
• La infraestructura de Google es famosa por su gran fiabilidad y
por su alto rendimiento.
• Con App Engine, puedes aprovechar los diez años de
experiencia que posee Google en la ejecución de sistemas
escalables de forma masiva y concebidos para el rendimiento.
• A todas las aplicaciones de App Engine les aplican las mismas
políticas de seguridad, privacidad y protección de datos que a
las demás aplicaciones de Google.
11. GAE: Alojamiento gratuito
• Crear una aplicación en App Engine no sólo resulta fácil.
¡Además es gratis!
• Puedes crear una cuenta y publicar una aplicación que la gente
podrá utilizar inmediatamente sin ningún coste ni obligación.
• Una aplicación de una cuenta gratuita dispone de hasta 500
MB de espacio y admite hasta cinco millones de vistas
mensuales.
• Cuando estés listo para más, puedes habilitar la facturación,
configurar un presupuesto diario máximo y asignarle el
presupuesto a cada recurso en función de tus necesidades.
16. GAE-Python
● Permite provechar la gran cantidad de bibliotecas, de herramientas y de
frameworks para Python que utilizan los desarrolladores profesionales para
crear aplicaciones web internacionales.
● Las aplicaciones web Python interactúan con el servidor web App Engine
mediante el uso del protocolo CGI. Las aplicaciones pueden utilizar un
framework de aplicaciones web compatible con WSGI mediante un adaptador
de CGI.
● Para facilitar el comienzo, App Engine incluye un framework de aplicaciones
web sencillas denominado webapp.
● Para aplicaciones de mayor tamaño, los frameworks avanzados de terceros
como Django, por ejemplo, también funcionan con App Engine.
17. GAE-Python: Entorno ejecución
● App Engine es compatible con Python 2.5.
● Python se ejecuta en un entorno seguro de "zona de pruebas".
● Puede ejecutar cualquier código Python, incluidos los módulos Python que
contenga tu aplicación, así como la biblioteca Python estándar.
● El intérprete no puede cargar los módulos Python con el código C, puesto que
se trata de un entorno Python "puro".
● La zona de pruebas asegura que la aplicación sólo pueda realizar acciones
que no interfieran con el rendimiento ni con la escalabilidad de otras
aplicaciones.
●El intérprete de Python genera una excepción cuando una aplicación intenta
importar un módulo de la biblioteca estándar conocida para trabajar fuera de las
restricciones de la zona de pruebas.
18. GAE-Python: Python puro
● El entorno incluye la biblioteca estándar de Python.
● Algunos módulos se han desactivado porque sus funciones principales no son
compatibles con App Engine como :
● La interconexión o la escritura en el sistema de archivos.
● El módulo os está disponible, pero algunas funciones no compatibles se
encuentran inhabilitadas.
Si se intenta importar un módulo no compatible o utilizar una función no
compatible, se generará una excepción.
19. GAE-Python: Módulos
Algunos módulos de la biblioteca estándar se han sustituido o se han
personalizado para que funcionen con App Engine. Por ejemplo:
● cPickle se ha aliado con pickle. Las funciones específicas de cPickle no
son compatibles.
● marshal está vacío. La importación se realizará correctamente, pero no si
se utiliza este módulo.
● Estos módulos están igualmente vacíos: imp, ftplib, select, socket
● tempfile se encuentra inhabilitado, salvo en el caso de TemporaryFile, que
se ha aliado con StringIO.
● logging está disponible y se recomienda su uso. Consulta la información
que aparece a continuación.
20. GAE-Python: No se puede
● Escribir en el sistema de archivos. La lectura desde el sistema de archivos
está permitida y todos los archivos de aplicación subidos con la aplicación están
disponibles.
● Abrir un socket ni acceder a otro host directamente. Una aplicación puede
utilizar el servicio de extracción de URL de App Engine para realizar solicitudes
HTTP y HTTPS a otros hosts en los puertos 80 y 443, respectivamente.
● Generar un subproceso. El procesamiento de una solicitud web a una
aplicación debe ser un único proceso que dure unos cuantos segundos. Los
procesos que tardan mucho tiempo en responder se finalizan para evitar la
sobrecarga del servidor web.
● Realizar otro tipo de llamadas al sistema.
21. GAE-Python: Tiempo de solicitud
● Se dispone de una cantidad de tiempo limitada para generar y devolver una
respuesta a una solicitud, en general, 30 segundos aproximadamente. Una vez
alcanzado el plazo, el controlador de solicitudes se interrumpe.
● El entorno de tiempo de ejecución Python interrumpe el controlador de
solicitudes mediante la generación de la excepción DeadlineExceededError
del paquete google.appengine.runtime. Si el controlador de solicitud no detecta
esta ni otras excepciones, el entorno de tiempo de ejecución devuelve al cliente
un error de servidor HTTP 500.
● El controlador de solicitud puede detectar este error para personalizar la
respuesta.
22. GAE-Python: Servicios ofrecidos
● Almacén de datos. Incluye herramientas de modelado de datos muy
completas para gestionar los esquemas de datos. El API admite dos interfaces
para realizar consultas al almacén de datos, incluido GQL, un lenguaje de
consultas similar a SQL que también se utiliza en la consola de administración.
● Memcache. Proporciona un almacenamiento en caché distribuido compatible
con el API Memcache Python.
● Extracción de URL. Para acceder a recursos en la web usando los protocolos
HTTP y HTTPS. Se pueden utilizar los módulos urllib, urllib2 o httplib de la
biblioteca estándar Python o bien el API de servicio de extracción de URL de
App Engine.
● Envio de emails, tratamiento de imagenes, usar cuentas de google, tareas
programadas, ...
23. GAE-Python: Solicitudes y CGI
● Cuando App Engine recibe una solicitud web para tu aplicación, App Engine
ejecuta la secuencia de comandos de controlador que se corresponde con la
URL, como se describe en el archivo de configuración app.yaml de la
aplicación.
●App Engine utiliza el estándar CGI para comunicar los datos de solicitud al
controlador y recibir la respuesta.
● App Engine utiliza varios servidores web para ejecutar tu aplicación y
ajustará automáticamente el número de servidores en uso para procesar las
solicitudes de una forma segura.
● Una determinada solicitud se puede enviar a cualquier servidor, que no tiene
que ser el mismo servidor que procesó una solicitud anterior procedente del
mismo usuario.
25. GAE-Python: Herramientas
Incluye herramientas para probar tu aplicación, subir los archivos de tu
aplicación, gestionar los índices del almacén de datos, descargar los datos del
registro y subir grandes cantidades de datos al almacén de datos:
● Servidor de desarrollo: Simula el almacén de datos, los servicios y las
restricciones.
● appcfg.py: Herramienta multiuso para subir aplicación, actualización de
indice de datos, descargar logs, ...
● Subida de datos: Puede añadir datos al almacén de datos de tu aplicación
desde tus archivos de datos locales. Esta herramienta puede extraer los
datos de los archivos CSV, un formato de hoja de cálculo compatible con la
mayoría de software de hojas de cálculo como, por ejemplo, Google Docs o
Microsoft Excel.
26. GAE-Python: Bibliotecas externas
● Django 0.96.1
● WebOb 0.9
● PyYAML 3.05
● Puedes incluir otras bibliotecas Python puras en
tu aplicación.
27. GAE-Python: WEBAPP
● Google App Engine admite cualquier framework creado en su totalidad con
Python que utilice el estándar CGI.
● Y cualquier framework compatible con WSGI que utilice un adaptador de CGI.
● Incluidos Django, CherryPy, Pylons y web.py.
● App Engine incluye un sencillo framework para aplicaciones web denominado
webapp.
●El framework webapp está instalado en el entorno de App Engine y en el kit de
desarrollo de software (SDK), por lo que no tendrás que asociarlo al código de
tu aplicación para utilizarlo.
28. GAE-Webapp: Partes
● Una o varias clases RequestHandler que procesan solicitudes y generan
respuestas,
● Una instancia de WSGIApplication que dirige las solicitudes entrantes a los
controladores en función de su URL.
● Una rutina principal que ejecuta WSGIApplication con un adaptador de CGI.
29. GAE-Webapp: Hola Mundo
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class MainPage(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')
application = webapp.WSGIApplication(
[('/', MainPage)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
30. GAE-Webapp: Funciones
● El módulo webapp está incluido en el paquete google.appengine.ext. Este
módulo se facilita con el SDK y también se encuentra en el entorno de tiempo
de ejecución de producción.
● Cuando webapp recibe una solicitud GET HTTP para una URL , crea una
instancia de la clase y ejecuta el método get de esa instancia.
● Se puede obtener información sobre la solicitud y respuesta dentro del método
con self.request y self.response.
● La propia aplicación se representa mediante una instancia de
webapp.WSGIApplication.
● La función run_wsgi_app() utiliza una instancia WSGIApplication (u otro
objeto de aplicación compatible con WSGI) y la ejecuta en el entorno CGI de
App Engine.
31. GAE-Webapp: Cuentas google
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class MainPage(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
if user:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, ' + user.nickname())
else:
self.redirect(users.create_login_url(self.request.uri))
application = webapp.WSGIApplication([('/', MainPage)], debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
32. GAE-Django: Introducción
● Google App Engine incluye Django 0.96.
● Si estás utilizando la última versión estable, no tendrás que instalar nada.
● Sólo tendrás que importar tus módulos de Django como harías normalmente.
● También se cubren las modificaciones que se deben incluir si se utiliza la
versión de desarrollo de Django.
33. GAE-Django: Controlador WSGI I
● Para que tu aplicación Django se inicie con el controlador WSGI, sólo tienes
que realizar unos sencillos pasos.
● Debes importar util desde google.appengine.ext.webapp y el módulo del
controlador desde Django.
● Por otra parte, en lugar de gestionar las excepciones con manage.py, es
posible registrar todas las excepciones con Google App Engine y visualizar los
registros en la consola de administración.
34. GAE-Django: Controlador WSGI II
import logging, os
# Google App Engine imports.
from google.appengine.ext.webapp import util
# Force Django to reload its settings.
from django.conf import settings
settings._target = None
# Must set this env var before importing any part of Django
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import logging
import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher
35. GAE-Django: Controlador WSGI III
def log_exception(*args, **kwds):
logging.exception('Exception in request:')
# Log errors.
django.dispatch.dispatcher.connect(
log_exception, django.core.signals.got_request_exception)
# Unregister the rollback event handler.
django.dispatch.dispatcher.disconnect(
django.db._rollback_on_exception,
django.core.signals.got_request_exception)
def main():
# Create a Django application for WSGI.
application = django.core.handlers.wsgi.WSGIHandler()
# Run the WSGI CGI handler with that application.
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
37. GAE-Django: Versión de desarrollo I
● Para utilizar la versión de desarrollo, debes descargar todo el proyecto de
Django e incluirlo en el directorio de nivel superior de tu aplicación.
● Para reducir el número de archivos implementados en Google App Engine,
puedes eliminar los siguientes directorios de tu carpeta de Django:
● django/bin
● django/contrib/admin
● django/contrib/auth
● django/contrib/databrowse
● django/test
● Se tiene que modificar "main.py" para eliminar la versión estándar de Django y
cargar la copia que hayas incluido con tu aplicación.
38. GAE-Django:Versión de desarrollo II
import logging, os, sys
# Google App Engine imports.
from google.appengine.ext.webapp import util
# Remove the standard version of Django.
for k in [k for k in sys.modules if k.startswith('django')]:
del sys.modules[k]
# Force sys.path to have our own directory first, in case we want to import
# from it.
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
# Must set this env var *before* importing any part of Django
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
39. GAE-Django:Versión desarrollo III
import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher
def main():
# Create a Django application for WSGI.
application = django.core.handlers.wsgi.WSGIHandler()
# Run the WSGI CGI handler with that application.
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
40. GAE-Django: Configuración I
● App Engine no admite los modelos de Django.
● Se tienen que dejar vacías todas las cadenas "DATABASE_*".
● Las aplicaciones y el middleware de administración y autenticación se deberán
inhabilitar, ya que requieren el uso de modelos de Django.
● Las funciones que proporcionan se encuentran cubiertas por la consola de
administración y el API de usuarios de App Engine, respectivamente.
● Las sesiones también dependen de modelos de Django, por lo que también
tienes que inhabilitarlas.
●Por último, deberás sustituir las referencias a "project.ap" con "app" y
establecer de forma dinámica la ruta de tu directorio de plantillas.
41. GAE-Django: Configuración II
import os
ROOT_URLCONF = 'urls' # Replace 'project.urls' with just 'urls'
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
# 'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
)
INSTALLED_APPS = (
# 'django.contrib.auth',
'django.contrib.contenttypes',
# 'django.contrib.sessions',
'django.contrib.sites',
)
ROOT_PATH = os.path.dirname(__file__)
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or
# "C:/www/django/templates". Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
ROOT_PATH + '/templates',
)
42. GAE-Django: Entorno desarrollo
●El kit de desarrollo de software (SDK) de Google App Engine incluye el servidor
web de desarrollo dev_appserver.py.
● Te permite implementar tu aplicación en el entorno de desarrollo de Google
App Engine.
● Además, no tendrás que utilizar manage.py para sincronizar tu base de datos
al utilizar el almacén de datos de Google App Engine.
43. Referencias
● Python en GAE
http://code.google.com/intl/es/appengine/docs/python/gettingstarted/introduction.htm
● Django en GAE
http://code.google.com/intl/es-ES/appengine/articles/django.html
● Almacenamiento de datos para Django en GAE
http://code.google.com/intl/es-ES/appengine/articles/django-nonrel.html
Notas del editor
Se puede hacer desde eclipse o también desde línea de comandos.
Si se supera el limite de las cuotas devuelve un error.
Las cuotas se renuevan cada dia.
Se pueden ampliar las cuotas pagando. Solo se pagará cuando se superen los limites gratuitos.