Google App Engine
This article may be in need of reorganization to comply with Wikipedia's layout guidelines. (January 2009) |
Google App Engine Logo | |
Developer(s) | |
---|---|
Initial release | April 7, 2008 |
Written in | Python, Java, Go |
Type | Web development |
Website | http://appengine.google.com |
Google App Engine (often referred to as GAE or simply App Engine, and also used by the acronym GAE/J) is a platform for developing and hosting web applications in Google-managed data centers. It was first released as a beta version in April 2008.
Google App Engine is cloud computing technology. It virtualizes applications across multiple servers.[1] Other "cloud"-based platforms include offerings such as Amazon Web Services and Microsoft's Azure Services Platform. App Engine differs from services like Amazon Web Services, though, in that AWS is Infrastructure as a Service while App Engine is Platform as a Service.
Google App Engine is free up to a certain level of used resources. Fees are charged for additional storage, bandwidth, or CPU cycles required by the application.[2]
Supported features/restrictions
Currently, the supported programming languages are Python, Java, and Go (and, by extension, other JVM languages such as Groovy, JRuby, Scala, Clojure, Jython and PHP via a special version of Quercus) [2]. Python web frameworks that run on Google App Engine include GAE framework, Django, CherryPy, Pylons, Flask, and web2py, as well as a custom Google-written webapp framework and several others designed specifically for the platform that emerged since the release.[3] 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.[citation needed] 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.[4][5]
Bulk downloading
SDK version 1.2.2 adds support for bulk downloads of data using Python.[6] The open source Python projects gaebar,[7] approcket,[8] and gawsh[9] 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.[10]
- Java applications cannot create new threads.
- 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".[11]
- SSL/HTTPS is only available via *.appspot.com domains and not via Google Apps Domains.[12]
- Datastore cannot use inequality filters on more than one entity property per query.[13]
- A process started on the server to answer a request can't last more than 30 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 from 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.[14] 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. Most existing Web applications can't run on App Engine without modification, because they require a relational database.
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 30 seconds or return more than 10MB of data.
Differences between SQL and GQL
Google App Engine's datastore has a SQL-like syntax called "GQL". Select statements in GQL can be performed on one table only. GQL intentionally does not support the Join statement, because it seems to be inefficient when queries span more than one machine.[15] Instead, one-to-many and many-to-many relationships can be accomplished using ReferenceProperty().[16] This shared-nothing approach allows disks to fail without the system failing.[17] 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.[18] 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 is at the point where installing and running an App Engine app is as simple as it is on Google's service.[19]
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.[20]
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-relation databases and the project includes support for App Engine.[21]
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.
The GAE Java servlet container uses the Jetty Web Server,[22] an open source project that implements the 2.5 servlet specification.
Usage quotas
Google App Engine requires a google account to get started, and an account may allow the developer to register up to 10 applications.
Google App Engine defines usage quotas for free applications. Extensions to these quotas can be requested, and application authors can pay for additional resources.[23] Below are limit and quotas defined per application:
Hard limits
Quota | Limit |
---|---|
Time per request | 30 sec |
Blobstore size (total file size per app) | 2 GB |
HTTP response size | 32 MB |
Datastore item size | 1 MB |
Application code size | 150 MB |
Free quotas
Application creators who enable billing pay only for CPU, bandwidth, storage, and e-mails used in excess of the free quotas. Limits marked with * are increased for application authors who enable billing, even if their application never uses enough resources to incur charges. Free quotas were reduced on May 25, 2009[24], reduced again on June 22, 2009.[25] but then revised in May 2011 to allow for more infrastructure and pricing changes.[26][27]
Quota | Limit |
---|---|
Emails per day | 2000 |
Bandwidth in per day | 1 GB |
Bandwidth out per day | 1 GB |
CPU time per day (to be removed) | 6.5 hours per day |
Instance-hours (IH) | 24 hours per day* |
Data stored | 1 GB |
URLFetch API calls per day | 657,084* |
Competition
The service competes with Amazon Web Services, a set of application services that enable web sites to host files and execute code on Amazon's servers. Many tech analysts have been predicting Google's entry into this field for years. "Google finally realizes it needs to be the web platform," Techdirt publisher Mike Masnick wrote. "The easier it is to develop and deploy highly scalable web applications, the more innovative and creative solutions we're going to start to see."[28]
Other competitors include Microsoft's Azure Services Platform, Salesforce.com's Force.com Platform, Sina.com's Sina App Engine (Chinese) and Heroku.
AppScale is an open-source framework for running Google App Engine applications.[29]
References
- ^ http://code.google.com/appengine/docs/python/runtime.html
- ^ http://code.google.com/appengine/docs/quotas.html
- ^ http://code.google.com/p/tipfy/wiki/AppEngineFrameworks
- ^ http://code.google.com/appengine/docs/whatisgoogleappengine.html
- ^ http://code.google.com/appengine/docs/python/tools/webapp/overview.html
- ^ http://code.google.com/appengine/docs/python/tools/uploadingdata.html#Downloading_Data_from_App_Engine
- ^ http://github.com/aral/gaebar/tree/master
- ^ http://code.google.com/p/approcket/
- ^ http://code.google.com/p/gawsh/
- ^ The JRE Class White List
- ^ Officially Support Naked Domains for GAE Apps
- ^ Issue 792
- ^ Google App Engine Datastore Gotchas
- ^ "Python Runtime Environment - Google App Engine". 2009-11-10. Retrieved 2009-11-10.
- ^ Introducing Google App Engine part 3
- ^ http://code.google.com/appengine/articles/modeling.html
- ^ http://highscalability.com/google-architecture
- ^ http://arstechnica.com/old/content/2008/04/analysis-google-app-engine-alluring-will-be-hard-to-escape.ars
- ^ A blog post that lists such efforts as it announces another one.
- ^ http://web2py.com/book/default/section/11/13
- ^ http://www.allbuttonspressed.com/projects/djangoappengine
- ^ http://www.infoq.com/news/2009/08/google-chose-jetty
- ^ "Understanding Application Quotas with Google App Engine". Retrieved 2010-04-16.
- ^ Google, Inc., Upcoming Changes to the Free Quotas, accessed February 26, 2009
- ^ Google, Inc., [1], accessed June 17, 2009
- ^ "Google App Engine Blog: The Year Ahead for Google App Engine!". Google App Engine blog. Retrieved 11 May 2011.
- ^ "Google App Engine - Pricing and Features". Google. Retrieved 11 May 2011.
- ^ "Google Finally Realizes It Needs To Be The Web Platform". 2008-04-07. Retrieved 2008-04-12.
- ^ http://appscale.cs.ucsb.edu
Bibliography
- Guermeur, Daniel; Unruh, Amy (November 24, 2010), Google App Engine Java and GWT Application Development (1st ed.), Packt Publishing, p. 480, ISBN 1849690448
- Goodwill, James; Lan, Ikai (December 1, 2009), Professional Google App Engine Programming with Java (1st ed.), Wrox, p. 450, ISBN 0470464933
- Roche, Kyle; Douglas, Jeff (December 31, 2009), Beginning Java Google App Engine (1st ed.), Apress, p. 375, ISBN 143022553X
- Sanderson, Dan (November 23, 2009), Programming Google App Engine (1st ed.), O'Reilly Media, p. 400, ISBN 059652272X
- Severance, Charles (May 22, 2009), Using Google App Engine (1st ed.), O'Reilly Media, p. 262, ISBN 059680069X
- Ciurana, Eugene (February 2, 2009), Developing with Google App Engine (1st ed.), Apress, p. 164, ISBN 1430218312
External links
- Official website
- GAE framework - stack of applications to work with Google App Engine written on Python
- Google App Engine - Run your web applications on Google's infrastructure - a technical talk by Google engineer Guido van Rossum at Stanford University. (online video archive)
- Java Frameworks and libraries supported
- Web2py book -- online documentation -- Google App Engine deployment recipe