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.
-
2I've been comparing the same thing recently - posted my pros/cons on my blog. Azure is out (based on cost of a small project), but EC2 and Google App Engine are both strong contenders! blog.dantup.com/2010/10/…– Danny TuppenyCommented Oct 3, 2010 at 11:30
-
2This question should be community wiki.– rfundukCommented Nov 1, 2010 at 16:36
-
rackspace ftw !– GregCommented Jun 9, 2011 at 7:14
17 Answers
I've written the same app on GAE (Python and now Java) and Azure. I'll probably continue to use both, for different things. Here are a few thoughts that I'll keep updating:
Reasons to use GAE:
Reasons to use Azure:
So, no obvious answers. I'm defaulting to App Engine at the moment because of costs and ease of use. I might use Azure for very MS-oriented apps. I use Amazon S3 for downloads but likely won't use EC2 because I prefer leaving everything under the application level to the experts.
-
10Richard, maybe another plus for Azure is having a relational database. Bigtable's shards are a somewhat foreign paradigm. Commented Jul 15, 2009 at 5:42
-
22App 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.– mbCommented Nov 30, 2009 at 18:48
-
Azure has pay as you go with no committments, purely on usage, its not 99$ minimum per month committment. Commented Dec 16, 2009 at 7:52
-
1On 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) " Commented Dec 16, 2009 at 8:49
-
1App Engine now has SQL support to go with Block Storage. code.google.com/apis/sql– devnul3Commented Nov 3, 2011 at 20:23
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.
-
What about issues like this one: When App Engine went wrong? Commented Nov 1, 2010 at 15:31
-
@Cristian I'm not sure what you want to hear - any service has occasional downtime. That includes both App Engine and EC2. Commented Nov 1, 2010 at 16:33
-
@Nick Johnson: you're right, any service has occasional downtime and I'm not expecting an 100% uptime. On the other hand, that issue doesn't look like a downtime issue. To me it looks like a limitation of the Google App Engine, i.e. your code has to run in a pretty limited amount of time. I'm not familiar with GAE, so please correct me if I'm misunderstanding something. Commented Nov 1, 2010 at 16:53
-
1@Cristian Ah. The exception itself is thrown because of too much time spent executing, yes, but the cause of the slowdown was some temporary performance issues. Commented Nov 2, 2010 at 9:13
-
I agree on the "they are not comparable". Comparing these services are like comparing apples and oranges. Both are fruit, that's about it.– TillCommented Nov 7, 2010 at 16:25
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.
-
3GAE can run fairly standard java servlet applications, and can use standards-based persistence. Commented May 3, 2010 at 1:10
-
4GAE is completely open (though you'll need to stick with using a JDO storage API.)– MarkCommented Oct 14, 2010 at 7:20
-
1Does Google still limit the amount of data you can get out at a time? Their lockin is based on data more than code. Commented Nov 1, 2010 at 14:50
-
4You can use AppScale to run your apps on EC2, or anywhere else you want: appscale.cs.ucsb.edu– AmirCommented Nov 1, 2010 at 18:12
-
3Ran across this today, someone was able to transition off of Google in a week. They also admit that it could have taken months if they hadn't used good practices from the beginning. carlosble.com/?p=719 Commented Nov 22, 2010 at 17:31
- 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
-
8Not all .NET developers should go to Azure. Amazon EC2 is a perfectly acceptable option for them. But +1 for referencing the excellent article. Commented Apr 26, 2009 at 22:19
-
Yes, Amazon is somewhat freedom of virtual machine, but the community mostly Ruby oriented initially...– MashCommented Apr 26, 2009 at 22:51
-
1AWS 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. Commented Aug 25, 2009 at 14:24
-
2I'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: blog.dantup.com/2009/12/… blog.dantup.com/2009/12/… Commented Jan 10, 2010 at 12:08
-
4If you're on Ruby, consider Heroku or EngineYard instead of Amazon.– andy318Commented Nov 28, 2010 at 18:13
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).
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.
-
2Azure 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 AbdullinCommented Apr 27, 2009 at 7:40
-
3Microsoft 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.– MarkCommented Oct 14, 2010 at 7:03
-
You can use Clojure in GAE. the-deadline.appspot.com/login– edwin.nathanielCommented Nov 1, 2010 at 14:43
As much as I love GAE, one major reason why I'm going with EC2 over GAE for my current project is that I need to be able to have the front end of my application serviced from data centers located in different parts of the world. GAE runs in one data center at a time. For example, I need users in Asia to hit servers in Asia for the fastest response times possible for my application. Add on the ability to manage dns, load balancers, database of choice, flume pushing into S3 for hadoop processing of data, etc... and EC2 becomes a really compelling solution.
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.
-
TyphoonAE and AppScale are great tools for running GAE apps elsewhere.– Noah McIlraithCommented Dec 9, 2010 at 11:31
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.
-
1I think Amazon CloudWatch solves the problem of starting additional instances based on the traffic.– NirmalCommented May 7, 2010 at 11:02
-
1One of the most common demos I have seen for Azure is the scalability demo where they write some code to set thresholds to spin up or spin down web workers based on the load. its covered in the windows azuer trainining kit : microsoft.com/downloads/en/…– MikeJCommented Nov 1, 2010 at 16:39
Here's some other considerations.
GAE - Sits higher on the platform as a service stack then AWS and Azure, all traffic routed through their ghs.google.com DNS, dynamically loading serving your page through one of their machines, which allows them to keep prices low. scaling is fine grained with this approach, Cons is no static ip, prone to being filtered or blocked. From the no static ip limitation, you'll not be able to setup any site specific https cert.
AWS and Azure gives you pretty much a static IP and a dedicated VM, allowing for such basic requirements like a https cert. you'll also get relational storage support. Cost is also higher to reflect this dedicated VM fact, and you'll scale per VM so in 40 dollar/month chunks. advantage is that since you get a VM to yourself, you're not constrained to the 30 second cpu processing limitation on GAE, and can run larger tasks.
So if your considering customer bases in filtered countries, or want a static IP to do your own DNS setup, or have requirements that need relational db or more than 30 second tasks. AWS, Azure would be much more friendly to work with.
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.
I don't have enough reputation to leave a comment for one of the answers above. The suitability of any of those cloud solutions depends on many factors including your needs and skill set.
I have a social networking project that requires a nosql database. AppEngine would be a good solution if it had better support for the various frameworks. Django with nonrel adapter works on Python GAE, but I prefer Rails for many reasons. Rails3 has been out for a few months and no one in the community or on the GAE team has written a recipe yet to support it. Unless you have the skill set--knowing ruby and rails internals, jruby, and GAE internals--to write your own recipe, you're at the mercy of other people just to get on the platform.
AWS is a lot more work but at least you can get on the platform with whatever tools and deal with many issues administratively rather than as an internals developer or supplicant to higher powers.
My complaint about Heroku and EngineYard, for Ruby developers, is the mystery about how databases scale. How do they scale?
In my case, I'm opting for a NoSQL solution and Mongo seems to be a good choice. MongoMachine seems to be the recommended solution for the likes of Heroku or EY but it is mad expensive. $2.50/GB storage? Storage is only $0.10 GB/mo on GAE or EBS.
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.
-
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. Commented Apr 26, 2009 at 21:38
-
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. Commented Apr 26, 2009 at 21:39
-
Right, bad choose of words in both cases, thanks for pointing it out. Will edit it :)– alkarCommented Apr 26, 2009 at 22:14
-
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.– MarkCommented Oct 14, 2010 at 7:07
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.
-
4Jeff - 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.– MarkCommented Oct 14, 2010 at 7:14
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.
-
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.– MarkCommented Oct 14, 2010 at 7:16
-
1While true in name, that's not true in practice, Microsoft offers a very compelling private cloud stack with Hyper-V (which is free) and things like Systems Center & InTune, it's just not "Azure". If you want that there will soon be the option for "Azure Appliances" for 3rd parties, but you have to be pretty huge to justify those costs. I heard you need to support a minimum of around 1000 nodes, so it's more for Datacentre owners.– DoobiCommented Oct 16, 2010 at 8:23
After experimenting Amazon EC2 for a while and hitting some delays I've started researching Google Apps while experimenting due to cost. I'd prefer Erlang as the development language but can deal with Python, so that wasn't a deciding factor. When I saw no static IP, that was. Also the whole part about it being higher up on the stack makes me a bit nervous with respect to performance.
I wish AWS was cheaper, but until Google provides static IPs and preferably additional languages such as Scala, JRuby, and Erlang, the choice is clear for me: AWS. The first two languages should be simple too, they are both JVM based. May even have been done already through work-arounds, as I seem to remember reading something about that.
-
To be pedantic, you can run Scala, JRuby, and even Clojure on App Engine since it all the JVM under the hood. Now, whether or not it is easy to use these languages is another story... Commented Apr 3, 2011 at 0:46
Guys I think apart from just thinking about what platform it supports the comparison should be on Scalability, Ease of access, Versatile (in terms of implementation) , can accommodate different hosting platforms, equally economically viable for the business case, has multiple solutions for enterprise applications (viz. storage, delivery, bandwidth, licensing policy etc.), track record credibility of quality of service, Security audited, Transparency in billing as well as costings etc. If you look at all the above metrics I feel AWS scores much above. I am managing 10 production accounts on AWS since 2 yrs & at the same time the company / business unit were able to satisfy customer's huge scalability demands.... No doubt on AWS one needs to maintain the infrastructure, Updates (if any / if required), security etc. But you have all the tools available in the market / net freely. Existing IT resources can maintain all the infrastructure on AWS too.
Azure sure has an integrated IDE with VS 2010, but actual costing of any cloud will start after successfully deploying the application (platform for deployment). Still a long way to mature to address real time deployment / scalable production scenarios....... As everyone knows MS plays many hidden agenda's on costings.. very difficult to make out the costs incurred or going to incur (while sending out estimates).
GAE is very specific for Python / Java apps. Huge effort (both in terms of resource + cost) in getting the application rewritten (existing), tested , deployed etc.