Google App Engine vs. Amazon Web Services: The Developer Challenges
Sure, cloud computing platforms free developers from scalability and deployment issues, allowing them to spend more time actually writing web applications and services. But when choosing between two prominent platforms, Google App Engine and Amazon Web Services (AWS), which platform is best for you?
The choice can be simple if you fall into one of the following two scenarios:
- If your application can be architected to run within the limited Google App Engine runtime environment, then take advantage of Google's lower hosting costs.
- If you need a more flexible cloud deployment platform, then AWS is a good fit for your needs.
Of course, you need to consider more issues than these when making a choice. In my development work, I've had the opportunity to use both and I can tell you that they require very different architecture decisions and present different sets of challenges. In this article, I will discuss some of the main challenges in more detail.
Google App Engine Challenges
Because Google App Engine is designed to scale your web applications -- adding server instances as needed -- some HTTP requests may require loading a server instance before the request can be satisfied. Google refers to these as "loading requests." The time required for loading requests varies, based on lots of comments on Google App Engine discussion groups and message boards. The smallest loading request times are reported for Python + DJango web applications (usually much less than a second). Java loading times are much longer, but they are still often less than a second. Google is implementing pre-loading options for Java that will improve the load time performance in the future.
Loading time for new virtual instances is a problem for other JVM languages, often requiring many seconds for JRuby and Clojure. Loading times for Scala are close to that for plain Java because compiled Scala class files are essentially indistinguishable from compile Java code. The difference is caused by code generated to support dynamic languages like JRuby and Clojure on the JVM. For applications running on dedicated servers, this extra load time is not a problem but it does affect applications hosted on Google App Engine. While I have experimented with JRuby and Clojure web applications on Google App Engine, at this time I would choose Python, Java, or Scala for production use.
The bottom line is using Google App Engine will be more restrictive than the development and deployment environments that you are used to. The datastore is more difficult to use than a relational database (which for example has global transactions, joins on tables, and a subset of the types of queries that you can do with a relational database). Not being able to start and manage long-running processes also makes some kinds of applications difficult to write.