and hosting web applications in Google-managed data
centers. Applications are sandboxed
and run across multiple servers. App Engine offers automatic scaling for web
applications—as the number of requests increases for an application, App Engine
automatically allocates more resources for the web application to handle the
additional demand.
Google
App Engine is free up to a certain level of consumed resources. Fees are
charged for additional storage, bandwidth, or instance hours required by the
application. It was first released as a preview version in April 2008, and came
out of preview in September 2011.
Supported
features/restrictions
Runtimes
and frameworks
other
JVM languages
such as
Groovy,
JRuby,
Scala,
Clojure,
Jython and
PHP via a special version
of
Quercus),
and
Go.
Google has said that it plans to support more languages in the future, and that
the Google App Engine has been written to be language independent.
Python
web frameworks that run on Google App Engine include GAE framework, Django,
CherryPy, Pyramid, Flask, web2py and webapp2,
as well as a custom Google-written webapp framework and several others designed
specifically for the platform that emerged since the release. Any Python
framework that supports the WSGI
using the CGI adapter can be used to create an application; the framework can
be uploaded with the developed application. Third-party libraries written in pure
Python may also be uploaded.
Google
App Engine supports many Java standards and frameworks. Core to this is the
servlet 2.5 technology using the
open-source
Jetty Web Server,
along with accompanying technologies such as
JSP.
JavaServer Faces operates with some
workarounds. Though the datastore used may be unfamiliar to programmers, it is
easily accessed and supported with
JPA.
JDO and other methods of reading and
writing data are also provided. The
Spring Framework works with GAE, however
the Spring Security module (if used) requires workarounds.
Apache Struts 1 is supported, and
Struts 2 runs with workarounds.
The Django web
framework and applications running on it can be used on App Engine
with modification. Django-nonrel aims to allow Django to work with
non-relational databases and the project includes support for App Engine.
Applications
developed for the Grails web
application framework may be modified and deployed to Google App
Engine with very little effort using the App Engine Plugin.
Reliability
and Support
All
billed High-Replication Datastore App Engine applications have a 99.95% uptime SLA.
App
Engine is designed in such a way that it can sustain multiple datacenter
outages without any downtime. This resilience to downtime is shown by the
statistic that the High Replication Datastore saw 0% downtime over a period of
a year.
Paid
support from Google engineers is offered as part of Premier Accounts. Free
support is offered in the App Engine Groups and Stack Overflow, however assistance by a
Google staff member is not guaranteed.
API
List
Trusted
Tester
Experimental
- Cloud Endpoints
- Google Cloud
Storage API (Python)
- Files API (Python, Java,
Go)
- Full Text Search API
- Mapreduce API (Python)
- Prospective Search API
(Python, Java)
- ProtoRPC
API (Python)
- Task Queue REST API
(Python, Java)
- OAuth API (Python, Java, Go)
- OpenID (Python, Java, Go)
- App Identity API (Python,
Java)
Production
- Blobstore API (Python,
Java, Go)
- Capabilities API (Python,
Java, Go)
- Channel API (Python, Java,
Go)
- Datastore API (Python,
Java, Go)
- Datastore Async API
(Python, Java)
- Images API (Python, Java,
Go)
- Log Service API (Python,
Go)
- Mail API (Python, Java,
Go)
- Memcache API (Python,
Java, Go)
- Multitenancy API (Python,
Java)
- Remote API (Java)
- SSL access on custom
domains
- Task Queue API (Python,
Java, Go)
- URLFetch API (Python,
Java, Go)
- Users API (Python, Java,
Go)
- XMPP API (Python, Java, Go)
Bulk downloading
SDK
version 1.2.2 adds support for bulk downloads of data using Python. The open source
Python projects gaebar, approcket, and gawsh also allow users to download and
backup App Engine data. No method for bulk downloading data from GAE using Java
currently exists.
Restrictions
- Developers have read-only
access to the filesystem on App Engine. Applications can use only virtual
filesystems, like gae-filestore.
- App Engine can only
execute code called from an HTTP request (scheduled background tasks allow
for self calling HTTP requests).
- Users may upload arbitrary
Python modules, but only if they are pure-Python; C
and Pyrex
modules are not supported.
- Java applications may only
use a subset (The JRE Class White List) of the classes from the JRE
standard edition.
- Does not support 'naked'
domains (without www) like http://example.com. The required alias
to ghs.google.com is implemented with a DNS CNAME record in order for changes in
Google server IP addresses not to impact the service. This record cannot
be used with other DNS records (RFC
1034 section 3.6.2, RFC 1912 section 2.4), including the
required Start of
Authority for the example.com DNS zone. Suggested workaround is to
use the domain registrar HTTP redirection to a subdomain, e.g.
"www.example.com".
- Datastore cannot use
inequality filters on more than one entity property per query.
- A process started on the
server to answer a request can't last more than 60 seconds (with the 1.4.0
release, this restriction does not apply to background jobs anymore).
- Does not support sticky
sessions (a.k.a. session affinity), only replicated sessions are supported
including limitation of the amount of data being serialized and time for
session serialization.
Major
differences
Differences
with other application hosting
Compared
to other scalable hosting services such as Amazon EC2, App Engine provides
more
infrastructure to make it easy to write scalable applications, but can
only
run a limited range of applications designed for that infrastructure.
App
Engine's infrastructure removes many of the system administration and
development challenges of building applications to scale to hundreds of
requests per second and beyond. Google handles deploying code to a cluster,
monitoring, failover, and launching application instances as necessary.
While
other services let users install and configure nearly any *NIX compatible
software, App Engine requires developers to use only its supported languages,
APIs, and frameworks. Current APIs allow storing and retrieving data
from a BigTable non-relational database; making
HTTP requests; sending e-mail; manipulating images; and caching.
Existing web
applications that require a relational database will not run on App Engine
without modification.
Per-day
and per-minute quotas restrict bandwidth and CPU use, number of requests
served, number of concurrent requests, and calls to the various APIs, and
individual requests are terminated if they take more than 60 seconds or return
more than 32MB of data.
Differences
between SQL and GQL
Google App Engine's datastore has a
SQL-like syntax called "GQL". GQL intentionally does not support the Join statement, because it seems to be
inefficient when queries span more than one machine. Instead, one-to-many and
many-to-many relationships can be accomplished using ReferenceProperty(). This
shared-nothing approach allows disks to fail without the system failing.
Switching from a relational database to the Datastore requires a paradigm shift
for developers when modelling their data.
The
Java version supports asynchronous non-blocking queries using the Twig Object
Datastore interface. This offers an alternative to using threads for parallel
data processing.
Portability
concerns
Developers
worry that the applications will not be portable from App Engine and fear being
locked into the technology. In response, there are a number of projects to
create open-source back-ends for the various proprietary/closed APIs of app
engine, especially the datastore. Although these projects are at various levels
of maturity, none of them are at the point where installing and running an App
Engine app is as simple as it is on
Google's service. AppScale and TyphoonAE are two of the open
source efforts.
AppScale can run Python, Java, and Go GAE
applications on EC2 and other cloud vendors.
TyphoonAE
can run python App Engine applications on any cloud that support linux
machines.
Web2py web framework offers migration between SQL
Databases and Google App Engine, however it doesn't support several App
Engine-specific features such as transactions and namespaces.
Backends
In Google I/O 2011, Google announced App
Engine Backends, which are allowed to run continuously, and consume more
memory.
Google
Cloud SQL
In
Oct 2011, Google previewed a zero maintenance SQL database, which supports JDBC
and DB-API. This service allows you to create, configure, and use relational
databases with App Engine applications. The database engine is MySql Version
5.1.59 and the database size must be no larger than 10GB.
References
Bibliography