Goodbye, Amazon EC2! See you later, Cloud!
Amazon is the world biggest retailer. beaTunes is a tiny niche product that happens to run a database server in order to let users share music metadata like BPM or key. Can this be a good match? Back in October 2009 it certainly seemed so.
The plan was to let users submit their music analysis results to a central database, so that other users wouldn't have to run the very same music analysis. Instead, they should be able to simply download other people's results. This works, because (sad but true) most of us do listen to the same music. Anybody who ever set up a service like this knows, that you have to think about a couple of things. To be more precise, unknowns. Unknowns like expected load, storage usage, backup, uptime etc. Amazon's EC2 service seemed like just the thing to answer all these questions. Why?
Because I didn't need to know.
EC2 makes it easy to scale in pretty much any direction. You need more instances? Just click a button (or even ask EC2 to do it for you). You need more storage space? Just add some more. You need a load balancer? Just turn it on. You don't want to deal with database admin stuff? Just have Amazon do it for you.
Amazon's services help you with pretty much anything you need for a huge application—especially when you don't know yet just how big it's going to be.
Everything and a little more
So I signed up, created a web server instance ("c1 medium", $0.17/h, 1.7GB RAM, 5 EC2 Compute Units, 350 GB HDD, 32-bit) and a database instance ("m1 large", $0.34/h, 7.5GB RAM, 4 EC2 Compute Units, 850GB HDD, 64-bit), and got the thing going.
Things worked reasonably well and I really couldn't complain too much. If it hadn't been for two things: support and price.
During the roughly two years of using the two EC2 instances, two hardware failures occurred. Each time I lost the instance in question. It wasn't a huge deal, because the data was safe and I could more or less simply start another instance with the same image. However, when your virtual data device (EBS - Elastic Block Storage in EC2 speak) is still connected to your broken instance, you can't connect it to your new instance. You need someone from Amazon to actually force release your device. Of course you can just call them up and they'll do it right away... well, of course not! Unless you bought the pricy support plan (frankly, I'm not even sure whether the support plan covers phone support). All others have to post to a forum and hope that someone from Amazon actually reads the message and then... (drumroll)... also does something about it.
Hope - You need it
In other words, your downtime with Amazon EC2, caused by their hardware failures, depends on hope.
Now, given the need for being religious, it's certainly very, very cheap. Right?
Well, that depends on what you need. If you need all the flexibility that EC2 has to offer (e.g. 20 instance on Monday mornings, but the rest of the week only 3), EC2 may be for you and also relatively cheap. If you realize that you really only need two servers all the time, it may be expensive.
For the two servers I mentioned above one pays about $380/month. Add roughly $220/month for backup snapshots and EBS for the (pretty large) database and your total yearly costs are $,7200.
Now compare that to two 24GB RAM, i7-920 Quad-Core, 2x1.5TB HDD (Software-RAID 1) servers for $3,530/year at a hosting company that you can actually call (EQ8 Hetzner, assuming 1€=1.45US$). Not only are these servers half price, they are much faster, have multiple times as much memory, and are hosted by someone who actually delivers timely support.
To be fair—the cancellation period is 30 days to month-end, not 30 minutes as it is the case with EC2. But then again, for my particular scenario, I really don't need 30 minutes. Now you might say, why don't you use EC2 reserved instances? If you don't know, those are Amazon's prepaid servers. Essentially you pay upfront for running instances at a reduced hourly price. In terms of absolute price, this makes EC2 more competitive. But you are still stuck with slow machines, bad support, and... now you're also locked in for one or three years. Not very desirable.
For all these reasons, I recently switched over the DNS entry for my web service to my new servers, hosted by Hetzner (this is not supposed to be advertising for them, there are others). Things are going well so far, I very much enjoy the greater performance at the lower price.