views:

30364

answers:

14

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.

+11  A: 
  • 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

Mash
Not all .NET developers should go to Azure. Amazon EC2 is a perfectly acceptable option for them. But +1 for referencing the excellent article.
Andrew Arnott
Yes, Amazon is somewhat freedom of virtual machine, but the community mostly Ruby oriented initially...
Mash
AWS does support .Net developers on their Windows 2003 Server AMI but I suspect a good number of .Net developers would rather be deploying to Windows Server 2008 which has yet to materialise on AWS. If you're a regular on the AWS forums you may have picked up that Amazon is some what quiet on this issue.
Richard Dorman
I'm a .NET developer by trade, but the price of using Azure for a website getting 0 hits sent my Google's way. I wrote some comparisons on my blog: http://blog.dantup.com/2009/12/microsoft-windows-azure-vs-google-app.html http://blog.dantup.com/2009/12/should-i-move-my-blog-to-google-app.html
Danny Tuppeny
I agree that AWS/EC2 is a perfectly acceptable solution for .Net devs. While I too wish that I could deploy to 2K8, their additional services and pricing are tough to beat. We use SimpleDB, S3 and SQS extensively with a mix of CentOS frontends handling our content needs and backing up to WCF services, balanced using ELB, which feed our enterprise services (behind our firewall) through SQS and SimpleDB. It's a terrific dev platform - IMO.
Hal
I'm a .NET developer who can't stomach Microsoft's prcing model. Why pay $100/month per site when simple web hosting is so much cheaper? The scaling model and pay-per-use of app engine has made it attractive enough for me to dust off my Java skills.
Mark
+125  A: 

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.

Nick Johnson
Great perspective, thanks!
Tony k
Totally agree with you
Mash
How do i favourite this response? Great information all round. Thanks.
JavaRocky
+1  A: 

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.

alkar
Nitpick: GQL isn't the database. GQL is an SQL-like query language for the Python runtime, written on top of the datastore. You don't even have to use it - there's also the Query API.
Nick Johnson
Also, You can sign in any users you want in a GAE app - it's just that GAE provides a shortcut for using Google accounts.
Nick Johnson
Right, bad choose of words in both cases, thanks for pointing it out. Will edit it :)
alkar
BigTable is Google's data storage engine, and after spending some time with it, I began wondering whether I've spent my whole career being brain-washed into thinking that SQL RDBMS's are essential to writting web apps. The BigTable storage model is simple, flexible, performant and scalable, and works surprisingly well.
Mark
+9  A: 

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.

Alexy
Azure does not have something that even remotely matches to functionality of Amazon Elastic Map Reduce (based on Open Source Hadoop). It does not even allow to set number of worker roles programmatically.
Rinat Abdullin
Microsoft are clearly trying to monetize their .NET developer base, and it's true that there is benefit to leveraging the Microsoft stack. I'm not convinced that this alone makes up for the expensive, blocky costing model. The whole point of cloud computing is zero maintenance pay-as-you-go elasticity, which Azure doesn't yet offer.
Mark
+18  A: 

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).

Alex Martelli
+1  A: 

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.

Joo Park
+165  A: 
Richard Watson
+1 for experience using both
hyperslug
Richard, maybe another plus for Azure is having a relational database. Bigtable's shards are a somewhat foreign paradigm.
hyperslug
Thanks hyperslug - changed storage point
Richard Watson
App Engine also allows you to stage multiple versions of your app. Each version gets its own URL that you can test, and when you're ready to deploy just mark that version as the default. Easy to test, deploy, and if necessary roll back to a prior version if something goes wrong.
mb
thanks mb, updated.
Richard Watson
Azure has pay as you go with no committments, purely on usage, its not 99$ minimum per month committment.
Akash Kava
On http://www.microsoft.com/windowsazure/pricing/ it says about SQL Azure:"* Web Edition: Up to 1 GB relational database = $9.99 / month * Business Edition: Up to 10 GB relational database = $99.99 / month * Data transfers = $0.10 in / $0.15 out / GB - ($0.30 in / $0.45 out / GB in Asia)"
Richard Watson
Great comparison of GAE and Azure. Thanks
gyurisc
@Richard - Thanks a ton for this answer - please do make a point of updating it over time.
Mark
With GAE you can run in debug mode too (via the Eclipse Plugin) - Great job with the comparison!!
Gus
+1  A: 

If you select EC2 and you are using .Net consider using Visual Studio addin to manage EC2 - http://www.ec2studio.com

+1  A: 

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.

Peter Knego
I think Amazon CloudWatch solves the problem of starting additional instances based on the traffic.
Nirmal
+3  A: 

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.

Spanky
+17  A: 

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.

lucvdv
GAE can run fairly standard java servlet applications, and can use standards-based persistence.
Stephen Denne
GAE is completely open (though you'll need to stick with using a JDO storage API.)
Mark
A: 

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.

Jeff
Jeff - having trained Microsoft partners on SQL Server 2008, I'm definately fond and familiar with the benefits of the Windows/SQL stack, but I'm hard pressed to agree that one is *STUCK* with Google's BigTable. There are half a dozen or so good libraries that wrap the BigTable API, exposing it as everything from a psuedo RDBMS to an indexed document silo. BigTable was engineered ground-up to scale across many servers (Google found the sweat spot was 1,500 per cluster), which is a feat that SQL simply can't do well.
Mark
+1  A: 

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.

Doobi
Yes, but then the flip-side is that Microsoft have officially said "No" to on-premises Azure hosting for businesses, which detracts from the appeal of the bus.
Mark
Doobi