The war of the Clouds has already begun. As more and more Enterprise, personal apps choose to go online, Cloud is getting richer, more powerful and impact? Every other day we see a new cloud service coming up.
There are 100s of Cloud services that let you host your apps on their Servers with a highly scalable architecture, and High availability (Practically five 9s of uptime), all that at a fraction of cost of ownership.
Without getting into detail of stuff you, probably, already know, let’s give a look at comparing the cloud Computing services from industy’s leaders. Let’s compare : Google`s App Engine vs. Microsoft`s Windows Azure, back to back, feature by feature:
At this year’s PDC, when Microsoft talked about Windows Azure, the announcement came with a surprise that blew everyone away: Support for .NET (C# and Visual Basic), C++, PHP, Ruby, Python, Java.
On the other hand, Google App Engine does only Java and Python, atleast at this time.
Programming languages is not the only restriction in GAE. Another restriction is that you get only Servlets, JSPs, you can’t host EJB based Apps. Now that’s not good!
Azure offers two different kinds of application models: Web Roles and Worker Roles. Web roles are your typical request/response HTTP paradigm similar to GAE’s Web based Request model. More interesting is the Worker role that adds processing and logic that does not need to be triggered via a web request, rather, run Natively on the system as Service/process. This gives you the ability to run background tasks and opens up a whole raft of application possibilities. On the contrary, limited stuff can be achieved in AppEngine using Cron Jobs or via Java/Python based application schedulers.
In GAE, it would go like this: The Cron job needs to ping a URL which executes a task, but that task is limited by the request timeout. Basically you have 30 seconds to finish processing while Azure can run for hours on a single task. May be, this is not the best example as it’s asynchronous but I know you got the point.
Development/Ease of Migration
Both of them provide a secure access, abstract from the underlying OS, hence both prohibit system level access like Files, Sockets, etc. This introduces an additional step for the the developers to make sure they run independently. Like Microsoft quoted “give us your application in USB drive that can run with .bat file”
Both cloud services offer a number of plugins for IDEs to make application development and deployment easy. Microsoft wants developers to automate the deployment from a bat file or any Windows native runnable, on the contrary, Google gives you Deployment descriptors for directly deploying into the Webserver. Because of this, people would argue that GAE is simpler when it comes to application deployment.
What’s more important is to emulate the GAE and Azure system offline. Developing an application anywhere, anytime for the cloud is a key enabler. Though, both of them claim to be competitive, but in my experience I found AppEngine Emulator works 99% cases, Azure misbehaves, sometimes.
Winner: AppEngine slightly better than Azure
Integration with Other Apps
Google will let you use all your Google Apps (Accounts, Docs, Gmail, IM etc) Pre-integrated with the service at almost no hassle. With this comes integrated email, XMPP IM at zero cost. Azure looks pretty cool, on this too. Microsoft claims that it will integrate well with SharePoint, SQL server, outlook and all other apps that Microsoft has to offer. Of course, you will have to purchase them.
Another important point of consideration is “How customizable the solution is”. What we actually mean is: apart from the default webserver/database can we choose any other? Yes in Azure, No in AppsEngine. Azure will let you run a different database and webserver of choice but Google restrains you to their proprietary solution. I know Google’s solution is awesome but what if my application is written in such a way that it needs AppServer like Weblogic and an Oracle database?
We are not comparing the hardware both clouds have to offer, ofcourse both of them are good. Rather we are comparing the services that come built-in for High performance, distributed applications. AppEngine offers distributed caching using Memcache. I heard Azure plans to include Velocity. Otherwise, if you only have one web instance you can use ASP.NET caching. If you have multiple web instances, then you need a way to invalidate the other server’s cache. Inter-role communication is coming soon which would make this possible.
Winner: Hard to compare
Azure claims High scalability, but is yet unproven in this area and would remain so until we see their service Officially launched, next year. On the Google’s front, web is the proof that GAE would not hold up against traffic of a serious or sustained nature. Concerns with CPU and storage limitations, caching, database immutability plus one way in and out ( via the Google API ).
In GAE the app automatically scales. In Azure you need to change the config to add new web or worker role instances. For few this is more painful as it requires more monitoring and it’s also harder to write worker roles that balance effectively especially since in code you can’t tell how many are running.
Of course we will have to wait and see how Azure stacks up in this regard practically, so it’s pretty impossible to compare both technologies at this time.
Azure offers a few different storage options including Table Storage that leverages the ADO.NET Data Services Framework to get the job done. GAE encourages Persistence and “soft schema” based large tables which are able to achieve High performance using auto-partitioning approach. On the bad side, GAE blobs are stored in the regular data store and are limited to 1MB. Azure supports 50GB blobs. Which is something serious.
Winner: -Tie- (Both have advantages, flaws)
Cost of Ownership
Though official packages and plans aren’t out for Azure, but there’s one thing we know of for sure: It’s definitely not free. Google gives you a fairly capacitive Engine for free and of course to scale higher, you need to pay an affordable amount.
Google offers a decent resource utilization (CPU and bandwidth) that can serve 5 million pageviews for an average application. For free account, AppEngine restricts total storage to be less than 500mb. But I believe 5 million transactions capacity would be enough for small enterprise or a self-hosted developer webapp.
From what we have learned from the past, there’s no doubt Google’s pricing are much more competitive than Microsoft can ever think of. Credit goes to Open Source.
Google’s offering is fairly proven and competitive when it comes down to prices, scalability and performance. But when it comes to application/language support, Azure takes a big lead. At this point of time, Google is not targeting to serve just-any-other business but rather a “niche of Enterprises, developers” that rely on Python, Java web applications based on simple servlets, JSPs with decent persistence mechanisms.
Microsoft has really done a great job at expanding the horizon to a wider scope. I definitely applaud them for this achievement but it all nails down to one concern: Would you host your IT Business at the mercy of Windows Servers? You have to decide!
Note: This Blog will be updated as they change. So, make sure you subscribe to us below.