09 abril, 2008

Google App Engine

La publicación por Google de un sistema para aprovechar sus recursos e infraestructura para alojar aplicaciones web de usuario, ha sacudido fuertemente a la comunidad de desarrolladores web (en especial de los programadores de Python). En los siguientes enlaces se pueden ver algunas de las reacciones. Y a continuación se puede leer la traducción que he realizado de la página de presentación del servicio.

Google App Engine te permite ejecutar tus aplicaciones web sobre la infraestructura de Google. Las aplicaciones App Engine son fáciles de construir, fáciles de mantener y fáciles de escalar conforme tu tráfico y necesidades de almacenamiento de datos crezcan. Con App Engine, no hay servidores que mantener: Sólo subes tu aplicación, y ya está preparada para servir a tus usuarios.

Puedes servir tu aplicación usando un nombre de dominio gratuito sobre el dominio appspot.com, o usar Google Apps para servirlas desde tu propio dominio. Puedes compartir tus aplicaciones con el mundo, o limitar el acceso a miembros de tu organización.

App Engine no cuesta nada para ponerse en marcha. Regístrate para una cuenta gratuita, y podrás desarrollar y publicar tu aplicación para que la vea todo el mundo, sin cargos y sin ninguna obligación. Una cuenta gratuita puede usar hasta 500MB de almacenamiento persistente, y suficiente PCU y ancho de banda para unas 5 millones de páginas vistas al mes.

Durante la fase preview de Google App Engine, sólo hay cuentas gratuitas disponibles. En el futuro próximo, podrás adquirir recursos de computación adicionales.

El entorno de aplicación

Google App Engine facilita construir una aplicación que se ejecuta fiablemente, incluso bajo condiciones de cargas elevadas y con grandes cantidades de datos. El entorno incluye las siguientes características:

  • servicio web dinámico, con pleno soporte para tecnologías web comunes
  • almacenamiento persistente con consultas, ordenación y transacciones
  • escalado y balanceo de carga automáticos
  • APIs para la autenticación de usuarios y para enviar emails usando cuentas Google
  • un entorno de desarrollo local completo que simula Google App Engine en tu equipo

Las aplicaciones de Google App Engine se implementan usando el lenguaje de programación Python. El entorno en tiempo de ejecución (runtime) incluye el lenguaje Python completo y muchas de las librerías estándares de Python.

Aunque Python es actualmente el único lenguaje soportado por Google App Engine, esperamos soportar más lenguajes en el futuro.

La caja de arena (Sandbox)

Las aplicaciones se ejecutan en un entorno seguro que provee acceso limitado al sistema operativo subyacente. Estas limitaciones permiten a App Engine distribuir las peticiones web para aplicaciones a través de múltiples servidores, e iniciar y detener servidores según las demandas de tráfico. La sandbox aisla tu aplicación en su propio entorno seguro y fiable que es independiente del hardware, del sistema operativo y de la localización física del servidor web.

Ejemplos de las limitaciones del entorno seguro de la sandbox incluyen:

  • Una aplicación sólo puede acceder a otros ordenadores en Internet a través de los servicios y APIs de obtención de URL y email. Otros ordenadores sólo pueden conectar a la aplicación haciendo peticiones HTTP (o HTTPS) sobre los puertos estándar.
  • Una aplicación no puede escribir al sistema de archivos. Una aplicación puede leer archivos, pero sólo archivo subidos con el código de la aplicación. La aplicación debe usar el almacenamiento de App Engine para todos los datos que persisten entre peticiones.
  • El código de aplicación sólo se ejecuta en respuesta a una petición web , y debe devolver datos de respuesta en unos pocos segundos. Un manejador (handler) de peticiones no puede crear un nuevo sub-proceso o ejecutar código después de que la respuesta haya sido enviada.

El entorno Python en tiempo de ejecución

App Engine provee un entorno en tiempo de ejecución que usa el lenguaje de programación Python. Otras configuraciones de lenguajes de programación y entornos de tiempo de ejecución están siendo considerados para futuras versiones.

El entorno de tiempo de ejecución Python usa la versión Python 2.5.2.

El entorno incluye la librería estándar Python. Desde luego, llamar a un método de la librería que viole la restricción de la sandbox, tal como intentar abrir un socket o escribir a un archivo, no tendrá éxito. Por conveniencia, varios módulos en la librería estándar cuyas características principales no están soportadas por el entorno en tiempo de ejecución han sido deshabilitadas, y el código que las importa lanzará un error.

El código de aplicación debe escribirse exclusivamente con Python. El código con extensiones escritas en C no está soportado.

El entorno Python provee APIs Python ricas para servicios de almacén de datos, cuentas Google, obtención de URL y email. App Engine también provee una framework simple para aplicaciones web Python llamada webapp para facilitar la construcción de aplicaciones.

Por conveniencia, App Engine también incluye la framework de aplicaciones web Django, version 0.96.1. Nótese que el almacén de datos de App Engine datastore no es una base de datos relacional, que es requerida por algunos componentes Django. Algunos componentes, tales como el motor de plantillas (templates) de Django, funcionan como está documentado, mientras que otros requieren un poco más de esfuerzo. Mirar la sección de Artículos sobre usar Django con App Engine.

Puedes subir otras librerías de terceros con tu aplicación, mientras estén implementadas con Python puro y no requieran ningún módulo de librería estándar no soportado.

Para más información sobre el entorno de ejecución de Python, mirar El Entorno en Tiempo de Ejecución Python.

El almacén de datos

App Engine provee un potente servicio de almacenamiento de datos distribuidos que incluye un motor de consultas y transacciones. Conforme el servidor web distribuido crece con tu tráfico, el almacén de datos distribuidos crece con tus datos.

El almacén de datos de The App Engine no es como una tradicional base de datos relacional. Objetos de datos, o "entidades", tienen una clase y un conjunto de propiedades. Las consultas pueden recuperar entidades de una clase dada filtradas y ordenadas por los valores de las propiedades. Los valores de las propiedades pueden ser cualquier de los tipo de valores de propiedades soportados.

El API Python para el almacén de datos incluye una interfície de modelado de datos que puede definir una estructura para las entidades del almacén. Un modelo de datos puede indicar que una propiedad debe tener un valor dentro de un rango, o proveer un valor por defecto si no se indica ninguno. Tu aplicación puede proveer tanta o tan poca estructura para los datos como necesite.

El almacén de datos usa bloqueo optimista para el control de la concurrencia. Una actualización de una entidad ocurre en una transacción que es reintentada un número fijo de veces si otros procesos están intentando actualizar la misma entidad simultáneamente. Tu aplicación puede ejecutar múltiples operaciones de almacenamiento de datos en una sola transacción con el resultado de éxito o fallo de todas ellas, para asegurar la integridad de tus datos.

El almacén de datos implementa transacciones a lo largo de su red distribuida usando "grupos de entidades". Una transacción manipula las entidades dentro de un solo grupo. Las entidades del mismo grupo se guardan juntas para la ejecución eficiente de transacciones. Tu aplicación puede asignar entidades a grupos cuando las entidades son creadas.

Para mayor información sobre el almacén de datos, mira la referencia de la API del Almacén de Datos.

Cuentas de Google

App Engine incluye un servicio API para integrar con cuentas de Google. Tu aplicación puede permitir a un usuario que abra sesión (log in) con una cuenta de Google, y acceder a su dirección de email y nombre de usuario asociado con la cuenta. Usar cuentas de Google permite al usuario iniciar tu aplicación más rápidamente, porque el usuario podría no necesitar crear una nueva cuenta. También te ahorra el esfuerzo de implementar un sistema de cuentas de usuario sólo para tu aplicación.

Si tu aplicación se ejecuta bajo Google Apps, puede usar las mismas características con miembros de tu organización y cuentas de Google Apps.

El API de usuarios también puede decirle a la aplicación si el usuario actual es un administrador registrado para la aplicación. Esto facilita implementar áreas para administradores en tu sitio.

Para mayor información sobre integración con cuentas de Google, mira la referencia de la API de Usuarios.

Los servicios de obtención de URL y Email

Las aplicaciones pueden acceder a recursos de Internet, tales como servicios web u otros datos, usando el servicio de obtención de URL de App Engine. El servicio de obtención de URL recupera recursos web usando la misma infraestructura de alta velocidad de Google que recupera las páginas web para otros productos de Google.

Las aplicaciones pueden también enviar mensajes de email usando el servicio de email de App Engine. El servicio de correo también usa la infraestructura de Google para enviar mensajes de email.

Para más información sobre los servicios de obtención de URL y correo, mira la referencia de la API de Obtención de URL y la referencia de la API de Correo.

Flujo de desarrollo

El Kit de desarrollo de software de App Engine (SDK) incluye una aplicación servidor web que emula todos los servicios de App Engine en tu ordenador local. El SDK incluye todas las APIs y librerías disponibles en App Engine. El servidor web también simula el entorno seguro sandbox, incluyendo comprobaciones de importación de módulos deshabilitados e intentos de acceder a recursos del sistema no permitidos.

El SDK de Python está implementado en Python puro, y se ejecuta en cualquier plataforma con Python 2.5, incluyendo Windows, Mac OS X y Linux. Puedes obtener Python para tu sistema en la web de Python. El SDK está disponible como un archivo Zip, y hay instaladores disponibles para Windows y Mac OS X.

Puedes descargar el SDK aquí.

El SDK también incluye una herramienta para subir tu aplicación a App Engine. Una vez que has creado tu código de aplicación, archivos estáticos y archivos de configuración, puedes ejecutar la herramienta para subir los datos. La herramienta te pide tu cuenta de correo de Google y la contraseña.

Cuando construyes una versión principal de una aplicación que esté ejecutándose en App Engine, puedes subir la nueva versión como tal. La vieja versión continuará sirviendo usuarios hasta que pases a la nueva versión. Puedes probar la nueva versión en App Engine mientras la vieja versión sigue ejecutándose.

La Consola de Administración es una interfície basada en web para gestionar tus aplicaciones ejecutándose en App Engine. Puedes usarla para crear nuevas aplicaciones, configurar nombres de dominio, cambiar qué versión de tu aplicación está en funcionamiento, examinar los registros (logs) de accesos y errores, e inspeccionar el almacén de datos de la aplicación.

Cuotas y límites

No sólo es fácil de crear una aplicación de App Engine, sino que ¡es gratis! Puedes crear una cuenta y publicar una aplicación que la gente pueda usar directamente sin cargos, y sin obligaciones. Una aplicación en una cuenta gratuita puede usar hasta 500MB de almacenamiento y hasta 5 millones de páginas vistas al mes.

Durante la fase preview de Google App Engine, sólo hay cuentas gratuitas disponibles. En el futuro próximo, podrás adquirir recursos de computación adicionales.

Durante la fase preview, puedes registrar hasta 3 aplicaciones.

Los límites de recursos de aplicación, o "cuotas", se refrescan continuamente. Si tu aplicación alcanza una cuota basada en tiempo, tal como el ancho de banda, la cuota empezará a refrescarse inmediatamente al ritmo del límite dado. Las cuotas fijas tales como el uso de almacenamiento son sólo liberadas cuando se decrementa el uso.

Algunas características imponen límites no relacionados con cuotas para proteger la estabilidad del sistema. Por ejemplo, cuando una aplicación se llama para servir una petición web, debe dar una respuesta en unos pocos segundos. Si la aplicación tarda demasiado, el proceso es terminado y el servidor devuelve un mensaje de error al usuario. El tiempo límite es dinámico, y puede ser acortado si un manejador (handler) de peticiones alcanza su límite frecuentemente con el fin de conservar recursos.

Otro ejemplo de límite de servicio es el número de resultados obtenidos por una consulta. Una consulta puede devolver como mucho 1000 resultados. Las consultas que generen más resultados, sólo devolverán ese máximo. En este caso, una petición que lleve a cabo esa consulta no es probable que devuelva una petición antes del tiempo límite, pero el límite se mantiene para conservar los recursos del almacén de datos.

Intentos de subvertir o abusar de las cuotas, tales como operar aplicaciones sobre múltiples cuentas y que trabajen en tandem, son una violación de los Términos de Servicio, y podría resultar en aplicaciones deshabilitadas o en cuentas clausuradas.

Para mayor información...

Para mayor información sobre el Google App Engine:

Publicar un comentario en la entrada

Últimos links en indiza.com