Getting your head into Cloud Computing
January 25, 2010
As engineers we may think our world has nothing in common with unnaturally thin models wearing odd shaped outfits preening down a runway in Paris, but as strange as it may seem technology is a susceptible to fads as any other area of human endeavor. Cloud computing is currently all the rage in our world, as anyone glancing at blogs, book and newsletters can tell you. But does cloud computing deserve the attention from the paparazzi of the hi-tech press? Or is it just a face lift covering up a paradigm who's time has passed? Let's take a look.
First, let's try to define cloud computing. As Supreme Court justice Potter Stewart famously said about a much more prurient subject "we know it when we see it". It involves moving storage and computation from a local desktop PC over the network to a server. But that's not quite enough of a distinction; the Internet has been going strong for years doing just that. I think more precisely we can view cloud computing as providing storage, computing and networking as a service that can consumed at a variable rate. It is the "utility" nature of the resources provided by cloud computing that distinguishes it from the plain vanilla client server model.
It's no shock that Google and Microsoft have two of the leading cloud computing offering but those not up on the subject may be very surprised to learn that Amazon has been the vendor at it the longest. Starting with storage (S3) and then adding computing (EC2) and even harnessing human power (Mechanical Turk) Amazon has a comprehensive, mature product line - the full product is known as Amazon Web Services (AWS). Yes, Amazon does a lot more than sell books. EC2, elastic computing cloud, allows both Linux and Windows based "instances" to be launched on demand. These are straightforward virtual machines that you can use like any other Linux or Windows machine. This is both the strength and weakness of AWS. While Amazon does have unique services like a database offering (SimpleDB) and message queuing service (Simple Queuing Service) if you don't use those services you won't be locked in to Amazon. You can stick with standard LAMP services and move your application to another provider if needed.
Conversely using Google's cloud computing product, Google Application Engine or GAE, will lock you into Google. You can program your application in Python or Java. (Some existing frameworks have been ported to GAE which ameliorates the lock in issue.) GAE gives you access to one of the Google's crown jewels, BigTable, to use as the storage layer. BigTable let's you store lots of data but since there's no such thing as free lunch, there are few tradeoffs. BigTable is not a SQL database, you can forget those hard learned lessons about data normalization, BigTable doesn't have concepts like joins. GAE is good choice when you expect your dataset to get very large - why not take advantage of all the work Google has done?
Microsoft's cloud offering is Azure. You can look at Azure as cloud computing the .Net way. While you can make use of Cloud services via web standards such HTTP, Rest and XML the primary focus is .Net. One unique aspect of Azure is that it does, as part of its database layer, provide a full, relational database. This could be a make or break feature for many applications.
I've implemented a site, Hear Ye, based on Google App Engine. Hear Ye aspires to compete with sites like Craigslist so the ability to handle a large amount of data was a core requirement. The site groups classified ads under keywords. Since BigTable doesn't provide any relational features I generated each permutation of the keywords and stored each with an entry pointing to the ad. BigTable lets you trade space for missing features.
With three of the largest names in computing already competing and many others joining the party I think it's safe to say cloud computing is more than just another pretty face. Application developers can build on these offerings today and look forward to more innovations in the future.