Utility computing or cloud computing is a current trend. Being
able to access data and applications anywhere is a great value and
not having to build your own infrastructure can help you focus on
other things that you do that you care more about (more in
my previous post on utility computing here).
Even though utility computing is talked about as a single
concept, the fact is that different companies in the market have
different views on what is important. And their offerings reflect
their differing perspectives.
I'll take a look through a few of the most popular cloud
computing offerings - from the standpoint of a developer: someone
who is going to take one of these and then build something on top
of them. I'm not looking at services that exist in the cloud - but
rather the platforms that exist that allow companies to build cloud
offerings on top of them.
Let's start with a very high-level summary of each and then look
at what implications the differences have. So, off we go...
Options: Amazon, Microsoft, and Google
Amazon is probably the "oldest" of these 3, so let's start with
them.
Amazon offers "Amazon Web
Services" (AWS) which is actually several different
offerings:
- Elastic Compute Cloud (EC2) - virtual computers
- SimpleDB - data storage
- Simple Storage Service (S3) - file storage
- Simple Queue Service - something you might need when build
software - read about it
on Wikipedia (yes, queuing in software is exactly like queuing
in real life: aka "forming a line and moving through it for
service")
S3 is probably the most widely known and used. Basecamp uses S3 to store and
serve up any files that you upload to a project and my favorite
backup utility JungleDisk
uses S3 to backup my files to.
Amazon's approach is agnostic: they give you parts and you can
use any or all to combine to make a service. For example, Basecamp
uses just S3 - everything else is on their own: servers, databases,
application, etc.. The choice is left to the company creating the
software.
Microsoft: It's ALive
Microsoft's offering is called "Live Mesh." And this is the
newest - they are just talking about it in the last few weeks and
all you can do with it is sign up for the beta - you have no
guarantee of getting in and you certainly can't write your own
programs on it yet.
Contrary to Amazon: it's a single offering. It combines storage
and computer - all developers see is an "API." Also contrary to
Amazon, there is a program to download: if you are in the beta -
you can share files between computers, and use remote
desktop...
The file sharing, etc. isn't really the platform, it's the first
program (or the first "experience" in Live Mesh speak) that is
available for the Live Mesh platform. But the plan is to offer the
Live Mesh platform to developers for creating software in the
future.
Google: Our way or the highway
Google offers the "App Engine." Like Microsoft's Live Mesh: you
can't pick which parts you want: it's a specific set of services +
computer all bundled together.
They select the hardware underneath, you get access to some
Google services (like membership, data storage, and mail).
Like Amazon: it's available today. It's still relatively new,
but it's more than just a plan for how you can build software: it's
actually available currently.
Visually
Let's look at the differences visually. I've drawn a stack of
services and hardware. At the top, you have the application that a
company is building. That touches the cloud computing service in
question which then allows particular interactions with the
hardware, operating system, and services underneath.
Let's start with Amazon Web Services (click image to view a
larger version):
Amazon just gives you nearly direct access to different
services. For example: you get and pay for virtual hardware - you
add whatever operating system you want to run on top of it. You can
interact directly with a variety of services. And again, you can
pick and choose which services to use.
Microsoft's Live Mesh looks completely different:
I've illustrated Microsoft's Live Mesh as a layer that attaches
on top of the services - the application doesn't see any services
or hardware or operating system: you just see the Live Mesh and the
API therein. The services, operating system, and hardware are all
completely hidden (or "
abstracted") by the API. This simplifies interactions at the
expense of flexibility.
Google also has a different visual signature that shows its
differing approach:
Google's App Engine is also an API: but it's a bit more like
existing programming: you are dealing with services separately - if
in a limited fashion. The skinny vertical runs through some
services that you get - you get access to a select set and, while
you can choose to not use some of them, you are paying (presumably
eventually) for the entire app engine as a whole: hardware,
software, and services.
Woop-dee-doo, what does it all mean, Basil?
Well, the approach says some interesting things about the goals
of each company.
Microsoft is clearly trying to launch a new platform. In
Ray Ozzie's memo on Live Mesh,1 he
talks about the myriad of digital devices that we own: "TVs, game
consoles, digital picture frames, DVRs, media players, cameras and
camcorders, home servers, home automation systems, our car's
entertainment and navigation systems, and more." The idea behind
Live mesh is to have a platform that works across all of these
devices.
Think of it this way: what if your home thermostat had a
"Designed for Windows" sticker on it? Would that suggest anything
to you? How about your fridge or your digital picture frame or your
closet organizer?
That would suggest to me that they were designed to work
together and, as I know from Windows Mobile-based mobile phones,
that I would get a similar experience on each Windows-based device.
Now draw that out further to cover the devices mentioned. It
suggests that there is a single unifying platform across all of
them. And a company could build software that encompassed many of
them by using the existing Windows platform.
To get Microsoft from "the company that makes Windows and
Office" to a company that is has a platform on the web (think
Google Docs) would be a major step. But the goals of the Live Mesh
platform appear more ambitious: get Microsoft to have a platform
that goes from computer through the web to any device. And, as
hardware keeps getting faster and smaller and cheaper,
increasingly, many home gadgets are looking like small computers or
accessories to computers (see
my thoughts on the Chumby).
That's the platform play of Live Mesh. But the cloud computing
aspect is just the way to get there. If Microsoft makes it easy for
companies to write software on their platform2 then
they should be able to build some momentum behind this
approach.
Google, I think, isn't taking any big swings with its App
Engine. This is the natural evolution of their existing cloud
computing offerings (the aforementioned Google Docs, also Google
Talk, GMail, etc.). They've just lowered the wall a bit to let
companies build things on their systems. I don't see this as real
alternative to Live Mesh - they have different aims.
When you look at the Live Mesh platform play, Amazon Web
Services suddenly looks a lot more similar. Amazon is a platform
play as well - just a de-centralized one. With Amazon, the platform
an open and à la carte one.
So this is obviously very different. Microsoft is bringing
hardware and scalability to the game, just as Amazon is. But
Microsoft is trying to woo would-be users with the promise of a
system that works across device boundaries. Amazon is just offering
the cheapest, most reliable core services.
Both approaches have merit. Microsoft's may be riskier: the
value of platform grows as you have more devices on it and more
people using it. There are network effects there (just like there
are with Windows and Office and there were with DOS before that).
Amazon has no network effects: you can use their services to
integrate with any other options - it doesn't matter.
Microsoft is betting, hoping to win a new platform that they can
ride through this wave of technology. Amazon wants to be the
digital electric company. It'll be interesting to watch how each
approach pans out.
Also...
I should also mention 2 other cloud / grid computing
offerings:
- Sun
Utility Computing
Their setup is similar to Amazon's EC2. Like EC2, you pay for
compute cycles. The difference is that EC2 is expecting you to run
a specific server. Sun allows you to submit "jobs" that then run as
fast as possible. It's meant for calculations as opposed to
providing services.
If you want a website where you can list information on the next
shuttle launch, pick EC2.
If you want to figure out when to launch the shuttle next - based
on the moon's position, earth's weather patterns, available
take-off and approach vectors, pick Sun's Grid.
- IBM Grid
Computing
IBM seems to be focused on how to create a grid of computers - and
doesn't offer a grid itself. If you are setting up your own grid,
this is where to look.
Links
- Ray Ozzie is Microsoft's Chief
Software Architect - a role Bill Gates used to hold - and will be
solely responsible for technical architecture and product oversight
when Gates steps down in July 2008
- They have historically been good at
doing this. One could argue that recently they haven't been as
good. Indeed, Joel Spolsky has argued just such a thing: http://www.joelonsoftware.com/articles/APIWar.html
Update March 15, 2009: just transferred this post from blogger
to my new domain: jeffreypriebe.com. The server running the blog
software is running on Amazon EC2. Virtual and in the cloud. Works
like a dream.