Friday, 23 May 2014

Should I use Google or Amazon for my new awesome app?

That's the question I've had to ask myself recently.  The findings and conclusions below are based on plenty of experience of Amazon AWS and somewhat outdated experience of Google App Engine )with a bit of a recent refresh of knowledge for the purpose of putting together this blog post).  Feel free to correct me in comments if I've made any mistakes.

Overview: Google is a PaaS (platform as a service), Amazon is an IaaS (infrastructure as a service).  This means more flexibility when designing a solution architecture with Amazon, but at the expense of having to do additional system administration. However, BeanStalk gives you a pretty close equivalent of GAE with minimal admin overheads.

Services: Fairly similar range of offerings, though Google doesn't appear to have an equivalent to Amazon's SQS (message queuing) - this may not be relevant for your app, but there are benefits to building large scale applications, loosely coupled using message queues for passing information.

Cost: Pretty similar though Amazon has a better range of options for reducing cost as the app scales.  Amazon are regularly reducing their prices on their AWS products.

Software Development / App Restrictions: Since you're deploying in to Google's PaaS, they restrict how you can write your application (e.g. no Threading, white list for Java classes) to maximise compatibility with their platform.  This needs to be considered during development as "normal" things Java developers are used to may not be available.

Data Access: With Google, if you don't use their RDBMS, then you have to use their "datastore" which gives you an interface with which to query the data.  The same is available with Amazon's DynamoDB.  However, DynamoDB supports joins and aggregate functions where as the Google's datastore does not.  Neither appear to provide an out of the box user interface for accessing data in their RDBMS service (which is basically MySQL so not exactly difficult anyway).

Data Security and Privacy: Both companies appear susceptible to a recent ruling with regards to data in the US.  If data protection at this level is a concern then neither Google or Amazon may be appropriate.  See: http://www.thewhir.com/web-hosting-news/search-warrants-apply-worldwide-data-held-us-service-providers-judge-rules

There are UK alternatives if that's a problem you or your customers (e.g. bytemark.co.uk).

Maturity: Both are fairly mature now, but AWS has been around a longer.  The relative maturity of AWS over Google is reflected in the extensive administration console user interface.  Both provide command line tools and APIs, but Amazon's user interface is more complete (IMHO).

Support: Both offer support with varying turn around times and channels.  Amazon appears to be cheaper:

- https://cloud.google.com/support/
- https://aws.amazon.com/premiumsupport/

Amazon have regular official seminars, webinars and meetups (usually in London, but I've heard of some in Edinburgh too) to discuss their AWS features as well as an annual conference.

Google has Google I/O which is an expensive two days (since it's in San Francisco, I've been though and it is good ;-) and covers a range of stuff not necessarily specific to their cloud platform.

Conclusion: I don't see much point restricting yourself with Google unless there is a strong requirement for it (e.g. it allows for better integration with something Google specific).  The additional system administration of using Amazon AWS is outweighed by the flexibility and can be mitigated by using BeanStalk (initially) and automation (as the app grows and scales).


No comments: