I’ve decided that Amazon Web Services is the only (currently) sane way do develop a web site today, especially if one expects/hopes that the site might generate high traffic.
If you haven’t heard about it, check it out at aws.amazon.com. Essentially, Amazon.com is leveraging their $2 Billion investment in infrastructure by making it available to the world. It’s called cloud computing. For very reasonable rates (it isn’t free, but darn near), you can get data storage, a database, and servers. The data storage and database scale automatically, and you can add servers on demand.
So what does this mean? It really evens the playing field. Using AWS (and apparently Google and Microsoft are working on similar platforms), you can build a web application that can easily expand to handle as much traffic as you like, all without you having to invest tens or hundreds of thousands of dollars on a data center. No hardware to buy, no maintenance staff for it, no physical location required — all that stuff required to build a web application that requires a huge upfront investment. It will take a very long time before it would have been cheaper to do it yourself – if ever – than to pay Amazon.
And you don’t have to use all the Amazon features at once – you could use the database and storage and run the app on your own servers, for example. For the applications I build, storage, data base, and servers are the main components. AWS also has some other services such as message queuing.
But what about using an ISP or other web-hosting service? Well, for smallish apps, that is probably OK. But as soon as you start getting thousands or more hits per hour, that solution will start to have problems. This is where the three-part solution might help. If you think there ever is a possibility of getting lots of traffic (or moderate traffic that views lots of data like videos or music), then you could start with your own server or a hosting company, but use Amazon’s storage and data base solutions.
If you are hoping to build a high-traffic site, no matter what platform you use, I’ve discovered there is one secret to designing your application’s architecture. As you get high loads, the solutions available end up spreading the computation and storage issues over many individual servers. Each page you serve to the user will likely come from a single server, but the next page served is likely to come from a completely different server. What that means is that your applications have to be essentially stateless. Whatever state you need from page to page must be kept in cookies on the client computer (hopefully in a secure manner). As long as you remember this basic principle, you application can likely be ported to a cloud environment.
But whatever the details, cloud computing as a service changes everything. Startups no longer need a big upfront investment in server hardware and software. If you can invest some sweat equity in your project, you can easily get going with a few thousand dollars (development machines, usage of AWS, etc.), and not tens or hundreds of thousands of dollars.