In the previous artcle, The Application Concept, we discussed the scope of our project. We now need to focus on the technologies we wish to utilise to bring the concept to life. There are a myriad of available technologies, each with their own level of pro’s and con’s. In order to narrow down the search, lets define what it is we are trying to achieve. Not too long ago, when choosing your technology, you would simply select a group of languages and features you needed, for example: PHP, MySQL, Javascript, AJAX, HTML, CSS, and you would then find a web server capable of hosting those features. These days there are thousands of options, all promoting these features, and all with different back-end setups. In this project, however, I wish to develop a true SaaS setup, in which the system is able to dynamically scale with its workload. I do not envisage the end product of this project will bring an enormous number of users, however as a learning outcome, I would like the project to be infinitely scalable. This objective brings us into the realm of “Cloud” hosting, or Cloud Technology.

There are a number of providers offering scalable cloud hosting, however most of them do not offer true Cloud hosting. They offer scalable solutions, however in my eye, the term cloud hosting represents a “cloud” or network of servers able to scale at a moments notice, and “follow” application traffic around the world. If my application suddenly gets an influx of users logging in from America, I want my application to be able to respond by instantly making more servers available in America, if traffic then moves to Australia, lets make more servers available in the Asia Pacific region. To me, responding to traffic in this way is a true Cloud based SaaS setup. There are two major front-runners providing this type and level of cloud solution, unsurprisingly, one of these is provided by Google, in its App Engine service. The other major company is Amazon, with is Amazon Web Services. Let’s have a brief look at both.


Amazon Web Services

Amazon Web Services was launched in 2006 with the aim to provide scalable, affordable web services. Amazon started out providing an IaaS service, or Infrastructure as a Service. This mean you could leverage the infrastructure of Amazon, but you were left handling all of the configuration of the servers you wished to utilise. Amazon have since launched their Beanstalk service, which behaves more like a Paas, or Platform as a Service. This leaves most of the configuration to Amazon, freeing you up to work on your application.


Google App Engine

In contrast to Amazon, Google started out with their App Engine, a true Paas, later releasing Compute Engine, the IaaS equivalent. App engine handles all of the configuration necessary, and you can control all your app scalability settings directly from your App code, in the way of an app.yaml file. Google’s App Engine also gives you access to their database systems, in particular Big Table, which is the service Google itself relies on for its high speed database. Using App Engine, you have access to a service called Datastore, which is a simplified way to store your data in Big Table. This is highly scalable, and incredibly fast and efficient, although does come with some restrictions.


Amazon VS. Google

Both services offer more features than we will need for our application. Both provide a pay-per-use model which allows you to only pay for the resources you have actually used. Which way do we go then? While Amazon provides a very viable option for this application, and is in fact the majority player in this particular field, we will be working with Google’s App Engine for a few reasons.

  1. App Engine provides a free monthly quota on most of its services, as opposed to Amazon who provides a free quota for the first 12 months only at roughly the same level as Google’s persistent free quota. This will allow this project to remain financially viable for longer for readers of this series.
  2. Google’s App Engine is very flexible when it comes to scalability, and is said to be quicker to respond to changes in load than Amazon’s Web Services. Google’s App Engine and Compute Engine are capable of handling incredible loads, as detailed In This Article.
  3. Google’s App Engine has support and ample documentation for splitting projects into modules, each with their own scalability settings. For example, a login module could handle all user authentication and scale to demand, without having to scale the entire application. Likewise, time consuming tasks can be set up to scale on larger, more powerful servers, and we would only need to pay for the more expensive servers on a per user basis.
  4. There is more material available on the web for Amazon’s Web Services, and I would like to explore and share some experiences with Google’s App Engine.


Moving Forward

From this point on, we will start working with, and setting ourselves up to use Google App Engine. The next article will focus on setting up our development environment for App Engine, and we will upload a simple app to show that our setup is working correctly. If you would like to read more on App Engine, Click Here.