Google App Engine
Encyclopedia
Google App Engine is a platform as a service
Platform as a service
Platform as a service is a category of cloud computing services that provide a computing platform and a solution stack as a service...

 (PaaS) cloud computing
Cloud computing
Cloud computing is the delivery of computing as a service rather than a product, whereby shared resources, software, and information are provided to computers and other devices as a utility over a network ....

 platform for developing and hosting web application
Web application
A web application is an application that is accessed over a network such as the Internet or an intranet. The term may also mean a computer software application that is coded in a browser-supported language and reliant on a common web browser to render the application executable.Web applications are...

s in Google-managed data centers. It virtualizes applications 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 CPU cycles required by the application. It was first released as a beta version in April 2008, and came out of beta in September 2011.

Supported features/restrictions

Currently, the supported programming language
Programming language
A programming language is an artificial language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that control the behavior of a machine and/or to express algorithms precisely....

s are Python
Python (programming language)
Python is a general-purpose, high-level programming language whose design philosophy emphasizes code readability. Python claims to "[combine] remarkable power with very clear syntax", and its standard library is large and comprehensive...

, Java, and Go
Go (programming language)
Go is a compiled, garbage-collected, concurrent programming language developed by Google Inc.The initial design of Go was started in September 2007 by Robert Griesemer, Rob Pike, and Ken Thompson. Go was officially announced in November 2009. In May 2010, Rob Pike publicly stated that Go was being...

 (and, by extension, other JVM languages such as Groovy, JRuby
JRuby
JRuby is a Java implementation of the Ruby programming language, being developed by the JRuby team. It is free software released under a three-way CPL/GPL/LGPL license...

, Scala, Clojure
Clojure
Clojure |closure]]") is a recent dialect of the Lisp programming language created by Rich Hickey. It is a general-purpose language supporting interactive development that encourages a functional programming style, and simplifies multithreaded programming....

, Jython
Jython
Jython, successor of JPython, is an implementation of the Python programming language written in Java.-Overview:Jython programs can seamlessly import and use any Java class. Except for some standard modules, Jython programs use Java classes instead of Python modules...

 and PHP
PHP
PHP is a general-purpose server-side scripting language originally designed for web development to produce dynamic web pages. For this purpose, PHP code is embedded into the HTML source document and interpreted by a web server with a PHP processor module, which generates the web page document...

 via a special version of Quercus) http://code.google.com/appengine/casestudies.html#caucho. Python web frameworks that run on Google App Engine include GAE framework, Django, CherryPy
CherryPy
CherryPy is an object-oriented web application framework using the Python programming language. It is designed for rapid development of web applications by wrapping the HTTP protocol but stays at a low level and does not offer much more than what is defined in RFC .CherryPy can be a web server...

, Pylons, Flask
Flask (programming)
Flask is a lightweight web application framework written in Python and based on the Werkzeug WSGI toolkit and Jinja2 template engine. It is BSD licensed....

, web2py
Web2py
Web2py is an open source web application framework. Web2py is written in the Python language and is programmable in Python. Since web2py was originally designed as a teaching tool with emphasis on ease of use and deployment, it does not have any project-level configuration files. Web2py was...

 and webapp2, as well as a custom Google-written webapp framework and several others designed specifically for the platform that emerged since the release. 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. 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.

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
    C (programming language)
    C is a general-purpose computer programming language developed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system....

     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.
  • 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
    CNAME record
    A CNAME record or Canonical Name record is a type of resource record in the Domain Name System that specifies that the domain name is an alias of another, canonical domain name. This helps when running multiple services from a single IP address...

     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
    DNS zone
    A DNS zone is a portion of the global Domain Name System namespace for which administrative responsibility has been delegated.-Definition:...

    . Suggested workaround is to use the domain registrar HTTP redirection to a subdomain, e.g. "www.example.com".
  • SSL/HTTPS is only available via *.appspot.com domains and not via Google Apps Domains.
  • 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 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.

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. 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
BigTable
BigTable is a compressed, high performance, and proprietary database system built on Google File System , Chubby Lock Service, SSTable and a few other Google technologies; it is currently not distributed nor is it used outside of Google, although Google offers access to it as part of their Google...

 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
Join (SQL)
An SQL join clause combines records from two or more tables in a database. It creates a set that can be saved as a table or used as is. A JOIN is a means for combining fields from two tables by using values common to each. ANSI standard SQL specifies four types of JOINs: INNER, OUTER, LEFT, and RIGHT...

 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
Relational database
A relational database is a database that conforms to relational model theory. The software used in a relational database is called a relational database management system . Colloquial use of the term "relational database" may refer to the RDBMS software, or the relational database itself...

 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 is at the point where installing and running an App Engine app is as simple as it is on Google's service.
AppScale  is one of the open source efforts.

Web2py
Web2py
Web2py is an open source web application framework. Web2py is written in the Python language and is programmable in Python. Since web2py was originally designed as a teaching tool with emphasis on ease of use and deployment, it does not have any project-level configuration files. Web2py was...

 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.

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.

Applications developed for the Grails web application framework
Grails (Framework)
Grails is an open source web application framework which uses the Groovy programming language . It is intended to be a high-productivity framework by following the "coding by convention" paradigm, providing a stand-alone development environment and hiding much of the configuration detail from the...

 may be modified and deployed to Google App Engine with very little effort using the App Engine Plugin.

The GAE Java servlet
Java Servlet
A servlet is a Java programming language class used to extend the capabilities of servers that host applications accessed via a request-response programming model. Although servlets can respond to any type of request, they are commonly used to extend the applications hosted by Web servers...

 container uses the Jetty Web Server
Jetty (web server)
Jetty is a pure Java-based HTTP client/server, WebSocket client/server and servlet container developed as a free and open source project as part of the Eclipse Foundation...

, an open source project that implements the 2.5 servlet specification.

AppScale
AppScale
AppScale is an open-source framework for running Google App Engine applications. It is an implementation of a cloud computing platform , supporting Xen, KVM, Amazon EC2 and Eucalyptus. It has been developed and is maintained by the RACELab at UC Santa Barbara.AppScale allows users to upload...

 can run Python, Java, and Go GAE applications on EC2 and other cloud vendors.

Spring Roo
Spring Roo
Spring Roo is an open source software tool that uses convention-over-configuration principles to provide rapid application development of Java-based enterprise software. The resulting applications use common Java technologies such as Spring Framework, Java Persistence API, Java Server Pages, Apache...

 also offers a cross-platform ability to develop.

Backends

In Google I/O
Google I/O
Google I/O is an annual two-day developer-focused conference held by Google in San Francisco, California. Google I/O features highly technical, in-depth sessions focused on building web, mobile, and enterprise applications with Google and open web technologies such as Android, Chrome, Chrome OS,...

 2011, Google announced App Engine Backends, which are allowed to run continuously, and consume more memory. Unlike normal App Engine instances, backends are billed for uptime rather than CPU usage.

Google Cloud SQL

In Oct 2011, Google previews 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. Database engine is MySql Version 5.1.59 and database size must be no larger than 10GB.

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. This limit can be increased by Google staff.

Google App Engine defines usage quotas for free applications. Extensions to these quotas can be requested, and application authors can pay for additional resources. Below are limit and quotas defined per application:

Hard limits

Quota Limit
Time per request 30 sec per normal request, 10 minutes for tasks, unlimited for backends
Blobstore size (total file size per app) 2 GB
HTTP response size 32 MB
Datastore item size 1 MB
Application code size 150 MB
Memory cap 128MB, up to 1GB per instance for backends

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, reduced again on June 22, 2009. but then revised in May 2011 to allow for more infrastructure and pricing changes.
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) 28 hours per day*
Data stored 1 GB
URLFetch API calls per day 657,084*

Competition

The service competes with Amazon Web Services
Amazon Web Services
Amazon Web Services is a collection of remote computing services that together make up a cloud computing platform, offered over the Internet by Amazon.com...

, a set of application services that enable web sites to host files and execute code on Amazon's servers.

Other competitors include Microsoft's Azure Services Platform
Azure Services Platform
The Windows Azure Platform is a Microsoft cloud platform used to build, host and scale web applications through Microsoft data centers. Windows Azure Platform is thus classified as platform as a service and forms part of Microsoft's cloud computing strategy, along with their software as a service...

, Salesforce.com's Force.com
Force.com
Force.com is a cloud computing platform as a service system from Salesforce.com, that developers use to build multi tenant applications hosted on their servers as a service. The company pushes the "development as a service" phrase, but it has not gained acceptance outside the context of their...

 Platform, Sina.com's Sina App Engine (Chinese) and Heroku
Heroku
Heroku is a cloud Platform as a Service run by the San Francisco, California-based company with the same name. Heroku led the way for a multi-language PaaS, introducing the 'polyglot platform'. Heroku initially supported the Ruby programming language, with Rack and Ruby on Rails. Heroku PaaS now...

.

AppScale
AppScale
AppScale is an open-source framework for running Google App Engine applications. It is an implementation of a cloud computing platform , supporting Xen, KVM, Amazon EC2 and Eucalyptus. It has been developed and is maintained by the RACELab at UC Santa Barbara.AppScale allows users to upload...

 is an open-source framework for running Google App Engine applications.

External links

The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK