Every now and again I tweet about my dislike for EC2. People always ask why. In reality I think Amazon is doing a great job, especially compared to other cloud providers, which are only falling further behind. But I do have one major and insurmountable issue.
Price / Performance
I've been hesitant to write about it because it feels like beating a dead horse, but so many people seem surprised by it, what harm can it do? Every synthetic and real-world benchmark that we've run are consistent with what virtually everyone else has observed. EC2's price-to-performance ratio is horrible. Although this is particularly noticeable with EC2, which can be anywhere from 1-5x more expensive and 2-8x slower, it's true of AWS in general (s3, cloudfront, route53 aren't the fastest options available).
To me, AWS is to performance, what Microsoft was to security (pre Bill Gate's Trustworthy Computing memo). I don't feel bad about using EC2 and AWS interchangeably: the former is at the core of the latter.
Not only is EC2 slow and expensive, it's getting worse as faster processors and hard drives come to market. The new EBS-only M3 generation didn't come close to closing the gap.
We use 3 different unmanaged dedicated providers in 4 different locations. At our most expensive location, we get 64GB ECC RAM, 4x1TB RAID 10 (hardware), Dual E5-2620 and 4 1Gbps adapters (bonded, 2x public, 2x private) for around 60% the price of an M3-2XLarge. That's more than twice the RAM, 4 more cores (+12 HT, and all of the cores are noticeably faster than the EC2 ones), much faster and predictable storage, and better networking (a private dedicated network adapter (let alone 2) is great). And that's the more expensive provider. We have some machines that are less than 1/4 the price and run circles around EC2.
Per-Hour Billing + Provisioning
The real EC2 advantage is per-hour billing and instant provisioning. If you legitimately use these features, then maybe EC2 is a good choice. I say maybe because the price/performance gap is so extreme, it's hard to compensate. Same with instant scaling. We could worry about spikes in traffic...or we could pay 1/3 the price and have 10x the headroom for growth.
If you need to start and stop instances (say you have an unsteady number of jobs), a hybrid approach is going to be more efficient. Figure out your baseline and use dedicated/collocated hardware. Use EC2 spot-instances to handle the irregular periods.
You can't talk about EC2 pricing without people mentioning reserved instances. At best, reserved instances eliminate the price-gap, but it does nothing to eliminate the performance gap. Not only that, but to get that price parity, you need to put a significant amount of money upfront. What you pay upfront for your reserved instance is roughly the total cost of a faster dedicated server. You also lose one of EC2's only advantage: per hour billing.
Thinking reserved instances? Don't. Go hybrid: dedicated + spot instances.
This isn't Amazon's fault, but there's quite a bit of misinformation out there about hosting. First, people seem to think EC2 saves you time and hassle. Compared to collocated servers, this is true. But compared to dedicated servers, managed or unmanaged, it simply isn't. Hardware fails? They'll replace it (at no cost).
I also dislike the Platform Specific Language (PSL) that you get with AWS. The deeper you dig and the more serious your operation gets, the less transferable your knowledge becomes. It doesn't help that the documentation isn't great. Will devops only know VPC the way frontend developers only know jQuery?
We should also talk about Netflix. I'm in awe of what Netflix has done. But if you spend time reading the Netflix blog (and you should), you'll see that, at-scale, succeeding on the cloud isn't easy. They have hundreds of engineers designing specifically for the cloud. I have no problem taking Netflix' word that, in the end, the benefits outweighed the cost. But it's a huge leap that simply isn't right for most of us. (Have to also point out that, when it comes to the most important part of Netflix' infrastructure, CDN, they're building their own).
AWS dominates the cloud (but not hosting) business. For good reason too. But EC2 performance in particular, (and AWS to a lesser extent in general) is horrible. It also feels like a lot of services are stuck at version 1.0, lacking that polish and continual improvement (lack of logs, limited set of apis, ...) - something competitors should be capitalizing on.
Unless you are constantly shutting down and starting up instances, EC2 is probably the wrong choice for you. Even if you are, consider a hybrid approach of dedicated/collocated + spot instances.