First up, this thought-train stems out of these two articles. I’d recommend reading them first:
- Wired interview/article with Jeff Bezos (Amazon) on the Amazon EC2, S3 and AWS services. EC2 started out as a way to use and sell some of the excess capacity that Amazon needed to handle it’s peaks and lulls. Now it’s a beast unto itself. Info on EC2 is here, and S3 is here.
- Joel on Software’s latest article is on the Microsoft Live Mesh. To say Joels’ reaction was a loud “meh!” is a bit of an understatement.
- And while you are reading, throw in a quick overview of Google’s App Engine, which is really a Google-taylored version of EC2, S3 and SimpleDB.
OK, so think about this scenario for a moment (and it’s just that – I’m not actually DOING this. Yet). I’m sitting in my basement, apartment or local starschmucks. I come up with a fantastic idea for a website, but to be realistic, it’s going to have to scale – quickly or slowly – to internet sizes, and I don’t want to be like Twitter, or even MySpace or Facebook, and have serious downtime due to too many people signing up.
So, what technology do I use to write it?
Current realistic (or popular) options are:
- Java
- .NET (MVC or otherwise)
- Ruby on Rails
- Python
- PHP
Now, because I’m starting out, I don’t have any funding, except maybe my credit card and some savings to live off, which means that going out and getting $15K of servers hosted somewhere isn’t an option – so remove self-hosting, co-location or even dedicated hosting from that equation, regardless of the language and framework used.
However, my possible languages have just gone down by one. I can’t use .NET for that. At all. Yes, I realise I can get a $6/month shared hosting plan, and upgrade that to a $150/month semi-dedicated hosting service, but really – thats going to run out when I hit 150K users a day. If I’m getting 100K new users a day, I’m dead in the water, or up for some serious cash. Or worse: BOTH.
If I use .NET, I have to host it on Windows (ignore Mono, not mature enough yet, unlikely to ever stop playing catchup), and none of the affordable, scalable solutions support it – and it’s not looking like they ever will.
With the others, I can use EC2 (Java, Rails, Python, PHP), or Google (Python at the moment, but I’d be very surprised if we don’t see PHP and Java, at least, and most likely Javascript, in the next 3-6 months). Even WordPress is getting in on the act.
I can still use SimpleDB from .NET, but 99.9% of the persistence methods for .NET center around one – and ONLY one – store: MS SQL Server, which is expensive, especially when you want to scale it really big.
So sorry, Microsoft, but FAIL.
I was thinking – hoping! – that the MS Mesh was going to solve some of this, but alas, in the words of Joel:
What’s Microsoft Live Mesh?
Hmm, let’s see.
“Imagine all your devices—PCs, and soon Macs and mobile phones—working together to give you anywhere access to the information you care about.”
Wait a minute. Something smells fishy here. Isn’t that exactly what Hailstorm was supposed to be? I smell an architecture astronaut.
And what is this Windows Live Mesh?
It’s a way to synchronize files.
Jeez, we’ve had that forever. When did the first sync web sites start coming out? 1999? There were a million versions. xdrive, mydrive, idrive, youdrive, wealldrive for ice cream. Nobody cared then and nobody cares now, because synchronizing files is just not a killer application. I’m sorry. It seems like it should be. But it’s not.
That problem has been solved. It’s called a USB key, in 90% of cases. It’d be nice to have things syncing to a phone, but it’s not something I’m clambering for.
So, I vote it a strong “meh“, too. I wonder if MS has a Google AppEngine or EC2 solution planned – especially as .NET is really well suited to it, given the CLR and all that. But at present, it has to run on Windows, so no one else is likely to do it, as it would be too expensive.
I’ve thought alot of about this same scenario but I came out with a different conclusion. For 1, Amazon solution is for binary only as far as I can tell, so images, maybe you could but JS and CSS files up there too, but certainly not any dynamic server side pages, right. So if you were using .NET you could still use Amazon S3/EC. Google did bring a little more to the game with using Python & SimpleDB, but then your down to 1 language & 1 db scheme plus I’m sure they have terms on how much bandwidth they let you suck out before giving you the punt and then your back to square 1. Mesh to me doesn’t solve this problem either so … Build the app, have a business model to make some money or have VC ready to help out. It’s going to cost serious money to have a top 500 website on the internet these days.
Tim, you can use EC2 to put up a linux image (well, customize one of theirs), or S3 to host files – so you can do both.
Google hasn’t published any data yet, but they do have monthly and daily limits on what you can use etc, tho it’s rather high…..