¿Qué es Google Apps Engine?

Google App Engine te permite ejecutar aplicaciones web en la infraestructura de Google. Las aplicaciones del App Engine son fáciles de programar , fáciles de mantener, y fáciles de escalar a tu tráfico y el almacenamiento que se necesite. Con App Engine, no hay servidores que mantener: tu solamente subes tu app, y está lista para ser servida a tus usuarios.

Puedes servir tu app desde tu propio dominio (como por ejemplo http://www.example.com) utilizando Google Apps. O, pùedes servir tu app utilizando el nombre que quieras en el dominio appspot.com . Puedes compartir tu app con el mundo, o limitar el acceso a los miembros de tu organización.

Google App Engine soporta apps escritas en diferentes lenguajes de programación. Con el entorno Java del App Engine , puedes desarrollar tu app utilizando la tecnologia Java estandar, incluyendo la JVM, Java Servlets, y el lenguage de programación Java – o cualquier otro lenguaje utilizando una JVM o compilador , como puede ser Javascript o Ruby. App Engine además te ofrece dos entornos de ejecución dedicados de Python, cada uno de los cuales incluye el intérprete de Python y la librería estandar de Python. Finalmente, App Engine proporciona un Go runtime environment que se ejecuta nativamente en código Go. Estos entornos de ejecución son construidos para asegurar que tu aplicación se ejecuta rápidamente, de forma segura, y sin interferencia de otras apps del sistema.

Con App Engine, tú solo pagas por lo que tú usas. No hay costes de configuración y no hay cuotas recurrentes a pagar. Los recursos que tu aplicación utiliza, tales como almacenamiento y ancho de banda, son medidos por los gigabytes utilizados y facturados en tarifas competitivas. Tu controlas la máxima cantidad de recursos que tu app puede consumir, asi siempre estás dentro del presupuesto.

El App Engine no cuesta nada para empezar con él. Todas las aplicaciones pueden utilizar hasta 1GB de almacenamiento y suficiente CPU y ancho de banda para soportar un servicio de app de alrededor de 5 millones de páginas vistas al mes, absolutamente gratis. Cuando activas que se facture por tu app, entonces se te cobrará por lo que te pases de esos límites.

 

El entorno de Aplicación

Google App Engine te hace fácil construir una aplicación que se ejecuta de forma fiable, incluso bajo condiciones de estres y con grandes volumenes de datos. App Engine incluye las siguientes características:

  • Servicio de páginas web dinámicas, con soporte completo para utilizar las tecnologías web más comunes.
  • Almacenamiento persistente con queries, ordenación y transacciones.
  • Escalado automático y balance de carga
  • APIs para autenticar usuarios y enviar email utilizando Google Accounts
  • Un entorno de desarrollo local completo que simula el Google App Engine en tu ordenador.
  • Colas de tareas para realizar trabajo del ámbito de la petición web.
  • Tareas planificadas para ser disparadas por eventos en momentos concretos o a frecuencias determinadas.

Tu aplicación puede ejecutar en uno de los tres siguientes entornos de ejecución:

  • El entorno Go
  • El entorno Java
  • El entorno Python (a elegir entre Python 2.5 o Python 2.7)ç

Cada uno de estos entornos de programación proporciona protocolos y tecnologías estandars para desarrollo de aplicaciones web.

 

El cajón de arena (Sandbox)

Applications run in a secure environment that provides limited access to the underlying operating system. These limitations allow App Engine to distribute web requests for the application across multiple servers, and start and stop servers to meet traffic demands. The sandbox isolates your application in its own secure, reliable environment that is independent of the hardware, operating system and physical location of the web server.

Examples of the limitations of the secure sandbox environment include:

  • An application can only access other computers on the Internet through the provided URL fetch and email services. Other computers can only connect to the application by making HTTP (or HTTPS) requests on the standard ports.
  • Applications cannot write to the file system in any of the runtime environments. An application can read files, but only files uploaded with the application code. The app must use the App Engine datastore, memcache or other services for all data that persists between requests. The Python 2.7 environment allows bytecode to be read, written, and modified.
  • Application code only runs in response to a web request, a queued task, or a scheduled task, and must return response data within 60 seconds in any case. A request handler cannot spawn a sub-process or execute code after the response has been sent.

The Go Runtime Environment

App Engine’s Go runtime environment provides a convenient way to implement and deploy web applications written in the Go Programming Language.

The Go runtime environment uses Go release r60.3. The SDK includes the Go compiler and standard library, so it has no additional dependencies. As with the Java and Python environments, not all the standard library’s functionality is available inside the sandbox. For example, attempts to open a socket or write to a file will return an os.EINVAL error.

The SDK includes an automated build service to compile your app, so you’ll never need to invoke the compiler yourself. And—as with the Python SDK—your app will be automatically re-built whenever you change the source. This keeps you productive by making the edit-compile-run cycle refreshingly short.

The Go environment provides idiomatic Go APIs for most of the App Engine services.

You can upload other third-party libraries with your application, as long as they are implmented in pure Go.

For more information about the Go runtime environment, see The Go Runtime Environment.

The Java Runtime Environment

You can develop your application for the Java runtime environment using common Java web development tools and API standards. Your app interacts with the environment using the Java Servlet standard, and can use common web application technologies such as JavaServer Pages (JSPs).

The Java runtime environment uses Java 6. The App Engine Java SDK supports developing apps using either Java 5 or 6.

The environment includes the Java SE Runtime Environment (JRE) 6 platform and libraries. The restrictions of the sandbox environment are implemented in the JVM. An app can use any JVM bytecode or library feature, as long as it does not exceed the sandbox restrictions. For instance, bytecode that attempts to open a socket or write to a file will throw a runtime exception.

Your app accesses most App Engine services using Java standard APIs. For the App Engine datastore, the Java SDK includes implementations of the Java Data Objects (JDO) andJava Persistence API (JPA) interfaces. Your app can use the JavaMail API to send email messages with the App Engine Mail service. The java.net HTTP APIs access the App Engine URL fetch service. App Engine also includes low-level APIs for its services to implement additional adapters, or to use directly from the application. See the documentation for the datastorememcacheURL fetchmailimages and Google Accounts APIs.

Typically, Java developers use the Java programming language and APIs to implement web applications for the JVM. With the use of JVM-compatible compilers or interpreters, you can also use other languages to develop web applications, such as JavaScript, Ruby, or Scala.

For more information about the Java runtime environment, see The Java Runtime Environment.

The Python Runtime Environment

With App Engine’s Python runtime environment, you can implement your app using the Python programming language, and run it on an optimized Python interpreter. App Engine includes rich APIs and tools for Python web application development, including a feature rich data modeling API, an easy-to-use web application framework, and tools for managing and accessing your app’s data. You can also take advantage of a wide variety of mature libraries and frameworks for Python web application development, such as Django.

The Python runtime environment uses Python version 2.5.2 by default. You can also choose the Python 2.7.2 runtime.

The Python environment includes the Python standard library. Of course, not all of the library’s features can run in the sandbox environment. For instance, a call to a method that attempts to open a socket or write to a file will raise an exception. For convenience, several modules in the standard library whose core features are not supported by the runtime environment have been disabled, and code that imports them will raise an error.

Application code written for the Python environment must be written exclusively in Python. Extensions written in the C language are not supported.

The Python environment provides rich Python APIs for the datastoreGoogle AccountsURL fetch, and email services. App Engine also provides a simple Python web application framework called webapp to make it easy to start building applications.

You can upload other third-party libraries with your application, as long as they are implemented in pure Python and do not require any unsupported standard library modules.

For more information about the Python runtime environment, see The Python Runtime Environment.

Storing Your Data

The App Engine environment provides a range of options for storing your data:

  • App Engine Datastore provides a NoSQL schemaless object datastore, with a query engine and atomic transactions.
  • Google Cloud SQL provides a relational SQL database service for your App Engine application, based on the familiar MySQL RDBMS.
  • Google Cloud Storage provides a storage service for objects and files up to terabytes in size, accessible from Python and Java applications.

The Datastore

App Engine provides a distributed NoSQL data storage service that features a query engine and transactions. Just as the distributed web server grows with your traffic, the distributed datastore grows with your data. You have the choice between two different data storage options differentiated by their availability and consistency guarantees.

The App Engine datastore is not like a traditional relational database. Data objects, or “entities,” have a kind and a set of properties. Queries can retrieve entities of a given kind filtered and sorted by the values of the properties. Property values can be of any of the supported property value types.

Datastore entities are “schemaless.” The structure of data entities is provided by and enforced by your application code. The Java JDO/JPA interfaces and the Python datastore interface include features for applying and enforcing structure within your app. Your app can also access the datastore directly to apply as much or as little structure as it needs.

The datastore provides ACID transactions using optimistic concurrency control. An update of a entity occurs in a transaction that is retried a fixed number of times if other processes are trying to update the same entity simultaneously. Your application can execute multiple datastore operations in a single transaction which either all succeed or all fail, ensuring the integrity of your data.

The datastore implements transactions across its distributed network using “entity groups.” A transaction manipulates entities within a single group. Entities of the same group are stored together for efficient execution of transactions. Your application can assign entities to groups when the entities are created.

Google Accounts

App Engine supports integrating an app with Google Accounts for user authentication. Your application can allow a user to sign in with a Google account, and access the email address and displayable name associated with the account. Using Google Accounts lets the user start using your application faster, because the user may not need to create a new account. It also saves you the effort of implementing a user account system just for your application.

If your application is running under Google Apps, it can use the same features with members of your organization and Google Apps accounts.

The Users API can also tell the application whether the current user is a registered administrator for the application. This makes it easy to implement admin-only areas of your site.

For more information about integrating with Google Accounts, see the Users API reference.

App Engine Services

App Engine provides a variety of services that enable you to perform common operations when managing your application. The following APIs are provided to access these services:

URL Fetch

Applications can access resources on the Internet, such as web services or other data, using App Engine’s URL fetch service. The URL fetch service retrieves web resources using the same high-speed Google infrastructure that retrieves web pages for many other Google products.

Mail

Applications can send email messages using App Engine’s mail service. The mail service uses Google infrastructure to send email messages.

Memcache

The Memcache service provides your application with a high performance in-memory key-value cache that is accessible by multiple instances of your application. Memcache is useful for data that does not need the persistence and transactional features of the datastore, such as temporary data or data copied from the datastore to the cache for high speed access.

Image Manipulation

The Image service lets your application manipulate images. With this API, you can resize, crop, rotate and flip images in JPEG and PNG formats.

Scheduled Tasks and Task Queues

An application can perform tasks outside of responding to web requests. Your application can perform these tasks on a schedule that you configure, such as on a daily or hourly basis. Or, the application can perform tasks added to a queue by the application itself, such as a background task created while handling a request.

Scheduled tasks are also known as “cron jobs,” handled by the Cron service. For more information on using the Cron service, see the Python or Java cron documentation.

Task queues keep track of tasks to handle in the background. The Python, Java, and Go runtime environments can use task queues. For information about the task queue service, see the Python API documentationthe Java API documentation or the the Go API documentation.

Development Workflow

The App Engine software development kits (SDKs) for Java, Python, and Go each include a web server application that emulates all of the App Engine services on your local computer. Each SDK includes all of the APIs and libraries available on App Engine. The web server also simulates the secure sandbox environment, including checks for attempts to access system resources disallowed in the App Engine runtime environment.

Each SDK also includes a tool to upload your application to App Engine. Once you have created your application’s code, static files and configuration files, you run the tool to upload the data. The tool prompts you for your Google account email address and password.

When you build a new major release of an application that is already running on App Engine, you can upload the new release as a new version. The old version will continue to serve users until you switch to the new version. You can test the new version on App Engine while the old version is still running.

The Java SDK runs on any platform with Java 5 or Java 6. The SDK is available as a Zip file. If you use the Eclipse development environment, you can use the Google Plugin for Eclipse to create, test and upload App Engine applications. The SDK also includes command-line tools for running the development server and uploading your app.

The Python SDK is implemented in pure Python, and runs on any platform with Python 2.5, including Windows, Mac OS X and Linux. The SDK is available as a Zip file, and installers are available for Windows and Mac OS X.

The Go SDK features an idiomatic, native Go API for using the App Engine services, and uses the same tools as the Python SDK (with some additional machinery for automatically compiling your Go apps). The Go SDK is stand-alone—you do not need to install Go separately—and is available as a Zip file for both Mac OS X and Linux (a Windows version will be available soon).

The Administration Console is the web-based interface for managing your applications running on App Engine. You can use it to create new applications, configure domain names, change which version of your application is live, examine access and error logs, and browse an application’s datastore.

Quotas and Limits

Not only is creating an App Engine application easy, it’s free! You can create an account and publish an application that people can use right away at no charge, and with no obligation. An application on a free account can use up to 1 GB of storage and up to 5 million page views a month. When you are ready for more, you can enable billing, set a maximum daily budget, and allocate your budget for each resource according to your needs.

You can register up to 10 applications per developer account.

Each app is allocated resources within limits, or “quotas.” A quota determines how much of a given resource an app can use during a calendar day. In the near future, you will be able to adjust some of these quotas by purchasing additional resources.

Some features impose limits unrelated to quotas to protect the stability of the system. For example, when an application is called to serve a web request, it must issue a response within 60 seconds. If the application takes too long, the process is terminated and the server returns an error code to the user. The request timeout is dynamic, and may be shortened if a request handler reaches its timeout frequently to conserve resources.

Attempts to subvert or abuse quotas, such as by operating applications on multiple accounts that work in tandem, are a violation of the Terms of Service, and could result in apps being disabled or accounts being closed.

For a list of quotas and an explanation of the quota system, including which quotas can be increased by enabling billing, see Quotas.

For More Information…

For more information about Google App Engine: