From a developer point of view which platform would you consider for a large social web application? If you could provide some details on what you consider to be the strengths of which alternative it would be great.
- If you're .NET Developer - go to Azure.
- If you're on Python or Java - go to Google.
- If you're on Ruby - go to Amazon
My personal choice right now would be Google with Java (even if I'm .NET most of the time). Think about costs - their schema is difficult to compare.
Check out this article - http://www.infoq.com/news/2008/11/Comparing-EC2-App-Engine-Azure
I'm clearly biased - I work on the App Engine team doing developer relations - but this is my take:
They're not directly comparable. There's a set of apps you could write for any of them, but you'll be writing a different thing in each case. App Engine provides a restricted runtime environment - no writing to files, no sockets, and so forth - and a non-relational DBMS. But in return, you get a runtime environment that scales indefinitely, and a reasonable degree of assurance that your app will scale as big as you want it to.
Azure, on the other hand, provides a slightly less constrained environment, which lets you write a wider array of apps, but requires you to write more - since you're implementing more of the stack yourself - and provides a much looser assurance of scalability.
Finally, AWS provides the ultimate do-it-yourself solution. They provide the hardware, and the storage, and not much else. You build your stack from the ground up, maintain it, upgrade it, and so forth. Your app scales if and only if you write it to scale, which is no small challenge. But, you get complete control over your hardware.
My advice would be: If your app fits the App Engine model - and a social network app is likely to be a pretty good example of ones that does - write your app on App Engine (Java or Python, your choice). It's cheaper, and it's much easier to write an app that scales.
If your app doesn't fit the GAE model, pick Azure or AWS, depending on if you're writing for the MS stack, and on how much control you want over the execution environment. If most of your app fits on GAE, but small parts don't, you might consider a hybrid - for example, live serving on GAE, but storage on S3, or bulk processing on EC2.
I've started experimenting with Google App Engine fairly recently, and for a web social network I believe it would serve all your needs. It's easy to get the hang of it and can be used either with Python or Java. It is true it doesn't give you access over files, but for your application, GQL (the SQL-like interface to the database they provide) will probably be more than enough (and it's quite robust).
One thing you might want to consider, is that an application on GAE can use an interface that will let users with Google Accounts, or accounts on a domain using Google Apps log in (a shortcut). You choose either of these. So if you already use a Google Apps Website, Google App Engine would be a great choice for you, as your users wouldn't have to register new accounts.
EDIT: As Arachnid pointed out, it's not that you can't code your own login system. Sorry, if I got you worried there.
As for the other two alternatives, I have only read about them and not tested them. But I believe GAE provides an easier framework, from my research, and as you mentioned great prices.
In any case, you can try GAE out using the free quota on space and bandwidth and see if it fits your needs.
Best of luck.
I've just started working with Azure, and am already impressed you can do it in F#: http://code.msdn.microsoft.com/fsharpazure! So far, it's the only cloud platform allowing one to use functional programming in a managed way (of course you can do Haskell in EC2... or Algol 68 for that matter). I'm very impressed with the quality of Visual Studio integration -- you get a local "cloud" to test, DevFabric, with a storage which is a real SQL Server, so you can play before uploading. Can GAE do that? Looking at Azure, learning VS with F# (coming from Linux and OCaml), I wish I'd have switched to MS stack long ago for it. It's super easy to create SQL storage and inspect it in VS -- comes very handy. Open Source does not have a matching toolset and it's time folks give MS a fair consideration -- they've done an awesome job here. I'm surely sticking with my Mac OSX base (dual-booting into Vista), and my hunch is, with the ability of Azure to be developed locally, I'll be getting a separate Vista box for Azure development. .NET is truly overwhelming when you come from Unix pipe world -- PowerShell, SQL and LINQ, C# and F# (which is my key reason) -- but it turns out it all adds up and is worth learning in addition to, not instead of, Linux; and in all cases, Azure will widen your horizons.
Like Arachnid, I may be biased, being a googler. However, I'm also an Amazon stockholder, so that bias may partly offset the first;-). No Azure experience (though I also hold MSFT stock, so I hope they, too, do well -- yet another bias;-).
My very simple take on it is that App Engine easily offers you the ability to work (within its limitations) just by coding -- no system administration tasks are needed. AWS is much more flexible, but you will need substantial system administration work (and not really trivial at all) to take advantage of that flexibility. So in the end I'd second Arachnid's suggestion: if App Engine can meet your needs, absolutely go for it; if you need more flexibility, AWS seems the way to go (unless Azure's unknown-to-me capabilities should be a better match -- but I think AWS is going to be more flexible no matter what Azure can do, for example with AWS you can even pick which OS to use, if you need that).
Look at the solutions each cloud offering provides and go the hybrid model. Some problems require a hammer and others a screwdriver. Get to know your tools and apply it to the right problem.
If you select EC2 and you are using .Net consider using Visual Studio addin to manage EC2 - http://www.ec2studio.com
If you need to start instances manually to meet the demand then it's not a cloud.
Azure and EC2 are just virtual servers with some services on the side.
Update:
EC2 and Azure do give you options to manage starting new instances automatically under load, but you still have to manage this. And you pay for instances that are up and idle.
GAE handles this automatically out-of-the-box and it only charges you for the time when your code is running during requests.
Some things to consider:
Getting up to speed: how quickly can you get productive with the chosen environment what kind of docs exist and are they clear and well supported samples apparent and useful
Cost: cost is a factor, but if you are making a commercial App that will actually have customers, these are all viable choices. If you assume that Azure, with one proc on a "small" instance runs for about $90 a month for 24x7 use... how many users can you service in that time? Add a second instance for redundancy... still not that costly if your traffic warrants it. If it doesn't, why are you in the cloud instead of at a cheap hosted provider? Larger cost factors come in your time to implement this. AWS is a roll your own solution. That's a lot to handle to get a solution that will be stable and well managed. Azure and GAE have that out of the box. In my mind AWS is the most expensive due to the work you have to put into it. Do you really need control over it at that fine a level of granularity? If so, blow the wad and buy your own boxes maybe...well AWS will still be cheaper than the hardware costs.
Ability to do what you want: AWS all the way. Azure is second, GAE is third. No biggie if what you want is Java and Python. Biggie if you want to do relational DB or extensive multi-threaded data processing in C++ (not sure if any of these do this now?).
What about portability? Can you take it back to your own farm later or move it to another cloud farm? They are all portable to some extent.
Lots to think about... still learning about this myself.
For me, lock-in is the deciding factor.
If you choose for Google, your application will work only on Google. If you find yourself being less than satisfied after some time, you're stuck.
If you choose for MS, your application will work only on Azure. Same thing.
At Amazon, you get (a) virtual server(s) that work exactly like the machines you're used to. Not satisfied? Pick up your app, install on real hardware, done.
Azure has Windows/SQL as a server "Platform as a Service", and you are definately NOT stuck, just go back to Windows/SQL in your own datacenter (No linux, but yes they support Java, Python, PHP, Ruby, Tomcat, Apache, etc.). Like Amazon, they will be providing the fully accessible Virtual Machine option as well, so you can install/run whatever you want.
Amazon has is Virtual Machine only, so you still have to intall, patch, license, secure, etc... Kind of defeats the benefits of moving to the cloud in my opinion. You've just moved something from your datacenter to another.
Google has no relational database and you'd be STUCK. They really only cater to Python developers and some limited support for Java. They really are not a player in the cloud space from my opinion.
One thing not mentioned here, is what anyone considers of the "Windows Azure AppFabric Service Bus & ACS" besides the horrendous name...?
It appears to be a really powerful stack of integration features that would make Azure appealing from the perspective of any business with an investment in on premises infrastructure.