Tuesday, May 7, 2013

Google App Engine




Google App Engine (often referred to as GAE or simply App Engine, and also used by the acronym GAE) is a platform as a service (PaaS) cloud computing platform for developing
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

Currently, the supported programming languages are Python, Java (and, by extension,
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
  • Monitoring API

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.

Unlike a relational database the Datastore API is not relational in the SQL sense.
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

   "Python Runtime Environment - Google App Engine - Google Code". Code.google.com. 1999-02-22. Retrieved 2012-02-14.
   Sanderson, Dan (2009). Programming Google App Engine: Build and Run Scalable Web Apps on Google's Infrastructure. O'Reilly Media. ISBN 978-0-596-52272-8.
   "Quotas - Google App Engine - Google Code". Code.google.com. 1999-02-22. Retrieved 2012-02-14.
   "App Engine Developer Profiles - Google App Engine - Google Code". Code.google.com. 1999-02-22. Retrieved 2012-02-14.
   Sanderson, Dan (2010). Programming Google App Engine: Build and Run Scalable Web Apps on Google's Infrastructure. O'Reilly Media. ISBN 978-0-596-52272-8.
   "python web framework for Google App Engine". GAE framework. 2011-05-04. Retrieved 2012-02-14.
   "Welcome to webapp2! — webapp2 v2.5.1 documentation". Webapp-improved.appspot.com. Retrieved 2012-02-14.
   "What Is Google App Engine? - Google App Engine - Google Code". Code.google.com. 1999-02-22. Retrieved 2012-02-14.
   "webapp Overview - Google App Engine - Google Code". Code.google.com. 1999-02-22. Retrieved 2012-02-14.
   "Google Chose Jetty for App Engine". Infoq.com. 2012-07-13. Retrieved 2012-07-17.
   "Django-nonrel - NoSQL support for Django". All Buttons Pressed. 2010-02-04. Retrieved 2012-07-17.
   "djangoappengine - Django App Engine backends (DB, email, etc.)". All Buttons Pressed. Retrieved 2012-07-17.
   "Plugin - Grails AppEngine plugin". Grails. 2009-07-27. Retrieved 2012-07-17.
   "App Engine Service Level Agreement - Google App Engine - Google Code". Code.google.com. 1999-02-22. Retrieved 2012-02-14.
   "Google App Engine Blog: Happy Birthday High Replication Datastore: 1 year, 100,000 apps, 0% downtime". Googleappengine.blogspot.com. 2012-01-05. Retrieved 2012-02-14.
   "Premier Accounts - Google App Engine - Google Code". Code.google.com. 1999-02-22. Retrieved 2012-02-14.
   "Uploading and Downloading Data - Google App Engine - Google Code". Code.google.com. 1999-02-22. Retrieved 2012-02-14.
   aral. "aral/gaebar". GitHub. Retrieved 2012-02-14.
   "gawsh - Google Apps Web Service Helpers - Google Project Hosting". Code.google.com. Retrieved 2012-02-14.
   "The JRE Class White List - Google App Engine - Google Code". Code.google.com. 1999-02-22. Retrieved 2012-02-14.
   "Google App Engine Datastore Gotchas « aleatory". Aleatory.clientsideweb.net. 2009-11-28. Retrieved 2012-02-14.
   "Python Runtime Environment - Google App Engine". 2009-11-10. Retrieved 2009-11-10.
   "Modeling Entity Relationships - Google App Engine — Google Developers". Code.google.com. 2012-06-26. Retrieved 2012-07-17.
   Saturday (2008-11-22). "Google Architecture". High Scalability. Retrieved 2012-07-17.
   Gallagher, Sean (2008-04-09). "Analysis: Google App Engine alluring, will be hard to escape". Ars Technica. Retrieved 2012-07-17.
   a b "typhoonae - Typhoon App Engine - Google Project Hosting". Code.google.com. Retrieved 2012-07-17.
"Quotas - Google App Engine — Google Developers". Code.google.com. 2012-06-30. Retrieved 2012-07-17.
"Google App Engine Blog: The Year Ahead for Google App Engine!". Google App Engine blog. Retrieved 11 May 2011.

Bibliography

  Sanderson, Dan (October 26, 2012), Programming Google App Engine (2nd ed.), O'Reilly Media, p. 536, ISBN 978-1449398262
  Guermeur, Daniel; Unruh, Amy (November 24, 2010), Google App Engine Java and GWT Application Development (1st ed.), Packt Publishing, p. 480, ISBN 1-84969-044-8
  Roche, Kyle; Douglas, Jeff (December 31, 2009), Beginning Java Google App Engine (1st ed.), Apress, p. 375, ISBN 1-4302-2553-X
  Sanderson, Dan (November 23, 2009), Programming Google App Engine (1st ed.), O'Reilly Media, p. 400, ISBN 0-596-52272-X
  Severance, Charles (May 22, 2009), Using Google App Engine (1st ed.), O'Reilly Media, p. 262, ISBN 0-596-80069-X
  Ciurana, Eugene (February 2, 2009), Developing with Google App Engine (1st ed.), Apress, p. 164, ISBN 1-4302-1831-2